Linux

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

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

Qemu小ネタ集

前回記事「Qemuのしくみ (の一部)」の内容が重かったので、今回はQemuの小ネタを集めてみました。

Qemuのしくみ (の一部)

OSS の開発支援や障害解析サービスなどの仕事柄、Qemu の仕組みや内部動作をお客様に説明する必要がある場合があります。そんな時に「Qemuの〜についてはここを見てね」と言えるような文書があるといいなぁと思い、自分で作ってみることにしました。

ARMv8-A AArch64 ベタメタルプログラミング ブート編

ARMv8-A アーキテクチャでの 64bit 環境 (AArch64) でのブートプログラム作成についてまとめます。 今回のブート処理では AArch64 ステートで実行し例外レベルを EL1 にして特権プログラムの実行の準備までを行います。

詳説 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) と呼ばれる仕組みについて、実装レベルで解説します。

RISC-V OSを作ろう (6) ~ セマフォ

「RISC-V用の小さなOSを実装してみよう」の連載記事第6回目となります。 前回は、指定時間だけタスクをスケジューリング対象から外す「タスクの時限待ち機能」を実現してみました。 今回は、タスクを協調動作させるための仕組みとして、セマフォによる同期機…

RISC-V OSを作ろう (5) ~ 時限待ち

「RISC-V用の小さなOSを実装してみよう」の連載記事第5回目となります。 前回は、タイムシェアリングスケジューリング機能を実装してみました。 今回は、指定時間だけタスクをスケジューリング対象から外す「タスクの時限待ち機能」を実現してみましょう。

Intel Optane Persistent Memory を使ってみた

Intel Optane Persistent Memory を使うにあたり必要な、基本的な概念や Linux 上での使用方法などを説明します。

RISC-V OSを作ろう (4) ~ タイムシェアリングスケジューリング

「RISC-V用の小さなOSを実装してみよう」の連載記事 第4回目となります。 第3回では、割り込みハンドラを動作させるところまで実装してみました。 今回は、タイムシェアリングスケジューリング機能を実装してみましょう。

RISC-V OSを作ろう (3) ~ 割り込み

「RISC-V用の小さなOSを実装してみよう」の連載記事 第3回目となります。 第2回では、複数のタスクが切り替わりながら並列動作できる仕組みを作りました。 今回は割り込みハンドラを動作させるところまで実装してみましょう。

Apport ~Ubuntu のコアダンプ作成動作~

Ubuntu のコアファイル書式が変わっている事を知り、現在の書式を司る Apport について障害情報の収集に関わる話を含め調べてみました。

RISC-V OSを作ろう (2) ~ タスク切り替え

「RISC-V用の小さなOSを実装してみよう」の連載記事 第2回目となります。 第1回では、boot プログラムが動くところまできました。今回は、複数のタスクが切り替わりながら並列動作できる仕組みを作っていきます。

RISC-V OSを作ろう (1) ~ブート処理

RISC-VはMIPSアーキテクチャの流れを汲むRISC CPUです。 Linux上で利用できるRISC-Vツール群も揃ってきたので、それらを使ってRISC-V用の小さなOSを実装してみようと思います。

CentOS 8.3 を AlmaLinux 8.3 にしてみた

CentOS 8 のサポートが2021年12月31日で終了するとの発表がありました。そこで、CentOS 8.3 から AlmaLinux 8.3 への移行するツールを用いて実際に移行してみました。移行の際に、どのようなことが行われているか、どのような注意点があるのかを解説します。

LVM の動作について 〜 ディスクデータ移行と pvmove, lvconvert を例題として

クラウド全盛のこのご時世においても、物理マシンのお守りをしないといけないことはあって、古くなったディスクの交換作業が必要になりました。 オンラインのままディスクを移行できる pvmove というコマンドがありますが、このコマンドの解説記事は少ないの…

.note.ABI-tagとはなにか

前回記事「vmlinuxのヒミツ」を書くために、いくつかの実行ファイルで readelf を実行して気づいた、".note.ABI-tag" セクション。この ".note.ABI-tag" について調べてみました。

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_"を幅広く検知する為の機構です。一方で巷にはそのメカニズム、つまり何をどのようにして検知するのか…