Software Design 2016年04月号: Linux 4.1から4.4までのeBPFに関する開発

気がつけば、Linuxカーネル観光ガイドも第49回ということで、5年目に突入していました。びっくりですね。びっくりしたわりにいまさらですが、紹介記事を書いておきます。

5年目最初の記事は最近適用範囲がどんどん広がるeBPFについて見ています。特に最近はclangでCコードからeBPFバイトコードコンパイルしてkernelに投入などできちゃうので楽しいですよ。perfコマンドなら *.cファイルを指定すると、裏でclangでビルドして、eventのフィルタに使ってくれてさらにお得。

 というわけで、よろしくお願いします。

 

Linux 4.3のIO/FSまわりcommit

今日読んだ分をざっくりとtweetから持ってきた

 

Btrfsは独自にbioをsubmitしているので、blkio controllerにacountingされていなかったのを直したような感じ。複数disk対応にはまだ作業が必要とか

transactionが別のtransactionの完了を待っていたが、正常終了かどうかをcheckしていなかった。そのためcommitされていないerror transactionに依存する形でtransactionがcommitされてたという問題のfix

Btrfsではdfで空きスペースがあるのにfileが作れない消せないということがあって問題とされていた. 原因の1つとして、空になったchunkを回収してない -> 新しいchunkをallocできないというのがあった. いつのまにか空のchunkを回収するコードが入っていたらしい。

これはそのまま。evict inodeに時間がかかるほど大量のinodeを溜め込めるメモリがあるマシンじゃないといけないけど、そういうこともあるのかーと面白かった。

syncで無駄にCPUを使うことがなくなってよかったというはなし。ついついsyncしちゃう人に朗報?(謎

複数fileに同時にIO operation(しかもdisk上では並んでいる & fsyncはしてない)というのは実際どういうオペレーションになるのか少し不明だけどSSDでもこれだけパフォーマンス改善するのは面白い

KTSan面白そうなので触ってみたい

log部分のchecksumとかsizeとか、logのcancelが正しく動くかなどlogまわりに多くのfixが入っている

ディレクトリエントリ置換前のfiletypeと置換後のfiletypeをうっかり同じ変数に保存していたため, filetypeがおかしくなってたよというバグ. これは怖い…

portage tree を squashfs で sync しよう

portage-2.2.19以降では Portage tree を Squash FSでsyncできるようになったらしい。

下記メールにある通り、 dev-util/squashmergeをインストールして repos.conf を設定する。 emerge --sync すると最初は Squash FSの snapshot が、最初のsync以後はいまの snapshot に対する差分がDLされて portage tree として見えるようになる。

archives.gentoo.org

Portage tree に SquashFSを使うのは、 tree のサイズを小さくするよく知られたトリックである。 たとえばbtrfs+lzoで504MBのtreeがSquashFS+lzoで96MBにまで小さくできる。

http://dev.gentoo.org/~mgorny/articles/using-deltas-to-speed-up-squashfs-ebuild-repository-updates.pdf

しかし、Squashを毎回やり直すのが面倒であった。 今回のportageの変更で透過的にSquashFS上のportage treeの更新ができるようになる。

 

いまの自分のシステムは Git での syncにしているが、どうせportage treeの中で上書きなんてしないし、 SquashDelta sync に切り替えていこう。特にあまり容量のないサーバでinodeとディスクの節約になって嬉しい。

make.profile はディレクトリでいいらしい

Gentoo は選択なので当然 systemd をサポートしている。 systemd を使うには USE フラグを設定しておいたり、あるいは systemd とではうまく動かないパッケージがあるので使わないように設定しなければならない。これを簡単に設定できるように systemd の profile が作られている。

これまでは systemd の profile はdefault/linux/amd64/13.0/desktop/gnome/systemd か
default/linux/amd64/13.0/desktop/kde/systemd のようにデスクトップ環境の下に作られていた。 最近になってデスクトップ環境以外の systemd profile (default/linux/amd64/13.0/systemd)ができた。

archives.gentoo.org

これを聞いて、よかったべんりーと思っていたのだけれど、実は"/etc/portage/make.profile" は「/usr/portage/profiles下へのsymlink」でなくていいということを知った。

archives.gentoo.org

このメールによると /etc/portage/make.profile のディレクトリを作って、その下の parent ファイルに使いたい profile へのパスを書けば複数のprofile を "mix-in" できるようだ。

そうすると、 desktop+systemd (kdeでもgnomeでもない)とかdesktop+kde+systemd+developer とか no-multilib+systemd とかmusl+systemd とかも設定できる、ということなのだろう。すごい

 

Software Design 2015年 2月号: BPF, seccomp, tinyconfig

 

 

Software Design 2015年 2月号 に記事を書きました。

「第35回 Linuxカーネル観光ガイド」で、 seccomp フィルタ、 bpfシステムコール、そして Linux カーネルの新しい config 方法である tinyconfig について書きました。

日経Linux 2015年 2月号: Btrfs の機能はどうやって実現されてるの?

 

日経 Linux (リナックス) 2015年 02月号

日経 Linux (リナックス) 2015年 02月号

 

 日経Linux 2015年 2月号 に記事を書きました。

「第6回 カーネルハッカーがやさしくひも解くLinux ファイルシステム」として、Btrfs の実装について解説しました。ちなみに次回最終回です。