LINUX.ORG.RU

VirtualBox. Пожирание проца в ядре. ioctl, VIDIOC_ENUMAUDIO.


0

1

Жил был старый vbox с несколькими виртуалками - линуксовыми и виндовыми. В винде не были выдны оба ядра. Два проца было видно в диспетчере устройств, а в таск-менеджере только один. Решил проапгрейдить vbox. Перезапускаю эту винду - та же история. Решил переставить винду, вдруг она что-то запоминает у себя на тему процов во время установки. Теперь попытка её поставить - это очень медленные события в гостевой ОС, т.к. весь проц сожран приведённым ниже мясом:

Почему vbox это делает?

В процессе установки, например, генты из образа install-x86-minimal-2008.0.iso - история та же.

Версии vbox были испробованы: 3.2.8, 3.2.10. Смена версии vbox сопровождается, конечно, пересборкой его модулей, rmmod старых, modprobe новых.

CPU в режиме ядра занят вот чем:

ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
futex(0x80d5224, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x80d5220, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x80d5250, FUTEX_WAKE_PRIVATE, 1) = 1
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
ioctl(19, VIDIOC_ENUMAUDIO, 0)          = 0
...

Т.е., сквозь тьму из ioctl иногда пробиваются какие-то другие вызовы.

Попробуй выгрузить модули: cpia2, pvrusb2, sn9c102, uvcvideo. Попробуй выгрузить модули, относящиеся к v4l.

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

Ядро: 2.6.28-gentoo-r6 #8 Из v4l-модулей был только: gspca, но куда-то он делся. В общем, модулей нет. Но поддержка v4l в ядре осталась. Может убрать галку и ядро пересобрать?

P.S. Даже в режиме простоя (выберите раздел для установки), занято одно ядро процессора на полную. Всё занятое время проходит в вызовах ядра. Strace показывает, как фигачит этот ioctl() с этим параметром.

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

Если запустить в виртуалке gentoo с live-cd, а там сделать ping 192.168.1.12 -f, где 192.168.1.12 - хост ОС (сетевой обмен настроен), то strace показывает тонны тонн этих ioctl() тоже.

В режиме простоя и винда и линукс сыплют эти ioctl() в небольшом количестве, практически незаметном.

Но стоит в винде запустить компиление проекта в visual studio или ping -f в линуксе (там собирать ничего не пробовал), начинает сыпать этот ioctl().

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

>Может убрать галку и ядро пересобрать?

Может помочь.

Другой вариант - запретить обращения к устройству v4l в /dev. Убрать права. Файл устройства можно посмотреть в strace во время open() - какому файлу соответствует 19-й дескриптор.

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

19-й дескриптор - это /dev/vboxdrv. Типа они так общаются. Может быть через ioctl() передаётся некое число, которое совпадает с VIDIOC_ENUMAUDIO? )

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

>19-й дескриптор - это /dev/vboxdrv

Тогда мои советы тебе не подойдут.

ioctl должны быть, иначе как они будут общаться. Странно, что они все одинаковые. Смотри код vbox, может быть, так и должно быть.

ttnl ★★★★★
()
Ответ на: комментарий от no-dashi

Да отключал, не помогает. Странно, что «так и должно быть». Оно ведь ест весь проц. Процесс компиляции С++ - проекта под студией - это попытка винды просочиться свозь тонны этих ioctl (-;

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

>Даже в режиме простоя (выберите раздел для установки), занято одно ядро процессора на полную

Из-за этого я недавно переехал на vmplayer. Там, если гостевая винда простаивает, то и хостовая система тоже простаивает.

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

vmplayer встал как-то криво) Модули пришлось руками компилить и в /lib/modules закидывать.

Запускается. При попытке создать новую VM (нажатие на кнопку), вылетает. Вот strace:

rt_sigaction(SIGRT_3, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_3, {SIG_DFL, [RT_3], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_4, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_4, {SIG_DFL, [RT_4], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_5, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_5, {SIG_DFL, [RT_5], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_6, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_6, {SIG_DFL, [RT_6], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_7, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_7, {SIG_DFL, [RT_7], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_8, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_8, {SIG_DFL, [RT_8], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_9, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_9, {SIG_DFL, [RT_9], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_10, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_10, {SIG_DFL, [RT_10], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_11, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_11, {SIG_DFL, [RT_11], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_12, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_12, {SIG_DFL, [RT_12], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_13, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_13, {SIG_DFL, [RT_13], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_14, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_14, {SIG_DFL, [RT_14], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_15, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_15, {SIG_DFL, [RT_15], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_16, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_16, {SIG_DFL, [RT_16], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_17, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_17, {SIG_DFL, [RT_17], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_18, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_18, {SIG_DFL, [RT_18], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_19, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_19, {SIG_DFL, [RT_19], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_20, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_20, {SIG_DFL, [RT_20], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_21, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_21, {SIG_DFL, [RT_21], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_22, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_22, {SIG_DFL, [RT_22], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_23, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_23, {SIG_DFL, [RT_23], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_24, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_24, {SIG_DFL, [RT_24], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_25, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_25, {SIG_DFL, [RT_25], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_26, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_26, {SIG_DFL, [RT_26], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_27, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_27, {SIG_DFL, [RT_27], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_28, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_28, {SIG_DFL, [RT_28], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_29, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_29, {SIG_DFL, [RT_29], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_30, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_30, {SIG_DFL, [RT_30], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_31, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGRT_31, {SIG_DFL, [RT_31], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [PROF], NULL, 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb8038b78) = 5721
--- SIGCHLD (Child exited) @ 0 (0) ---
exit_group(0)                           = ?

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

Ёлкопалка!

Windows XP не хочет вставать на vmplayer, т.к. не поддерживает LCI logic SCSI - адаптеры, через которые в vmplayer коннектятся жёсткие диски.

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

*LSI

Your guest operating system is Windows XP and you have one or more virtual SCSI devices installed in your virtual machine.
Please be aware that Windows XP does not support the LSI Logic SCSI adapter that VMware Player currently uses for its virtual SCSI devices.
Select OK to continue, or Cancel to abort.
kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Просто нужно запустить машину с IDE дисками...

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

KRoN73,

А много ioctl у тебя гоняет vmplayer? Мой кучу времени сидит в ядре. Странные у него коммуникации со своими модулями.

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

>А много ioctl у тебя гоняет vmplayer?

Не знаю, не смотрел. Я чисто по внешним эффектам :) VitualBox в последний год тормозит систему при простаивающей гостевой винде. VMPlayer, которого я несколько лет избегал, паразитной загрузки сейчас почти не даёт.

У меня 90% виртуальной работы сейчас - это Picasa. Когда Picasa ширится по своей коллекции в поисках лиц, под VirtualBox работать невозможно. С VMPlayer стало всё нормально.

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

KRoN73,

а у тебя работает виртуализация в проце? Я тут qemu-kvm зацениваю сижу. Летает! Оказывается, у меня раньше /dev/kvm не было. Значит ли это, что все мои предыдущие виртуалки не использовали аппаратную вирт.? Или она возможна без /dev/kvm? Щас винда установится - чё-нибудь реальное запущу и отпишу.

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

>а у тебя работает виртуализация в проце?

Нет. У меня на той машине простой P4.

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