hack のためのネタ帳, etc,,,

経緯

気がつくと 1 cpu が full load 状態で、ほぼ 100% に張り付いていた。
top とか ps aux で調べてみると、kworker/4:1 が犯人。
ググってみると結構ケースバイケースでいろいろ原因がある模様。

で、うちのケースでは以下の xhci が不具合発生してる状況が合致した
こういうケースでは linux-tools に入ってる perf コマンドを使って調査すると良いらしい。
$ sudo apt install linux-tools-generic-hwe-16.04-edge
$ sudo perf record -g -a sleep 10
$ sudo perf report
...
+   56.48%    56.24%  kworker/4:1      [kernel.kallsyms]                        [k] xhci_hub_control
...
のようにすることで xhci_hub_control が戦犯らしいことが判明。

そこで、以下のようにして、xhci_hcd をリセットしてみたところ一時的には解決するんだけど、しばらくすると再発する。
$ lspci -k|grep -i xhci
00:14.0 USB controller: Intel Corporation 9 Series Chipset Family USB xHCI Controller
	Subsystem: Micro-Star International Co., Ltd. [MSI] 9 Series Chipset Family USB xHCI Controller
	Kernel driver in use: xhci_hcd

$ ls /sys/bus/pci/drivers/xhci_hcd/
0000:00:14.0/ bind          new_id        remove_id     uevent        unbind        

$ echo -n 0000:00:14.0 | sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind; echo -n 0000:00:14.0 | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind; echo
0000:00:14.00000:00:14.0

BIOS の「XHCI Hand-off」を「disable」にしとけってコメントもあったので試してみたが、これも効果なし。

以下のフォーラムでは usbcore の autosuspend を -1 にして無効にすると良いというコメント。 以下のようにしてみた。
$ echo -1|sudo tee /sys/module/usbcore/parameters/autosuspend
-1
$ echo -n 0000:00:14.0 | sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind; echo -n 0000:00:14.0 | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind; echo
0000:00:14.00000:00:14.0
$ cat /sys/module/usbcore/parameters/autosuspend
-1

これはどうも上手く行ってそうな雰囲気なので、/etc/default/grub に以下の設定を追加しておいた。
GRUB_CMDLINE_LINUX_DEFAULT="usbcore.autosuspend=-1"

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます