带有WRITE_THROUGH的WriteFile()在系统磁盘上很慢

在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上重现这个吗?     
已邀请:
这是三星SATA 500GB磁盘(死亡?)与SD15固件的奇怪行为。我们最终使用dd实用程序和新磁盘修复了这个问题。现在一切正常。对不起“误报”。     

要回复问题请先登录注册