# Linuxカーネルインタフェース ## 定義 Linux カーネルインタフェースとは、Linux カーネルのサブシステムがユーザー空間プロセスへリソース・情報・サービスを提供し、またカーネルサブシステムの設定・チューニング・監視を可能にするための通信機構の総称である。理想的なインタフェースが持つべき 4 性質は、アーキテクチャ可搬性・イベントベース通知・拡張性・大規模データ転送効率である。Linux の主要インタフェースには、仮想ファイルシステム系(/dev・/proc・sysfs)と BSD ソケット系(ioctl・ソケットオプション・Netlink)が含まれる。(Source: [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]]) ## 横断的知見 - (まだ 1 ソースのみ。2 ソース目以降に追記予定) ## 未解決の問い - /proc・sysfs はカーネルバージョンによって ABI の安定性がどう変化したか? - eBPF マップや BPF_PROG_QUERY はこの分類フレームワークのどこに位置づけられるか? - io_uring は「大規模データ転送」の代替として Netlink と比較されているか? - ioctl は 2024 年現在の Linux カーネルでどの程度新規追加されているか? Netlink への移行は完了したか? ## 主要インタフェースの比較(Table I より、2010 年時点) | インタフェース | アーキテクチャ可搬性 | イベント通知 | 拡張容易性 | 大規模転送 | |---|---|---|---|---| | システムコール | No | No(限定的) | No | Yes | | /dev | No | No | No | Yes | | /proc | Yes(テキスト) | No | No | No | | Sysfs | Yes(テキスト) | Yes(Netlinkを使用) | No | No | | ソケット(Netlink除く) | No | No | No | Yes | | Netlink | Yes | Yes | Yes | Yes | ## 関連 - [[Netlinkソケット]] — 4 性質すべてを満たす Linux の代表的カーネルインタフェース - [[eBPF]] — 現代のカーネル-ユーザー空間計装手段 - [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]] — DTrace は Solaris での同類の問いを扱う ## 出典 - [[@2010__SPE__Communicating between the kernel and user-space in Linux using Netlink sockets]]