2013-12-18 6 views
3

[혼란스러운 점 : 원래 게시물에는 제목에 "HDD"대신 "SSD"가 있지만 사고로 HDD에서 테스트를 수행 한 것으로 알았습니다. 잘못된 장착 지점에 접근하고있었습니다. SSD에서이 현상은 발생하지 않았습니다. HDD의 경우에도 여전히 흥미 롭습니다.]리눅스에서 HDD를 빨리 읽는 것 - 이상한 현상

일정한 크기의 파일에서 루프를 읽으려면 다음 코드를 사용합니다. 읽을 파일이 모두 있고 읽기가 성공했습니다.

파일 크기를 변경하면 fMBPerSecond에 영향을 미칩니다. 페이지 크기보다 작은 파일을 읽을 때 전체 페이지가 읽히기 때문입니다. 그러나 nNumberOfFilesfMBPerSecond에도 영향을 미칩니다. 이는 제가 이해할 수없는 것입니다. 분명히 효과가있는 것은 nNumberOfFiles 자체는 아니지만 nNumberOfFiles * nFileSize 제품입니다.

하지만 왜 효과가 있어야합니까? 파일은 루프에서 순차적으로 열거 나 읽거나 닫힙니다.

나는 nFileSize = 65536으로 테스트를했다. nNumberOfFiles = 10000 (또는 그 이하)를 선택할 때 fMBPerSecond = 500 MB/s 주위에 뭔가가 있습니다. nNumberOfFiles = 20000을 사용하면 성능이 크게 저하되는 fMBPerSecond = 100 MB/s 주위에 뭔가가 나타납니다.

아, 그리고 제가 실행하여 읽기 전에 디스크 캐시를 지우 언급한다 : 무대 뒤에서 여기서 무슨 일이 일어나고 있는지

sudo sync 
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' 

모든 아이디어를 환영 할 것이다.

페드 람은

void Read(int nFileSize, int nNumberOfFiles) 
{ 
    char szFilePath[4096]; 

    unsigned char *pBuffer = new unsigned char[nFileSize]; 

    Helpers::get_timer_value(true); 

    for (int i = 0; i < nNumberOfFiles; i++) 
    { 
     sprintf(szFilePath, "files/test_file_%.4i", i); 

     int f = open(szFilePath, O_RDONLY); 

     if (f) 
     { 
      if (read(f, pBuffer, (ssize_t) nFileSize) != (ssize_t) nFileSize) 
       printf("error: could not read file '%s'\n", szFilePath); 

      close(f); 
     } 
     else 
     { 
      printf("error: could not open file for reading '%s'\n", szFilePath); 
     } 
    } 

    const unsigned int t = Helpers::get_timer_value(); 

    const float fMiliseconds = float(t)/1000.0f; 
    const float fMilisecondsPerFile = fMiliseconds/float(nNumberOfFiles); 
    const float fBytesPerSecond = 1000.0f/fMilisecondsPerFile * float(nFileSize); 
    const float fMBPerSecond = fBytesPerSecond/1024.0f/1024.0f; 

    printf("t = %.8f ms/%.8i bytes - %.8f MB/s\n", fMilisecondsPerFile, 
     nFileSize, fMBPerSecond); 

    delete [] pBuffer; 
} 
+0

거기에 C++ 또는 어떤 언어로 표시 할만한 이유가 있습니까? – user1810087

+0

정말 프로그래밍 문제입니까? –

+3

이 질문은 하드웨어 성능에 관한 것이므로 프로그래밍과 관련이없는 것 같습니다. –

답변

1

은 (느린) 지속 NAND 세포 내부 DRAM 캐시를 결합하여 여러 SSD 모델, 특히 더 비싼 데이터 센터 모델이 있습니다. 읽는 데이터가 DRAM 캐시에 적합하면 더 빠른 응답을 얻을 수 있습니다.