Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
xv6に9pを実装した
Search
Kazuki Hanai
March 30, 2021
1
320
xv6に9pを実装した
2020年度ラボユースでの発表で使用した資料です。
Kazuki Hanai
March 30, 2021
Tweet
Share
More Decks by Kazuki Hanai
See All by Kazuki Hanai
事例で知る魔界 〜仮想通貨はやめろ〜
hnkz1015
0
85
「分散システムで学ぶセキュリティ」セキュリティミニキャンプ in 愛知 2019
hnkz1015
0
22
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Adopting Sorbet at Scale
ufuk
73
9.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Statistics for Hackers
jakevdp
796
220k
The Language of Interfaces
destraynor
154
24k
Designing for humans not robots
tammielis
250
25k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Transcript
xv6にリモートファイルシステ ム9Pを実装する サイボウズ・ラボユース10期生 花井一輝
2 もくじ 1. 導入: 何故9Pの実装をすることになったのか 2. 背景知識 2.1. xv6 2.2.
TCP/IPスタック 2.3. 9P 3. 設計・実装について 4. 実演 5. まとめ
導入: 何故9Pの実装をすることになったのか • OSやインターネットに興味 ◦ インターネットの機能に特化したOSを作ることに ◦ 透過的にリソースを使用することができる • 教育用のOS、xv6をベースとして利用
• まずはファイルを透過的に扱う ◦ TCP/IPスタック ◦ 9Pファイルシステムプロトコル 3
背景知識 〜xv6〜 • MITにより開発 • Unixライクなインタフェース • OSの基本的な機能を備える ◦ リソース管理
◦ プロセス ◦ システムコール ◦ ファイルシステム 4
背景知識 〜TCP/IPスタック〜 • OS内部でネットワーク処理を行う • 様々な参考実装が存在する ◦ Linux Kernel ◦
FreeBSD Kernel ◦ lwIP ◦ microps 5 NIC Ethernet IP ARP TCP UDP Socket ユーザプログラム 外部のコンピュータ
背景知識 〜9P〜 • ファイルシステムを操作するプロトコル ◦ Plan9で利用されている ◦ いくつかのバージョンが存在し、9P2000.uを実装 • 14種類のメッセージ
◦ Attach, Stat, Create, Open, Write, Read, etc… • 2つの識別子 ◦ fid ▪ ファイルディスクリプタのようなもの ◦ qid ▪ ファイルに対して一意 6
設計・実装について~TCP/IPスタック~ • TCPのステート管理が大変 ◦ 10種類以上のステートが存在 ◦ RFCや参考実装を読みながら実装 ◦ バグの温床... •
TCP/IPスタックのテスト機構を導入 ◦ make test時にデバドラをテスト用に入 れ替える • Nonblockingなシステムコール 7
設計・実装について~9pサーバ~ • xv6と9Pが仮定するファイルシステムの差異 ◦ タイムスタンプやuid, gid ◦ Buffering処理 • xv6のページサイズを拡張しTCPの性能改善
◦ 4096bytes → 65536bytes ◦ 約10倍の性能改善(lsの速度が16秒→1.5秒に) 8
実演 9
まとめ • xv6に対してTCP/IPスタックと9Pサーバを実装した • いくつかの工夫を行った ◦ TCP/IPスタックのテスト機構を導入 ◦ xv6へのシステムコールの追加・修正 ◦
ページサイズを拡張し、TCPの性能改善 10
ご清聴ありがとうございました! 11