나는 read
함수를 사용하여 C로 큰 파일을 읽어야합니다. 우리가 성능 측면에서 유지하는 버퍼 크기가 어떤 차이가 있는지 궁금합니다. 파일 크기는 수십 GB에이를 수 있습니다.C에서 파일을 읽기위한 최적의 버퍼 크기
답변
첫째로, 디스크의 논리적/물리적 섹터 크기의 배수입니다. hdparm을 사용하여 확인할 수 있습니다. 이것은 동일합니다
힌트 : libc의 fopen(3)
, fread(3)
, fwrite(3)
등의 기능은 이미 좋은 버퍼링을 수행합니다.
또 다른 힌트 : 전체 파일을 스트리밍 할 필요는 없지만 파일의 일부에 무작위로 액세스하려면 mmap()
시도해보십시오.
OS는 다르게 지시되지 않는다면'open | read | write' (page cache + readahead)와 함께 버퍼링을 많이합니다 ('O_DIRECT' /'O_SYNC') – SaveTheRbtz
짧은 버전.
다릅니다. x86 버퍼 크기가 4096 바이트 인 것이 좋습니다 (하나의 page size 및 Advanced Format 블록 크기).
긴 버전.
UNIX에서는 버전, 컴파일 옵션뿐만 아니라 런타임 튜너 블 (예 : 미리 읽기 설정)에서도 커널, libc, 파일 시스템, 하드웨어 등에 따라 다릅니다.
DIY.
테스트 해보기! 하나의 특정 시스템에 가장 적합한 읽기 - 쓰기 버퍼 크기를 결정하는 간단한 방법은 Advanced Programing in UNIX Environment 3.9 "I/O 효율성"을 참조하십시오.
- 1. 최적의 파일 버퍼 읽기 크기?
- 2. C# FileStream : 대용량 파일을 쓰기위한 최적의 버퍼 크기?
- 3. C Windows 버퍼 크기
- 4. 최적의 Jtable 크기 자바
- 5. 버퍼 크기
- 6. 데이터베이스 파티션을위한 최적의 크기
- 7. C에서 StreamReader 및 버퍼 #
- 8. rtmp 버퍼 크기 이해
- 9. C에서 플러시 버퍼
- 10. C에서 다중 버퍼 관리
- 11. C에서 버퍼 길이 및 버퍼 오버플로 보내기
- 12. 파일 I/O의 버퍼 크기 자동 선택
- 13. Objective-C에서 프로토콜 버퍼 사용
- 14. 텍스트 파일을 읽기위한 일괄 처리/vbs
- 15. 머리말과 꼬리말로 가변 길이 파일을 읽기위한 인터페이스
- 16. 최적의 데이터베이스 연결 풀 크기
- 17. 현대 시스템을위한 최적의 구조체 크기
- 18. 소켓 수신 버퍼 크기
- 19. QSqlQuery 버퍼 크기
- 20. WCF 서비스의 버퍼 크기
- 21. sprintf 버퍼 크기
- 22. UDT 서버 버퍼 크기?
- 23. LZO 감압 버퍼 크기
- 24. zlib 및 버퍼 크기
- 25. telnetlib read_until 버퍼 크기
- 26. 프레임 버퍼 크기
- 27. 파이프 버퍼 크기 설정
- 28. Google 프로토콜 버퍼 - 고정 크기 버퍼?
- 29. LAPACK의 dgels에 대한 최적의 블록 크기 쿼리
- 30. C에서 버퍼 (부호없는 char *) 연결
물론 버퍼 크기는 중요하지만 "최적"은 다릅니다. –
큰 이유는 이유 때문입니다. 그리고 2의 거듭 제곱 (또는 적어도 512의 배수) 인 버퍼 크기를 사용하면 약간의 이점이 있습니다. –
@HotLicks는 왜'512' –