Windows небуферизованный ввод / вывод и NCQ - PullRequest
2 голосов
/ 16 ноября 2010

При использовании небуферизованного ввода-вывода (CreateFile с FILE_FLAG_NO_BUFFER / FILE_FLAG_WRITE_THROUGH) и записи нескольких секторов при каждом вызове WriteFile, возможно ли, что сектора записываются в другом порядке, а затем в порядке?

int iSizeToAlloc = sector_size * 32;
char *pAlignedMemory = alloc(iSizeToAlloc)

// Here, write 32 sectors, is it possible that sector 2 is written before sector 1 ? 
::WriteFile(pAlignedMemory,iSizeToAlloc); 

Мне кажется, я где-то читал, что при указании FILE_FLAG_NO_BUFFER Windows указывает дисковой подсистеме отключить NCQ, но я не могу найти статью снова.

1 Ответ

2 голосов
/ 18 ноября 2010

Краткий ответ: «Да, это возможно».

Более длинный ответ: «даже не гарантируется, что последовательные« сектора »данных будут записаны в смежные секторы диска».

Может происходить всякое "системное" кэширование. Файловая система может быть даже зашифрована или сжата.

Вопрос в том, почему тебя это волнует? Какую проблему вы пытаетесь решить?

...