Наблюдение жесткого диска пишет в пространстве ядра (с драйверами/модулями)

Я абсолютно уверен в том, что Вы ищете. Но запускать новое приложение в рабочем X-сервере можно использовать, например:

DISPLAY=":0" mplayer -fs video.ogg

Можно выбрать идентификатор X-сервера, и можно добавить дополнительный экранный идентификатор как :0.1 запускать приложение на экране номер 1.

13
22.01.2014, 17:52
2 ответа

Вы спросили слишком много в одном вопросе — хорошо, технически не, как я предполагаю, "это понимание, корректное", может быть отвечен быстро: нет. Но это не полезный ответ.

Во-первых, Вы правы относительно ata_piix и sd_mod по-видимому, будучи скомпилированным - в к Вашему ядру. Это - выбор, Вы делаете конфигурирование ядра — можно опустить его, включать его или включать его как модуль. (То же с ext4).

Во-вторых, Вы предположили, что записи намного более просты, чем они на самом деле. Основная схема того, как запись работает, - то, что код файловой системы помещает данные, которые будут записаны в памяти как часть кэш-буфера, и отмечает ее как needs-to-be-written ("грязный"). (Если уже нет слишком многое из этого в RAM, в этом случае это на самом деле вынуждено сделать запись...),

Позже, различные вещи (такой как bdflush поток ядра), на самом деле сбрасывают грязные страницы к диску. Это - когда Вы видели бы вызовы через sd, scsi, libata, ata_piix, io планировщики, PCI, и т.д. В то время как существует вероятный DMA, вовлеченный в ту запись, это имеет данные, которые будут переданы, и возможно команда. Но записи на диск, по крайней мере, в SATA, обрабатываются путем отправки команд который в основном средний "сектор X записи с данными Y". Но это определенно не обрабатывается размещением в ОЗУ весь диск (рассмотрите: можно использовать диски, намного больше, чем 4 ГиБ на 32-разрядных машинах).

Кэширование обрабатывается подсистемой управления памятью (не драйвер), в сочетании с файловой системой, слоем блока, и т.д.

tmpfs является особенным, это - в основном полностью кэш. Его просто специальный кэш, который никогда не отбрасывается или записывается обратно (хотя он может быть выгружен). Можно найти код в mm/shmem.c и несколько других мест (попытка ack-grep --cc CONFIG_TMPFS найти их).

В основном запись в диск проходит хорошую часть подсистем ядра; сети являются единственным главным, о котором я могу думать, который не вовлечен в Ваш пример. Правильно объяснение его требует усилия книжной длины; я рекомендую искать тот.

10
27.01.2020, 19:53
  • 1
    Привет @derobert - многие, большое спасибо за Ваш ответ; это содержит точный вид информации, которую я пропускал! Я первоначально запустил с поиска простой иллюстрации пользователя по сравнению с пространством ядра, но я скоро понял, что запись жесткого диска не точно что-то, что я понимаю полностью, и не то, что тривиальный - благодарит подтвердить, что это - на самом деле усилие книжной длины!Удачи! –  sdaau 22.01.2014, 17:44
  • 2
    маленькое примечание: часть объяснения в этом ответе (например, сбрасывание грязных страниц) заметна, если в sudo bash... сценарий в OP: память ftrace увеличена (echo 8192 > $KDBGPATH/buffer_size_kb); и sync ; добавляется после ./wtest ; звонить. Затем я вижу flush-8, kworker (под kthreadd в ps axf), и sync самостоятельно, как обрабатывает в ftrace вызывание функций как, например. ata_bmdma_setup() (который является частью libata, который ata_piix основывается), или get_nr_dirty_inodes(). –  sdaau 22.01.2014, 19:26

Таким образом, мой первый вопрос - почему я не могу наблюдать ata_piix модуль здесь, только в журналах времени начальной загрузки? Это, потому что ata_piix (и sd) создаются как встроенные драйверы в (монолитном) ядре, в противоположность тому, чтобы быть созданным как (загружаемые) .ko модули ядра?

Вы не должны предполагать, какова Ваша конфигурация. На моей машине я имею

$ uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux

Файл конфигурации для этого ядра, расположен в /boot/config-3.2.0-4-amd64.

Вы спросили о ata_piix. Поиск вышеупомянутого .config файл, мы видим CONFIG_ATA_PIIX=m. мы можем подтвердить это путем выполнения

dlocate ata_piix.ko   

альтернативно

dpkg -S ata_piix.ko

linux-image-3.2.0-4-amd64: /lib/modules/3.2.0-4-amd64/kernel/drivers/ata/ata_piix.ko

Так, по крайней мере, в моем ядре, это - модуль.

4
27.01.2020, 19:53
  • 1
    за это, @FaheemMitha - в то время как я услышал о (и использовал), файл конфигурации прежде, по некоторым причинам я полностью забыл об этом в этом примере; приятно определенный! :) В моей системе, grep ATA_PIIX /boot/config-2.6.38-16-generic говорит CONFIG_ATA_PIIX=y, который должен, вероятно, означать на этом ядре, ata_piix сборка "в ядре", и не как модуль.Удачи! –  sdaau 22.01.2014, 17:50

Теги

Похожие вопросы