2010-09-01から1ヶ月間の記事一覧

LinuxカーネルHack: scripts/checkpatch.plでパッチスタイルの適合性を判定する

昨日からLKMLの購読をはじめた。がんがんメールが飛んでくる。つい最近届いた「[PATCH 01/10] Fs: ext4: acl.c: fixed indent issue」というメールがあって、内容を見ると、単にインデントを修正しただけという内容。 Found and corrected indent issue usin…

LinuxカーネルHack: git blameとその応用

svn blameは日常良く使うけど、gitでも同じことができるか調べたら、やっぱりできた。git blameで。git blameは、横幅かなり取るなぁ。 % git blame mm/oom_kill.c ^1da177e (Linus Torvalds 2005-04-16 15:20:36 -0700 1) /* ^1da177e (Linus Torvalds 2005…

LinuxカーネルHack: Gitを活用して特定のコミッターのコードをまとめて読む

どうしたらもっと効率よくカーネルのコードを読めるか?という問題意識を持ちながらgit logのmanを読んでいたら、使えそうなオプションをいくつか発見。それらのオプションを、普段、カーネルのコードを読むにあたって、いくつかのユースケースに当てはめて…

LinuxカーネルHack: ICMP_MIB_OUTERRORS発、/proc/net/snmp行き

前回のエントリーからの続き。GNU Globalで"ICMP_MIB_OUTERRORS"のシンボルを検索してみる。以下の3つがヒットした。 ICMP_MIB_OUTERRORS 76 include/linux/snmp.h ICMP_MIB_OUTERRORS, /* OutErrors */ ICMP_MIB_OUTERRORS 337 net/ipv4/icmp.c icmp_param-…

LinuxカーネルHack: netstat -sの統計情報とnet/ipv4/icmp.cの意外なつながり

最近ICMP周辺をうろうろしている。今日もICMP。でも、netstatとのつながりが見えて、少しだけ視野が広がった。ネタを見つけようと、net/ipv4/icmp.cのコミットログを眺めていると気になるコメントを見つけた。「LANG=C netstat -s | grep "ICMP messages fai…

LinuxカーネルHack: ICMPヘッダーの調査(GDBで任意のメモリーをArtificial Arraysとして生バイト列で見る)

前回はICMPヘッダーのチェックサムを壊すことができたので、今回は、ICMPヘッダーの中を見ていく。(普通順序は逆)前回に引き続き、icmp_push_reply()を見ていく。icmp_push_reply()の「struct icmphdr *icmph = icmp_hdr(skb);」でソケットバッファ(skb)から…

LinuxカーネルHack: ICMPパケットのチェックサムを壊す実験

ICMP Replyパケットに含まれるチェックサムを意図的に壊したらどうなるのだろう?と思って、試してみることにした。net/ipv4/icmp.cを眺めながら、チェックサムを入れている所を探す。どうやら、icmp_push_reply()でICMPヘッダーのチェックサムを入れている…

LinuxカーネルHack: ビルド時間の短縮を求めて

カーネルをcleanな状態からフルビルドすると、それなりに時間がかかる。フルビルドはそんなに頻繁に行わないけれども、少しでもビルド時間でまたされる時間を少しでも短縮しておきたい。makeには並列ビルドをするために-jオプションが用意されている。-jオプ…

LinuxカーネルHack: 特定ファイルのコンパイルオプション変更

この前gccの最適化によってgdbでnet構造体が見られない(http://d.hatena.ne.jp/fixme/20100905/1283686298)というのがあったけど、このページ(http://blog.kmckk.com/archives/2663340.html)の解説どおりに試したら、すんなりうまくいった。そのメモ。例えば…

LinuxカーネルHack: 今日のgit pull

git pullしたら2.6.36-rc4になった。何か面白そうな変更はあるかな。 % git pull 2>&1 | tee pull.20100914.log remote: Counting objects: 868, done. remote: Compressing objects: 100% (117/117), done. remote: Total 556 (delta 456), reused 536 (del…

LinuxカーネルHack: UMLではSMPの設定ができない?

2.6.35から入ったRPS(Receive Packet Steering)とRFS(Receive Flow Steering)のコードをEmacsで読んでたら、実際にgdbで追ってみたくなった。 http://kernelnewbies.org/Linux_2_6_35#head-94daf753b96280181e79a71ca4bb7f7a423e302agdbでnetif_rxにブレーク…

LinuxカーネルHack: 今日のgit pullで気になったAppArmor

いつものように、git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitをgit pullしてみた。そうすると、気になる更新があった。security/apparmor。なぜ気になったかというと、AppArmorはメインラインにはまだマージされてないものだと思…

LinuxカーネルHack: 2.6.35の主要なコミットを読みたい

このドキュメントからリンクされている、2.6.35における主要なコミットを読んでみると面白そう。 http://kernelnewbies.org/Linux_2_6_35「1.1. Transparent spreading of incoming network traffic load across CPUs」は面白そうな変更。Googleのエンジニア…

GDBの便利技: (gdb)> でコードビューアを立ち上げて快適デバッグ

はじめに はてなダイアリーのスーパーpre記法(ブログ本文にソースコード等を貼り付けるための記法)で始まるテキストがクリップボードに入った状態で、間違って、gdbのシェルに貼り付けてしまった。そしたら、見たことの無い画面が出現。これは便利すぎる。 L…

LinuxカーネルHack: ICMPエコー発、procファイルシステム着 (gdbのwatchを使うよ)

はじめに 前回に引き続き、ICMPまわりを追っていこうとしたら、大幅に脱線して、procファイルシステムに到着。 カーネルを少しいじりつつ、gdbの変数監視機能(watch)を利用することで、/proc/sys/net/ipv4/icmp_echo_ignore_allへの書き込みを監視することに…

LinuxカーネルHack: gdbでICMPパケットの受信処理に割り込んでpingと戯れる

はじめに UML上でネットワークに接続できるようになったので、ネットワークまわりで遊んでみる。 今回は、gdbでICMPパケット受信処理に人間が介入することで、pingの応答時間がインタラクティブに変わる様子を観察する。 失敗 gdbからlinuxプロセスを起動す…

LinuxカーネルHack: kernel/sched.cのコミットログ探索

はじめに カーネルのコミットログを眺めていると、かなり詳細にログが書かれていることに気づいた。 大人数で分散開発をしているのだから、そうなったのは必然的だとは思うが。考えると、コミットは、ある事象に対する具体的な解決を示している。 1つ1つのコ…

LinuxカーネルHack: Rubyコミュニティからの指摘で改修されたTCPの不具合

http://github.com/mirrors/linux-2.6/commits/masterを見ると、 2.6.36-rc3がgit上に上がったみたいなので、git pullしてみた。 % cd ~/linux-2.6 % git pull remote: Counting objects: 1646, done. remote: Compressing objects: 100% (227/227), done. r…