Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WSL2 の \\wsl$ はどう動いているのか

WSL2 の \\wsl$ はどう動いているのか

第25回分散システム集会にて発表した際の資料になります

https://distributed.connpass.com/event/394720/

Avatar for Honahuku

Honahuku

June 02, 2026

More Decks by Honahuku

Other Decks in Technology

Transcript

  1. WSL で ps した結果 WSL に入った状態でプロセスを見ると、見慣れない plan9 が出てくる。 $ ps

    -ef | grep -Ei '9p|plan9|wsl|init' | grep -v grep root 1 0 ... /sbin/init root 2 1 ... /init root 7 2 ... plan9 --control-socket 7 --log-level 4 \ --server-fd 8 --pipe-fd 10 --log-truncate 観測事実: /proc/7/exe は /init を指していた。 解釈: plan9 は独立した別バイナリというより、WSL の /init が持つエントリポイン トの一つと推定できる。 分散システム集会 / honahuku 3
  2. WSL で mount した結果 ファイルシステム側を見ると、Windows 側のドライブが 9P 経由で mount されてい

    る。 $ uname -a Linux huku-desk 6.6.114.1-microsoft-standard-WSL2 ... x86_64 GNU/Linux $ mount | grep -E '9p|drvfs|wsl|virtiofs' drivers on /usr/lib/wsl/drivers type 9p (...) C:\ on /mnt/c type 9p (... aname=drvfs;path=C:\ ...) D:\ on /mnt/d type 9p (... aname=drvfs;path=D:\ ...) 観測事実: /usr/sbin/mount.drvfs は /init へのシンボリックリンクだっ た。 /proc/filesystems には 9p と virtiofs が見える。 解釈: WSL の境界越えは mount の経路にも現れている。 分散システム集会 / honahuku 4
  3. なぜ Plan 9 が出てくるのか Plan 9 は Bell Labs で

    Unix の後に作られた研究 OS 。 単なる OS ではなく、ネットワークでつながった複数マシンを前提に、分散した計算 資源を一貫して扱うための設計だった。 ここで区別したいのは: Plan 9 は OS / 設計思想の名前 9P はその中核にあるファイルアクセスプロトコル この発表で WSL 内から直接確認できる対象は主に 9P 側で、 Plan 9 は背景となる設 計思想として扱う。 分散システム集会 / honahuku 5
  4. なぜ Plan 9 が出てくるのか Plan 9 の設計で中心となる要素は: private namespace ユーザーごとに、見える資源の階層を組み立てられる

    file interface デバイスやサービスも、できるだけファイルとして扱う 9P その資源へアクセスするための共通プロトコル 分散システム集会 / honahuku 6
  5. Bell Labs から Plan 9 へ Plan 9 の主要な著者には、Rob Pike

    、Ken Thompson 、Dave Presotto らがいる。 Unix の「everything is a file 」を、よりネットワーク前提の形へ押し広げた。 Unix 的な親しみ ファイル、ディレクトリ、プロセス、パイプという見慣れた抽象。 Plan 9 的な徹底 ローカル/ リモート、デバイス/ サービスを、名前空間と 9P で統一的に扱う。 分散システム集会 / honahuku 7
  6. Plan 9 の基本原則 Plan 9 from Bell Labs の論文では、設計はおおむね次の3 つに整理される。

    1. 資源は階層的なファイルとして名前付けされ、アクセスされる 2. それらの資源へアクセスする標準プロトコルとして 9P を使う 3. 異なるサービスが提供する階層を、private namespace に合成する 分散した資源を「自分の名前空間」に組み込む という発想。 分散システム集会 / honahuku 8
  7. 分散システムとしての Plan 9 Plan 9 の典型的な構成では、役割が分かれている。 terminal screen / keyboard

    / mouse user's local view CPU server compute resources processes file server storage 分散システム集会 / honahuku 9
  8. 9P は何を抽象化するのか 9P は「ファイルの中身を送るだけ」のプロトコルではない。 扱うもの: 名前空間への接続 パスをたどること ファイルハンドルに相当する fid open/read/write

    ライフサイクルの終了 つまり ファイルシステムを遠隔から操作するためのプロトコル 。 分散システム集会 / honahuku 10
  9. 9P と他のプロトコルをざっくり比べる 同じ「ファイルに触る」でも、前提はかなり違う。 方式 主眼 ここで効く観点 9P ファイルツリーをプロトコルで公 開 パス探索、

    fid 、軽量な要求/ 応答 SMB Windows 系のネットワーク共有 認証、共有、ACL 、管理機能が厚い NFS Unix 系のネットワークファイルシ ステム リモートマウント、POSIX 寄りの共有 SFTP ファイル転送 参照/ コピーには向くが、マウント前提 ではない 分散システム集会 / honahuku 11
  10. 9P の基本メッセージ系列 /home/user/project/README.md を開いて読んでみる。 Tversion -> Rversion protocol negotiation Tattach

    -> Rattach attach to a file tree Twalk -> Rwalk /home/user/project/README.md Topen -> Ropen open the file Tread -> Rread read bytes Tclunk -> Rclunk release fid パス文字列を一発で送るというより、名前空間を walk して fid を得て操作してい る。 分散システム集会 / honahuku 12
  11. WSL2 の構造 WSL2 は Windows ホスト上の軽量 VM で Linux kernel

    とディストリビューションを動 かす。 Windows host | +-- Windows processes | +-- WSL managed VM | +-- Linux kernel +-- distributions +-- Linux root filesystem WSL1 と違い、Linux システムコールは実際の Linux カーネルに届く。 分散システム集会 / honahuku 13
  12. WSL1 と WSL2 で何が変わるか 公開資料ベースで、境界の置かれ方の違いを整理する。 観点 WSL1 WSL2 Linux syscall

    Windows 側で変換 実 Linux kernel に届く Linux ファイルの実体 Windows 上のファイルと して保持 ext4 の VHD 内に保持 Windows から Linux フ ァイル \\wsl$ 経由でアクセス \\wsl$ 経由でアクセス Linux から Windows ド ライブ 直接 NT に近い経路 VM 境界越えのリモートファイ ルシステム 分散システム集会 / honahuku 14
  13. \\wsl$ のアクセス経路 Windows から Linux rootfs を見るとき、アクセスは VM 境界を越える。 Explorer

    / VS Code / Windows app -- path: \\wsl$\Ubuntu\home\... --> Windows side WSL integration -- file protocol boundary --> Linux side 9P server -- Linux VFS --> ext4-backed Linux filesystem このスライドでは、Windows 側のファイル操作要求が Linux 側 VFS 操作へ対応付けら れる経路を示す。9P はその経路の一部として機能する。 分散システム集会 / honahuku 15
  14. 権限とユーザーの対応 Microsoft Learn の説明では、Windows から \\wsl$ で Linux ファイルにアクセスする と、そのディストリビューションの

    既定ユーザー として扱われる。 作成されるファイルには Linux 側の umask が効く。 Windows app -> \\wsl$\Ubuntu\home\user\new.txt -> Linux distro default user -> default umask, e.g. 022 見た目は Windows 側のファイル操作でも、適用される権限ルールは Linux 側のユーザ ー・権限が基準になる。 分散システム集会 / honahuku 16
  15. DrvFS と \\wsl$ を分けて考える 同じ WSL のファイル連携でも、向きが違う。 経路 見る側 対象

    主な関心 /mnt/c Linux Windows ファイルシス テム DrvFS 、Windows ACL 、metadata \\wsl$ Windows Linux ファイルシステム Linux 既定ユーザー、umask 、9P サ ーバー 両方とも便利だが、同じ仕組みとして丸めない方が理解しやすい。 分散システム集会 / honahuku 17
  16. 性能の見方 境界をまたぐファイルアクセスでは、操作の粒度が効く。 many small files stat/open/read/write の回数 metadata の解釈 file

    watcher Windows 側と Linux 側の toolchain の混在 大きなファイルを少数読む話と、依存ファイルを大量に stat する話は、同じ「ファ イルアクセス」でも性質が違う。 分散システム集会 / honahuku 18
  17. まとめ Plan 9 は、分散した資源をファイル名前空間として扱うことを徹底した研究 OS 9P は、名前解決から read/write まで扱うファイルシステムプロトコル WSL2

    は Linux を lightweight VM で動かすため、Windows/Linux の間に境界があ る \\wsl$ は、その境界を越えて Linux ファイルシステムを Windows から扱う入口 Plan 9/9P の発想は、現代の Windows/Linux 統合の中にも見つけられる 分散システム集会 / honahuku 19
  18. 参考文献 Rob Pike et al., Plan 9 from Bell Labs

    Plan 9 Manual Plan 9 from Bell Labs - Overview Microsoft Learn, Comparing WSL Versions Microsoft Learn, File Permissions for WSL Microsoft Learn, Troubleshooting Windows Subsystem for Linux Plan 9 File Protocol, 9P 分散システム集会 / honahuku 20
  19. Appendix: 9P message 一覧 Message 役割 Tversion / Rversion version

    / message size を交渉 Tauth / Rauth 認証用 file を得る Tattach / Rattach file tree に attach Twalk / Rwalk path component をたどり fid を得る Topen / Ropen file を open Tread / Rread bytes を読む Twrite / Rwrite bytes を書く Tclunk / Rclunk fid を解放する 分散システム集会 / honahuku 21
  20. Appendix: ローカルで見えた WSL の部品 plan9 プロセスの実体: /proc/7/exe -> /init mount.drvfs

    : /usr/sbin/mount.drvfs -> /init Windows 側 service: C:\Program Files\WSL\wslservice.exe Windows 側 driver: C:\Windows\System32\drivers\p9rdr.sys 公開ドキュメントと照らすと、Linux 側の plan9 と Windows 側の wslservice / P9Rdr が、WSL のファイルアクセス境界をまたいでつながっていると読める。 分散システム集会 / honahuku 22
  21. Appendix: plan9 process をもう少し見る $ ps -efww | grep -Ei

    '9p|plan9|wsl|init' | grep -v grep root 2 1 ... /init root 7 2 ... plan9 --control-socket 7 --server-fd 8 --pipe-fd 10 ... $ readlink /proc/7/exe /init $ cat /proc/7/status | grep -E 'Name|PPid|Pid|Threads' Name: init Pid: 7 PPid: 2 Threads: 2 観測事実: プロセス名は plan9 だが、 /proc/7/exe は /init を指す。 解釈: Linux 側では /init の一形態として動作している可能性が高い。 分散システム集会 / honahuku 23
  22. Appendix: mount から見える 9P の情報 $ findmnt -t 9p,virtiofs,drvfs -o

    TARGET,SOURCE,FSTYPE,OPTIONS /usr/lib/wsl/drivers drivers 9p ro,...,aname=drivers,... /mnt/c C:\ 9p rw,...,aname=drvfs;path=C:\;...,trans=fd /mnt/d D:\ 9p rw,...,aname=drvfs;path=D:\;...,trans=fd 見えていること: aname=drvfs という名前で Windows drive が渡されている path=C:\ / path=D:\ が mount option に入る trans=fd が見え、file descriptor ベースの経路がある 分散システム集会 / honahuku 24
  23. Appendix: /init に見える WSL 固有の文字列 $ strings /init | grep

    -E 'mount.drvfs|plan9|virtiofs|drvfs|Relay' | head /run/wsl/virtiofs mount.drvfs aname=drvfs Usage: plan9 --control-socket fd --socket-path path ... virtiofs ... falling back to Plan9 観測事実: /init 文字列中に plan9 と mount.drvfs が共存する virtiofs 関連文字列が存在する falling back to Plan9 という文字列が存在する 分散システム集会 / honahuku 25
  24. Appendix: Windows 側で見えた部品 WSLService Path: C:\Program Files\WSL\wslservice.exe P9Rdr DisplayName: Plan

    9 Redirector Driver Path: C:\Windows\System32\drivers\p9rdr.sys WSL のファイルアクセスは Linux 側だけで閉じず、Windows 側にも 9P の受け口があ る。 分散システム集会 / honahuku 26
  25. Appendix: 公開資料と観察を並べる 公開資料で確認できる事実 ローカル観察 WSL の構成要素として plan9 プロセスに 言及される ps

    で plan9 ... が見える DrvFS / Windows drive 側で 9P 系の経路が 説明される /mnt/c が type 9p Windows 側に wslservice と P9Rdr が存 在する service / driver 実体を確認 実装上 virtiofs 経路が示唆される /proc/filesystems と /init strings に痕跡 分散システム集会 / honahuku 27
  26. Appendix: 観察ポイント WSL 側で見ると、ファイルシステム境界の痕跡が少し見える。 mount cat /proc/filesystems cat /proc/mounts 見るときの観点:

    /mnt/c は何として mount されているか Linux rootfs と Windows filesystem の境界はどこか どの操作が境界をまたいでいるか 分散システム集会 / honahuku 28