Kernel

InferでLinuxカーネルのメモリ関連エラーを検出してみる

静的コード解析ツールの1つである Inferを使ってLinuxカーネルのソースコードを解析し、メモリ関連の不具合を検出してみます。Infer のビルドから、解析の実行と検証、解析結果の精査についてまとめました。

DPDKのソースコードから読み解くユーザ空間ドライバとPCIデバイスの関係

DPDKのソースコードを読み解くことで、「カーネルのEthernetドライバの代わりにユーザ空間でEthernetドライバを作っている、とあるが実際のPCIデバイスにどうやってユーザ空間からアクセスしているのだろうか?」という疑問を(部分的ながら)解決します。

詳説 eBPF 実装編

前回の概論編では、eBPFがどんなもので、どのように実現されているかを中心に解説し、eBPFの技術要素 (BCC、BCC-Tools、CO-RE) にも触れました。 実装編となる今回は、BCC-Toolsの後継となるlibbpf-toolsよりopensnoopコマンドに着目してソースコードレベル…

詳説 eBPF 概論編

近年注目されているeBPFについて、概論編と実装編に分けて解説します。 概論編となる本稿では、eBPFとは何か、eBPFで実現できる事、eBPFの仕組み、eBPFの技術要素 (BCC、BCC-Tools、CO-RE) についてまとめました。

ハンガリアン SCHED_DEADLINE

Linux のリアルタイムスケジューリング実装である SCHED_DEADLINE の概要に触れた後、最適化問題 IAP (Incremental Assignment Problem) を核に据えて Unrelated なマルチ・プロセッサモデルでの SRT-optimality を証明した Unr-EDF をベースに、SCHED_DEADL…

vmlinuxのヒミツ2 -- vmlinuxに特有のセクション その3 - exception table

これまで様々なvmlinux特有のELFセクションを見てきました。今回は`__ex_table`セクションを取り上げ、実際のコードがどうなっているのか、という方向からこのexception tableを見ていきます。

vmlinuxのヒミツ2 -- vmlinuxに特有のセクション その2 - 起動時バイナリパッチ

前回記事では、vmlinuxのinitセグメントに含まれる、`.percpu`、`.init.text`、`.init.data`などのセグメントについて調べました。今回はその続きで、そのinitセグメントに含まれている`.parainstructions`、`.altinstructions`、`.altinstr_replacement`の…

詳解 Linux ネットワーク - NAPI 編 (後編)

前編では、NAPI とそれに関連するソフトウェア割り込みの仕組みについて解説しました。 本稿では、前回の最後に触れた通り、Linux kernel に組み込まれている、NIC をソフトウェア割り込み以外で polling するための仕組みである、Busy Poll Socket と kthre…

vmlinuxのヒミツ2 -- vmlinuxに特有のセクション その1

1年半前に投稿した「vmlinuxのヒミツ」(https://valinux.hatenablog.com/entry/20200910) の第2弾です。 今回は、コード例もなく、単にLinuxという巨象の枝葉末節をああでもないこうでもないと闇雲に撫で回してみました。

詳解 Linux ネットワーク - NAPI 編 (前編)

Linux におけるネットワーク受信処理で利用されている、NAPI (New API) と呼ばれる仕組みについて、実装レベルで解説します。

perf を使った性能分析

perf は、Linux の性能に関する情報を収集、分析するためのツールです。本記事では、ネットワークの受信処理を例に、perf を使った性能分析を行う方法を解説します。

AF_XDPアプリケーション性能特性の定性的評価 〜レイテンシ編

近年活発に開発が進んでいる AF_XDP を利用したアプリケーションは、Linux Kernel Network Stack をバイパス出来るという観点で、DPDK を活用したアプリケーションと比較されることが少なからずあるかと思います。 本記事では、AF_XDPアプリケーションにおけ…

vmlinuxのヒミツ

vmlinux の入手・インストールをはじめ、ELFファイルやセクションについて解説します。

Linux Kernel lockdep機構解説

lockdepは、Linux Kernelのlocking primitiveの誤使用に因るdeadlock検知・予測をはじめ、synchronization primitiveを誤った形で使用している"_bad code_"を幅広く検知する為の機構です。一方で巷にはそのメカニズム、つまり何をどのようにして検知するのか…