テストのために、AWSのAmazon Linuxのインスタンスをカーネルレベルでハングアップさせたかったので、テスト用のカーネルモジュールを作ってみました。
できること
使い方
カーネルモジュールのビルド
コードはGitHubにあります。
github.com
(1) 必要なパッケージのインストール
カーネルモジュールのビルドに、gccとkernel-develが必要になります。(Amazon Linuxの場合)
sudo yum -y install git gcc kernel-devel
(2) ソースコードをローカルに持ってきます
git clone https://github.com/Noppy/HangAndPanicKernelModule.git cd HangAndPanicKernelModule/
(3)ビルドします
make ls *.ko hang_panic.ko
使い方
(1)モジュールのインストール
sudo insmod hang_panic.ko lsmod |grep hang_panic
(2)使い方の確認方法(要root権限)
cat /proc/hang_panic <<Hang&Panic module>> 'echo c > /proc/hang_panic' >>> panic 'echo h > /proc/hang_panic' >>> hang(disable local irq and preempt) 'echo H > /proc/hang_panic' >>> hang(disable only local irq)
(3)ハングアップさせる(要root権限)
(a) Local IRQ と preemptionをdisableにしてハング(おそらく、ping応答もできない)
echo h > /proc/hang_panic
(b) Local IRQのみdisable(ping応答はできるレベル)
echo h > /proc/hang_panic
(4)パニック(要root権限)
# echo c > /proc/hang_panic
#蛇足
10年前のkernel2.6時代は、ジャイアントロック(BKL:Big Kernel Lockともいう)があったので、もっと綺麗にハングさせることができたのですが、ソースコードの中を探したのですが、今はシステムワイドなロックのコードがないんですね・・。RHEL3時代に、お客さん先のシステムでBKLに苦しめられたのも、今は昔ということなんですね。