LINUX.ORG.RU

приложение зависает на getrandom()

 , , ,


0

2

Котаны, помогите. Внезапно после рестарта тестовые виртуалки странно заглючили — приложения на питоне стали вешаться на getrandom() ещё до входа в питоний код. Haveged поставил, не помогло, cat /proc/sys/kernel/random/entropy_avail говорит 2496 . Спустя пару минут в лог прилетает «random: nonblocking pool is initialized» и всё работает.

# вот на этом вешается
getrandom("\34\234\372\255W\363N\0162,\3ek\365\362\343i\277\4\255\251)D5", 24, 0) = 24

Что изменилось я не понимаю, специально на этом тестовом кластере ничего не обновлял, ядро старое — 4.2.5-1-ARCH . Пока я вкуриваю drivers/char/random.c, может кто-то уже знает что вообще происходит?

UP haveged + kernel.random.urandom_min_reseed_secs=5, вроде, решило проблему. Но понять бы почему оно раньше работало и почему сейчас нужны костыли...

★★★★★

А ты можешь на одной виртуалке воспроизвести и отладить ведро через kgdb? Ну или пересобрать ведро с дебажными принтами.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Смысла нет, что происходит примерно понятно «трасируя» обратно от https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L684 . Раз ядро старое то значит дело не в нём.

Я подозревал что какая-то из зависимостей питона обновилась, но не похоже. И грешил на qemu, но он стоит старый (2.4.0-1).

В общем, посмотрю dmesg за пару месяцев назад, посмотрим сколько раньше инициализировался random.

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

wake_up_all(&urandom_init_wait); - оно виснет?

Нового оборудования не подключалось/пробрасывалось?

Я чинил один похожий баг, который проявлялся только с подключенным вайфай-свистком и нашим драйвером (драйвер для другого). Был deadlok вроде бы в глобальной worker_queue.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

wake_up_all(&urandom_init_wait); - оно виснет?

Думаю что да, тут.

Нового оборудования не подключалось/пробрасывалось?

Не, запускаю вот так:

qemu-system-x86_64 \
  -enable-kvm \
  -curses \
  -name vm0 \
  -m 1024 \
  -cpu qemu64 \
  -smp 1 \
  -qmp unix:/var/tmp/kvm_vm0.mon,server,nowait \
  -pidfile /var/tmp/kvm_vm0.pid \
  -device e1000,mac=52:54:90:4A:38:01,netdev=vm0 \
  -netdev bridge,br=intbr,id=vm0 \
  -drive file=/home/virtuals/vm0.qcow2,if=virtio,cache=unsafe

проявлялся только с подключенным вайфай-свистком и нашим драйвером

Хм, я видел что-то такое в гугле, это, наверно, вы спрашивали :)

У меня есть ещё одна теория — возможно, раньше что-то сохраняло энтропию на диск между ребутами. А щас у меня тачки уничтожаются и создаются из темплейта. Возможно, дело в этом. Я посмотрю на systemd-random-seed.service .

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

я видел что-то такое в гугле, это, наверно, вы спрашивали

Не, я не спрашивал, я взял kdb и отладился. Там бесполезно было спрашивать - куча закрытых проприетарных патчей на ядро.

DELIRIUM ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.