LINUX.ORG.RU

Ядро и монтирование флешки

 , ,


0

1

Роюсь в ядре на предмет поиска места задержки монтирования. В аппаратуре используется BSP Fedora 14, прослушивание udevadm monitor дает следующую картину: KERNEL[1301801945.093717] add /devices/virtual/gpio/gpio246 (gpio)

KERNEL[1301801945.094204] remove /devices/virtual/gpio/gpio246 (gpio)

UDEV [1301801945.094778] add /devices/virtual/gpio/gpio246 (gpio)

UDEV [1301801945.095227] remove /devices/virtual/gpio/gpio246 (gpio)

KERNEL[1301801945.098416] add /devices/virtual/gpio/gpio246 (gpio)

UDEV [1301801945.098482] add /devices/virtual/gpio/gpio246 (gpio)

KERNEL[1301801945.098584] remove /devices/virtual/gpio/gpio246 (gpio)

UDEV [1301801945.099026] remove /devices/virtual/gpio/gpio246 (gpio)

KERNEL[1301801945.660833] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1 (usb)

KERNEL[1301801945.665232] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0 (usb)

KERNEL[1301801945.668453] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5 (scsi)

KERNEL[1301801945.668701] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/scsi_host/host5 (scsi_host)

UDEV [1301801945.681785] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1 (usb)

UDEV [1301801945.689402] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0 (usb)

UDEV [1301801945.693677] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5 (scsi)

------------------> UDEV [1301801945.697071] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/scsi_host/host5 (scsi_host)

------------------> KERNEL[1301801946.675424] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0 (scsi) KERNEL[1301801946.675902] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0 (scsi)

KERNEL[1301801946.677290] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_disk/5:0:0:0 (scsi_disk)

KERNEL[1301801946.678272] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_device/5:0:0:0 (scsi_device)

KERNEL[1301801946.679361] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_generic/sg1 (scsi_generic)

UDEV [1301801946.679613] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0 (scsi)

KERNEL[1301801946.681711] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/bsg/5:0:0:0 (bsg)

UDEV [1301801946.685108] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0 (scsi)

KERNEL[1301801946.689486] add /devices/virtual/bdi/8:32 (bdi) UDEV [1301801946.689606] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_device/5:0:0:0 (scsi_device)

UDEV [1301801946.690528] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_disk/5:0:0:0 (scsi_disk)

KERNEL[1301801946.691177] change /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0 (scsi)

UDEV [1301801946.692527] add /devices/virtual/bdi/8:32 (bdi)

UDEV [1301801946.694370] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/bsg/5:0:0:0 (bsg)

UDEV [1301801946.697668] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/scsi_generic/sg1 (scsi_generic)

UDEV [1301801946.699426] change /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0 (scsi)

KERNEL[1301801946.712965] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)

------------------> KERNEL[1301801946.713060] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/block/sdc/sdc1 (block)

------------------> UDEV [1301801948.846249] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)

------------------> UDEV [1301801950.892867] add /devices/pci0000:00/0000:00:1a.0/0000:04:00.0/0000:05:08.3/usb2/2-1/2-1:1.0/host5/target5:0:0/5:0:0:0/block/sdc/sdc1 (block)

Задержки в самом ядре еще более менее приемлемы. Больше всего не устраивает момент в самом конце, при передаче сообщений к подсистеме UDEV. Кто-нибудь может подсказать, в каких файлах ядра осуществляется передача этих сообщений?

И еще, возможно ли уменьшение времени подключения usbflash?

На всякий случай уточню: udev сидит на netlink и время обработки им этих сообщений пренебрежимо мало (проверил отладочным выводом в системный журнал). Задержка происходит за пределами демона, насколько мне это понятно.

Ответ на: комментарий от anonymous

И как мне помогут алиасы в нахождении файла или в уменьшении времени подключения? По моему опыту видел, что на миниПК на базе Intel Atom N270 под управлением порезанной Убунты время монтирования существенно меньше, практически вдвое.) Но она (миниПК) нам не подходит, поэтому и не используем.

Dark-Mind ()
Ответ на: комментарий от Eddy_Em

Это по работе надо, поэтому и спрашиваю о возможных способах решения. ) Да и увидев разницу между двумя осями нужно же найти отличия, кроме CONFIG_HZ, которые для меня ничего не дали на конкретном железе.

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

А подозреваю, что тут не удев виноват, а правила для него: если правила кривые и их много, то он будет просматривать подробно каждое — вот и задержка.

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

Вообще-то udev грузит правила при запуске, и я не вижу причин тормозить им в памяти. Да и их не так много... в етс всего 3, в либах 41.

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

Вообще-то udev грузит правила при запуске

Возможно я чего-то не понимаю, но при изменении правил я никогда не перезапускал udev — он читает все правила как только появляется какое-то событие. И как заставить его читать эти правила при запуске и зафигачивать их в память — я без понятия.

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

udevadm control --reload-rules

Кстати почти все правила кроме двух моих, поставляются вместе с BSP, и я надеюсь, что они не нагружают сильно железяку. Кстати, общее время на работу в используемой аппаратуре получается 6 секунд против 3,5-4,5 на Убунте. ) Для тех задач, что я решаю, достаточно существенно. Возможно ядро делает какие-нибудь ображения к железу, что приводит к задержке не в самом ядре, а в железе, но мне для отслеживания этого тоже нужно узнать в каком месте ядро пересылает сообщения в канал netlink для udev.

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

А ты время считаешь начиная от втыкания флешки и до отработки правила, или же еще и время на монтирование приплюсовываешь? А то монтироваться она может и полминуты…

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

Ну мне важно, чтобы от момента подключения до момента обращения к флешке проходило минимальное количество времени.

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

И как мне помогут алиасы в нахождении файла или в уменьшении времени подключения?

При чём тут алиасы? параметры смотри - там их меньше чем пальцев на руке

anonymous ()
Ответ на: комментарий от Dark-Mind

С какого хрена они должны поменятся? Это параметры для модуля - их использовать надо. У тебя даже элементарно-букварных понятий о системе нет, зачем ты лезешь вообще что-то делать?

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

«Понабрали по объявлению» ... Все твои элементарно-букварные знания гуглятся с полтыка, так что не тычь мне ими. Ну вбил я echo «options usb-storage delay_use=0» | sudo dd of=/etc/modprobe.d/usbstorage.conf Ну получил cat /sys/module/usb-storage/parameters/delay_use 0

В принципе время упало на 1,5 секунды, ща потестирую. И зачем первого встречного обвинять в нубстве налево и направо? Я прекрасно понимаю, что всех они задалбывают, но надо хоть толику понимания иметь. Тем более это не вопрос из разряда Hello World. Спасибо и на такой помощи, чего уж там. =)

Dark-Mind ()
Ответ на: комментарий от anonymous

Ладно, потестировал, вроде стабильно, и хорошо получилось. Есть еще идеи о том, чем можно уменьшить время «пристыковки» флешки? И только без ругани, пжалста. =)

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

И только без ругани, пжалста. =)

Это ты себе скажи. Прежде чем что-то делать/спрашивать, усвой элементарные азы.

Меньше чем 0 не получится, потому как это уже чисто аппаратно-железные ограничения: как только железо ожило и сообщило о себе материке, а та ядру посредством прерывания, всё и начинает программно отрабатывать - можешь в логах ядра посмотреть время получения прерывания об устройстве и время отрабоки связанного сним действия - хрен ты там что-то сократишь (да и смысла нет сокращать).

Это был ответ на вопрос, который бы у тебя и не возник, если бы у тебя были хотя бы элементарные представления о предмете.

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

Ну-ка, умник ты наш... сможешь сказать мне тогда, откуда задержка между сообщением от ядра и обработкой его UDEV, если udev обрабатывает сообщения практически мгновенно, а ядро сообщает о новом устройстве только после его обнаружения? Можешь еще раз помедитировать над логом, который я наверху положил. И свой вопрос о том, в каком файле ядра происходит обработка выброс сообщения о подключенном usb устройстве, я еще не отменил, потому что видимо в силу собственной скудоумности пока не могу разобраться в исходных кодах udev в подробностях (в общих чертах то там ничего особенного).

Dark-Mind ()
Ответ на: комментарий от Dark-Mind

Ну вот, еще грабли всплыли... После некоторого времени переключения туда сюда флэш носитель перестал вообще опознаваться кем-либо, не создаются файлы, нет сообщений от udev, ничего. При этом после перезагрузки все работает снова как ни в чем не бывало. Может подскажете, чем можно определить неисправность и вообще куда копать?

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