C++에서 간단한 포인터 연산을 사용하여 매우 큰 파일에서 mmap 호출을 사용하여 읽습니다. 문제는 내가 KB 단위로 작은 덩어리의 데이터를 여러 번 읽었을 때 각각의 읽기가 이전과 동일한 시간이 걸린다는 것입니다. 요청을 수행하기 위해 디스크에 액세스 중인지 또는 요청이 첫 번째 이후의 호출에서 주 메모리 (페이지 캐시)에서 충족되는지 여부를 어떻게 알 수 있습니까?mmap에서 캐싱
2
A
답변
3
문제는 다음과 같습니다. 캐시에서 두 가지 읽기가 수행되었습니다. 캐싱은 데이터를 요청하기 전에 파일을 열거 나 mmapped했을 때 시작됩니다. 이를 확인하려면 I 발행 :
나는 동일한 데이터를 가져 오기위한 두 개의 반복을 실행하면, 다음, 캐시를 플러시echo 3 > /proc/sys/vm/drop_caches
, 첫 번째 실행은 (내 경우) 두 번째보다 10 배 느린 .
0
locality of reference을 악용하면 최상의 캐시 성능을 얻을 수 있습니다. 즉, 변수를 통해 가까이있는 변수에 접근하여 (예 : 변수를 통해 순서가 늘어나는 순서로 스테핑) 이러한 접근을 시간 내에 수행하면 (즉, 이러한 요소를 읽는 동안 다른 많은 메모리 액세스를 수행하지 않는 경우) 당신은 최고의 캐시 성능을 얻을 것이다. 각 읽기가 대략 동일한 시간이 걸리면 캐시 될 가능성이 높습니다. 캐시에서 서비스가 제공되지 않는 경우 일반적으로 몇 가지 빠른 읽기 (캐시 적중)와 그 다음에 스파이크 (캐시 실패), 더 빠른 읽기가 표시됩니다. 거의 모든 시스템에서 캐시 미스가 있으면 데이터가있는 청크가 캐시로로드되므로 근처의 변수 (동일한 청크에 있음)에 액세스하면 해당 데이터가 캐시에 저장됩니다.
관련 문제
- 1. mmap에서 연속 메모리를 사용합니까? (솔라리스에서)
- 2. 캐싱
- 3. 캐싱?
- 4. 캐싱
- 5. 캐싱
- 6. 캐싱
- 7. 브라우저 캐싱 또는 디스크 캐싱?
- 8. Symfony 캐싱 질문 (부분 캐싱)
- 9. 시스템 캐싱 대 캐싱 없음
- 10. 캐싱 중에 캐싱 및 대기 중입니까?
- 11. 압축, 브라우저 캐싱, 프록시 캐싱 등을위한 .htaccess
- 12. 캐싱 대리인
- 13. 인터넷 캐싱
- 14. ASP.Net 캐싱
- 15. Google지도 캐싱
- 16. 캐싱 문제
- 17. 캐싱 문제
- 18. MySQL 캐싱
- 19. ASP.Net 캐싱
- 20. Webservices 캐싱
- 21. ASP.net에서 캐싱
- 22. 멋진보기 캐싱
- 23. Umbraco 캐싱
- 24. Asp.net에서 캐싱
- 25. ActiveResource 캐싱
- 26. 캐싱 이론
- 27. Zend_Navigation 캐싱
- 28. 레일스 캐싱
- 29. 브라우저 캐싱
- 30. 캐싱 부분보기는
왜 중요한가요? –
속도! 이후의 호출이 디스크 액세스가 아닌 캐시에서 수행되기를 기대할 때 첫 번째 호출보다 빠른 호출이 아닌 이유를 알고 싶습니다. – myahya
mmap 호출에 걸린 시간도 프로파일 했습니까? mmap을 호출 할 때 이미 첫 페이지를 캐시했을 수도 있습니다. 디스크에 저장하는 것은 매우 비쌉니다. 매우 이상한 액세스 패턴이있는 경우 매 액세스마다 캐시 미스가 발생할 수도 있지만 (액세스 패턴이 순차적입니까?), 현대의 모든 주요 데스크톱 운영 체제가 캐시됩니다. –