system(kernel)のCPU使用率

先日ehci0の割り込みが暴れたサーバをちょっとだけアップデートした。
結局怖いのでUSB接続のHDDはやめにして、SATA接続に。

しかし起動してみると重いときがある。
おかしいと思って割り込みを見ても正常だけど、system(kernel)のCPU使用率が異常に高い。

どうやらtopで調べるとzfsの書き込み負荷が原因のようだったので、とあるzfscompressionを調整して解決。

問題発生時のtopはこんな感じ。これはいじりまわした後なので多少ましになっていて、元はload averageが10を超えていた。
topの-s1は更新周期1秒を、-Sはシステムプロセスの表示、-Hはスレッドの表示。
これでsystem%の内訳が見られる。

# top -s1 -SH

last pid: 92403;  load averages:  4.56,  3.61,  3.89                                     up 2+19:45:36  08:26:33
955 processes: 23 running, 913 sleeping, 1 zombie, 18 waiting
CPU:  0.2% user,  0.0% nice, 59.3% system,  0.0% interrupt, 40.5% idle
Mem: 404M Active, 998M Inact, 13G Wired, 1624K Cache, 6528K Buf, 741M Free
ARC: 11G Total, 2633M MFU, 7893M MRU, 36M Anon, 256M Header, 935M Other
Swap: 6144M Total, 576K Used, 6143M Free

  PID USERNAME      PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND

    0 root          -16    0     0K  9920K CPU0    0 628:50 15.77% kernel{zio_write_issue_}
    0 root          -16    0     0K  9920K -       3 628:39 15.77% kernel{zio_write_issue_}
    0 root          -16    0     0K  9920K CPU2    2 628:34 15.77% kernel{zio_write_issue_}
    0 root          -16    0     0K  9920K -       1 628:44 15.48% kernel{zio_write_issue_}

明らかにzio_write_issue_が原因。zfs関連でCPUを食いそうなのはdedupとcompressionと当たりをつけて、dedupは使っていないことからcompressionを調査。

# zfs get compression | grep -E 'local$'                       
sakura/elasticsearch                               compression  gzip-9    local
storage/db/zabbix                                  compression  gzip-9    local

どちらも常時大量に書いていそうなので、片方ずつzfs set compression=noneを試し、結局両方とも影響があったのでgzip-4に落としたところ軽くなった。

Change Logは追っていないけど、gzip-9の挙動が変わった……のかな?