В Windows Server 2008 R2 следующая очень простая программа ведет себя по-разному на системном диске и на любом другом диске.Кажется, что на системном диске FILE_FLAG_WRITE_THROUGH что-то делает ...
На диске C: (системный диск, стандартный SATA, без RAID)
$ time ./test.exe
real 1m8.281s
user 0m0.000s
sys 0m0.015s
На диске E: (другой физический диск SATA)
$ time ./test.exe
real 0m5.445s
user 0m0.000s
sys 0m0.000s
-
#include <stdio.h>
#include <windows.h>
#define BUFFER_SIZE 1024
#define ITERATIONS 10240
#define FILEFLAGS FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH
BYTE buff[BUFFER_SIZE];
BOOL SyncWriteFile(HANDLE fd,
LPCVOID buf,
DWORD to_write) {
DWORD written = 0, already_written = 0;
BOOL res = FALSE;
while(written < to_write) {
res = WriteFile(fd,
(BYTE*)buf + written,
to_write - written,
&already_written,
NULL);
if (FALSE == res)
return FALSE;
else
written += already_written;
}
return TRUE;
}
void main()
{
HANDLE hFile;
int i;
hFile = CreateFile(TEXT("test"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_NEW,
FILEFLAGS,
NULL);
if (hFile == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Could not create test file.");
exit(1);
}
for(i=0; i<ITERATIONS; i++) {
SyncWriteFile(hFile, buff, sizeof(buff));
}
CloseHandle(hFile);
}
- Что происходит?
- Может кто-нибудь попытаться воспроизвести это на Win Server?