2012-11-17 4 views
11

나는 read 함수를 사용하여 C로 큰 파일을 읽어야합니다. 우리가 성능 측면에서 유지하는 버퍼 크기가 어떤 차이가 있는지 궁금합니다. 파일 크기는 수십 GB에이를 수 있습니다.C에서 파일을 읽기위한 최적의 버퍼 크기

+0

물론 버퍼 크기는 중요하지만 "최적"은 다릅니다. –

+0

큰 이유는 이유 때문입니다. 그리고 2의 거듭 제곱 (또는 적어도 512의 배수) 인 버퍼 크기를 사용하면 약간의 이점이 있습니다. –

+0

@HotLicks는 왜'512' –

답변

0

첫째로, 디스크의 논리적/물리적 섹터 크기의 배수입니다. hdparm을 사용하여 확인할 수 있습니다. 이것은 동일합니다

힌트 : libc의 fopen(3), fread(3), fwrite(3) 등의 기능은 이미 좋은 버퍼링을 수행합니다.

또 다른 힌트 : 전체 파일을 스트리밍 할 필요는 없지만 파일의 일부에 무작위로 액세스하려면 mmap() 시도해보십시오.

+0

OS는 다르게 지시되지 않는다면'open | read | write' (page cache + readahead)와 함께 버퍼링을 많이합니다 ('O_DIRECT' /'O_SYNC') – SaveTheRbtz

8

짧은 버전.
다릅니다. x86 버퍼 크기가 4096 바이트 인 것이 좋습니다 (하나의 page sizeAdvanced Format 블록 크기).

긴 버전.
UNIX에서는 버전, 컴파일 옵션뿐만 아니라 런타임 튜너 블 (예 : 미리 읽기 설정)에서도 커널, libc, 파일 시스템, 하드웨어 등에 따라 다릅니다.

DIY.
테스트 해보기! 하나의 특정 시스템에 가장 적합한 읽기 - 쓰기 버퍼 크기를 결정하는 간단한 방법은 Advanced Programing in UNIX Environment 3.9 "I/O 효율성"을 참조하십시오.