Очереди запросов планировщика ввода-вывода CFQ - PullRequest
1 голос
/ 10 января 2012

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

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

1 Ответ

1 голос
/ 10 января 2012

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

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

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

...