2012-01-10 3 views
1

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

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

ответ

1

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

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

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

+0

Это может показаться странным, но предположим, что некоторые данные из обычного запроса на запись процесса поступают в асинхронную очередь. Теперь fsync() вызывается в более поздней точке. В потоке flusher только помещаются все грязные страницы в синхронную очередь или данные из очереди async также перемещаются в очередь синхронизации? – itisravi

+0

Я не уверен, но я догадываюсь о первом. – gby

Смежные вопросы