のぴぴのメモ

自分用のLinuxとかの技術メモ

Linuxのテスト用に、ハングアップやパニック状態にするカーネルモジュールを作ってみた

テストのために、AWSAmazon Linuxインスタンスカーネルレベルでハングアップさせたかったので、テスト用のカーネルモジュールを作ってみました。

できること

  • カーネルのハングアップ(ping応答もできないレベル。プリエンプションをdisableにして実現)
  • 中途半端なハングアップ(ping応答は帰るレベル。リエンプションはenable)
  • カーネルパニック(echo c > /proc/sysrq-triggerと同じ)

使い方

カーネルモジュールのビルド

コードは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に苦しめられたのも、今は昔ということなんですね。