LINUX.ORG.RU

LA 0.8 при простое

 , ,


0

2

Есть машинка с ядром 5.15.86, slackware 15, без Х-ов.

Замечена странность которую нигде больше не наблюдаю:

При полном отсутствии загрузки - постоянный LA 0.75-0.85

Кто такой «kworker/11:3+usb_hub_wq»?

Он периодически появляется в ps со статусом «D»

lsusb периодически тоже подтормаживает (0.6 секунды вместо 0.009).

Есть kvm (который изображает usb2.0-хаб) через который подключены клава и мышь.

Как найти кто дает этот LA?

★★★★★

Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от urxvt

Еще раз - CPU оно не жрет. Система в простое (cpu,disk,network).

Но LA 0.8.

Я помню, что в онтопике состояние «D» влияет на LA.

Я уже начал понимать, что нужно какую-то статистику от планировщика, но есть сомнения, что её можно получить для ядерного треда.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Попробуйте запустить на несколько секунд в цикле ps и grep'ать из его вывода всех в состоянии ″D″, может кто-нибудь всё время ждёт.

Ещё есть PSNAPPER (psn), он и по потокам ядра что-то показать может. Может дойдёте до «Off-CPU flame graph» https://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html или до ftrace...

mky ★★★★★
()
Ответ на: комментарий от mky

psn показал интересную вещь

=== Active Threads ========================================================
 samples | avg_threads | comm                     | state                  
---------------------------------------------------------------------------
     596 |        0.52 | (kworker/*:*+usb_hub_wq) | Disk (Uninterruptible) 
     118 |        0.10 | (apcupsd)                | Disk (Uninterruptible) 
Что так долго usb_hub_wq делает в состоянии D - непонятно

Большую часть времени он проводит вот так:

cat /proc/`pgrep -f usb_hub_wq`/{stat,stack}

24049 (kworker/14:0+usb_hub_wq) D 2 0 0 0 -1 69238880 0 0 0 0 1 2 0 0 20 0 1 0 125086 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 1 0 0 17 14 0 0 0 0 0 0 0 0 0 0 0 0 0
[<0>] msleep+0x2d/0x40
[<0>] hub_port_reset+0xdd/0x760
[<0>] hub_event+0x3f3/0x1500
[<0>] process_one_work+0x1d5/0x3b0
[<0>] worker_thread+0x50/0x3e0
[<0>] kthread+0x127/0x150
[<0>] ret_from_fork+0x1f/0x30

Видимо это неисправимо. Поробую я откатиться на 5.10 или обновиться на 6.1 которая объявлена LTS

vel ★★★★★
() автор топика

Лечить по фотографииДиагностировать хардварные проблемы по переписке – дело безнадежное.
Мне вот в последней моей теме ничем тут в похожем вопросе помочь не смогли.

Видимо это неисправимо.

В большинстве случаев при наличии времени и необходимости баг удается найти.

Я бы поступил так:

  1. С помощью динамической трассировки (libbpf или systemtap) локализовал бы точно, в каком месте кода ядра затык;
  2. разобрался бы, что делает этот код и код, его окружающий;
  3. изучал бы до полного просветления даташит на оборудование, которым этот код управляет.

Я бы указал в теме точное название оборудования и прикрепил dmesg/lspci -vv целиком. Может, кто-нибудь когда-нибудь наткентся. Авось.

i586 ★★★★★
()
Последнее исправление: i586 (всего исправлений: 1)