開発したもの
時系列順に振り返っていく
xdp-nat
「XDP でなんか作ってみたいなぁ」と思っていたところ、2023年年始に勢いで作ってみた NAPT ソフトウェア。 TCP の状態管理や UDP, ICMP のタイムアウトをちゃんとやりつつ、cli も実装されていて何気に気合が入っている。 使い方のマニュアルが残されていないため、毎回ソースコードを読んで使い方を確認している。
zig-vmm
Zig で書かれた KVM 用の VMM (Virtual Machine Monitor)。 virtio-net が実装されているため、Linux kernel と initrd を読み込んで起動しnginx を動かして、外部に対して Web ページを公開できる。 大部分は gokvm を参考にした(感謝!)。 virtio 系実装として最初に virtio-console を実装したが、躓くことが多く、ゲスト kernel で printk デバッグをしながら実装していた。
etherip-linux
「EtherIP の実装やってみるか」で tap デバイス版と eBPF 版を実装した。 eBPF 版の開発で TSO, GSO 周りで苦しんでいた。
twitter.comTSO 問題、解決する方法を見つけた気がしている
— Naoki MATSUMOTO (@PiBVT) 2023年4月10日
ユーザーランドエージェントが influxDB 向けに pps や bps のメトリックを吐く機能を持ち、意外と高機能。 既に周囲の環境にデプロイしているが、ソースコードに機微なアドレス等がハードコードされているため公開できない模様。
bypass4netns
Rootless コンテナ向けの TCP/IP 通信の高速化モジュールとして開発し、しばらく放置してしまっていだが、最近改良を行った。 実は bypass4netns に関する論文を国際会議に投稿し、一度 reject されている。 GitHub Actions 上で redis や静的リンクされた Go バイナリなどを対象にテストを自動で行うようになった。 iptables のポリシを考慮した socket switching やマルチノード通信の高速化の機能などが追加され、少しずつ進化している。
meta-fuse-csi-plugin
FUSE を用いたあらゆるファイルシステムの実装を一般ユーザーの Kubernetes Pod 内で利用できるようにする CSI Plugin。 Preferred Networks でのインターン「キャッシュを利⽤した機械学習・深層学習ワークロードの加速」で取り組んだ成果について公開したもの。 インターンでは、メンターの上野さん、上西さん、Cluster Services Team、Storage Team の方々には大変お世話になりました。ありがとうございました。 FUSE の操作を適切に仲介する手法である fusermount3-proxy は、実は議論している中でぽっと出たアイデアを数時間で実装したものだったりする。 意外とうまく動いて書いた本人も驚いている。
そのほか
overlay-sync
リモートに保存されたファイル群を読みながらバッググラウンドで別の場所にファイルをコピーするための簡易ツール。 OverlayFS を用いている。 なお、作った2週間後に利用目的が消失した。
simple-sev-snp
AMD SEV-SNP を使うかぁとなった時、想像以上に情報が無かったため色々調べてスクリプトもまとめた。 Measurement の検証がうまくいかない原因が SEV-ES 向けのパッチであることを知った時、「ヘァッ!!」となった。
書いた論文
CREBAS: Enabling Network Access Control in a Home with One Click
2022 年末に accept され、2023 年に出版された論文。 卒論で取り組んでいた、高粒度かつ設定が容易なネットワークアクセス制御に関する成果をまとめた論文。 安い WiFi ルータに OpenWRT ファームウェアを焼いて OpenvSwitch をインストールして OpenFlow ルータとして活用したり、OpenFlow コントローラを自前で実装していたり、第一著者(自分)の趣味が割と入っている。
Efficient Container Image Updating in Low-bandwidth Networks with Delta Encoding
https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/286295/1/ic2e59103.2023.00009.pdfrepository.kulib.kyoto-u.ac.jp
修士論文で取り組んでいた内容をまとめた論文。 「コンテナイメージの更新がレイヤなの、あんま効率良くないよなぁ」という素朴な疑問に対する自分なりの解を見つけようとした論文。 更新前と更新後のイメージ間で、ファイル毎に差分を取得し、その差分のみ転送するというアイデアに基づいた提案手法で、更新に要するデータサイズが削減できることを確認した。 差分を lazy に適用する専用ファイルシステムや、それに合わせた snapshotter plugin を実装しているため、containerd で簡単に利用することが出来るのがこだわりポイントの一つ。 更新に要するデータサイズに限らず、あるアプリケーションについてローカルで複数バージョンを保持する場合に消費するディスク容量も削減できる。
博士課程について
今年の4月から京都大学情報学研究科の博士課程に進学した。 総括としては、1年を通して、自分自身の力足らず、未熟さを痛感した。 論文を読み書く能力が圧倒的に足りないと感じていたため、前期(4月~7月)の間は毎日論文を1本読みその内容をまとめる取り組み(日課論文)を行っていた。
↓日課論文のまとめ
↓論文まとめの例 その一部は、情報科学若手の会における論文紹介という形で公開している。 hackmd.io
しかし、その取り組みもその後途切れてしまっているため、自分自身の研究活動に対する本気さが足りないのではないか?と思っている。 また、研究活動自体も取り組みが自分自身の気分によるところがあり、毎日コツコツ取り組み、小さな発見も調査したり、文章にまとめて知見として公開するというが出来ていなかった。 2024年は、そういったサボり癖を排除し、研究活動に集中して取り組むようにしたい。
今年の総括 & 来年の抱負
今年は自分自身の未熟さを痛感した1年であった。 未熟さに限らず、自分自身に負けていると感じることも多くあり、思い悩むことが多かった。 その一方で、出張やインターンを通して多くの人と会い、また多くのことを助けていただき、感謝してもしきれない。 2024 年は、今年の反省を踏まえて、大きな飛躍が出来るような1年となるよう頑張っていきたいと思う。