前回の続きエントリ です
https://blogs.oracle.com/LetTheSunShineIn/entry/running_perf_top_on_virtualbox に書かれていた設定にすると smp_affinity を変えなくてもシェルプロンプトのキー操作のレスポンスが改善しました
I thought high kernel CPU was caused by "acpi_pm_read". I googled and got some hints and shut down the VM and changed the setting. $ vboxmanage modifyvm Node01 --hpet on $ vboxmanage modifyvm Node01 --acpi off
カーネルのクロックソースを ACPI から HPET にするとのことです。
Vagrantfile だとどう書くの?
Vagrantfile だと下記のように設定します
config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--cpus", 4] # 適当に CPU 増やす vb.customize ["modifyvm", :id, "--hpet", "on"] # ↑ のブログに書いてある vb.customize ["modifyvm", :id, "--acpi", "off"] # ↑ のブログに書いてある end
上記ブログの内容は、私が調べているのとはまた別の問題のようですが ボトルネックの原因はおんなじなのかなー。HPET と ACPI の説明は 本の虫: 100ナノ秒ぐらいの分解能をもつクロック実装 が分かりやすいなと思いました。
perf で調べてみてます
この設定によってどんな風にボトルネックが解消されたのかを perf で調べてみてるのですが 難しくて分かりません ... https://gist.github.com/hiboma/9865994 に perf の結果をつらつらと並べています 。何か分かったら続きを書きます
追記
/sys/devices/system/clocksource/clocksource0/current_clocksource でクロックソースを確認できるのを思い出したので調べてみました
hpet on + acpi off
オラクルブログさんに書いてあった hpet on + acpi off 設定ではクロックソースが jiffies になってますね。aれー hpet であるべきだと思うんだけど、これでいいんだろうか?
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource jiffies
hpet on + acpi on
試しに hpet on + acpi on にしてみると hpet になりました。キー操作は快適です
$ echo hpet | sudo tee /sys/devices/system/clocksource/clocksource0/current_clocksource hpet
hpet on + acpi on の時は acpi_pm も使えるようです。available_clocksource で選択できるクロックソースを確認できます
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource hpet acpi_pm
acpi_pm に変えると、もたつくような … perf で計測せねばー
$ echo acpi_pm | sudo tee /sys/devices/system/clocksource/clocksource0/current_clocksource acpi_pm
デフォルトでは acpi_pm がもっさりの原因
Vagrantfile で特に何もいじらない場合デフォルトで hept off + acpi on となっており、クロックソースは acpi_pm となります(デフォルト)。これがもっさり原因のようです。
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource acpi_pm
acpi_pm だとなんで駄目なんかなー