Я не понимаю, что происходит, когда я выполняю запись из пространства пользователя в Linux. Каков полный поток, вплоть до запоминающего устройства? Предположим, я использую CFQ и ядро, которое все еще использует pdflush.
Говорят, что CFQ помещает запросы в очереди синхронизации и синхронизации. Например, запись выполняется с синхронизацией, поэтому она поступает в очередь с синхронизацией в соответствии с приоритетом ввода / вывода. Очередь получит ЦП в соответствии с временными интервалами CFQ, настройками срока действия и т. Д. Отлично.
В то же время пишет грязные страницы. Запись грязных страниц запускается настройками виртуальной машины и выполняется в контексте потока pdflush, который запускает копию background_writeout (), которая вызывает writeback_nodes (). Когда это происходит, записи pdflush обязательно синхронизируются.
Означает ли это, что у нас есть две конкурирующие записи, которые потенциально могут выполняться для одних и тех же или аналогичных запросов на запись - одна управляется механизмами очередей CFQ, а другая запускается подсистемой VM?
Означает ли это, что подсистема VM эффективно нарушает правила CFQ, как только мы нажмем dirty_background_ratio, так как pdflush не имеет такой же приоритет io, как и процесс запроса?
И как только мы нажмем dirty_ratio, настройки CFQ становятся более или менее устаревшими, поскольку все записи становятся синхронизированными?
Я прочитал много конкретной информации о двух подсистемах, но мне еще предстоит понять весь поток запросов на запись. Интерактивная карта ядра Linux не включает планировщик ввода-вывода.
Любые указатели на всю картину будут оценены.
Спасибо,
Alex