Очереди запросов планировщика ввода-вывода CFQ

Планировщик ввода-вывода CFQ в Linux имеет набор очередей запросов. Синхронные запросы от процессов помещаются в отдельные очереди запросов для каждого процесса, а все асинхронные запросы помещаются в набор общих очередей.

Как запросы классифицируются как синхронные или асинхронные? Означает ли асинхронность в этом контексте ввод-вывод, выполняемый с использованием ядра AIO? (и все остальные обычные read()/write() и буферизованные fread()/fwrite() считаются синхронными)


person itisravi    schedule 10.01.2012    source источник


Ответы (1)


Синхронные запросы — это те, которые процесс блокируется до их завершения, асинхронные запросы — это те, которые процесс может продолжать параллельно до их завершения.

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

С этого момента все усложняется: системный вызов fsync() является синхронным запросом, и то же самое верно для некоторых вызовов изменения метаданных в журналируемых файловых системах, но не в нежурналируемых и так далее...

person gby    schedule 10.01.2012
comment
Это может показаться странным, но предположим, что некоторые данные из обычного запроса процесса на запись поступили в асинхронную очередь. Теперь fsync() вызывается позже. из асинхронной очереди также перешли в очередь синхронизации? - person itisravi; 10.01.2012
comment
Я не уверен, но я предполагаю первое. - person gby; 10.01.2012