성능 결과가 왜곡되는 것을 방지하기 위해 캐시 된 파일 내용을 제거하는 데 사용할 수있는 도구 또는 기술은 무엇입니까? 파일 및 디렉터리 내용에 대한 캐시 된 정보를 완전히 지우거나 선택적으로 제거해야한다고 생각합니다.
내가 개발중인 애플리케이션은 전문 압축 유틸리티이며, 최근 운영 체제가 다루지 않았고 디스크 블록이 캐시 될 가능성이 적은 파일을 읽고 쓰는 많은 작업을 수행 할 것으로 예상됩니다.
파일 처리 작업을 수행하기 위해 다른 전략을 프로파일 링하는 작업을 반복 할 때 IO 시간에서 볼 수있는 가변성을 제거하고 싶습니다.
저는 주로 Windows XP 용 솔루션에 관심이 있습니다. 이것이 저의 주요 개발 시스템이기 때문입니다.하지만 Linux를 사용하여 테스트 할 수도 있으므로 해당 환경에 대한 답변에도 관심이 있습니다.
SysInternals CacheSet을 시도 했지만 “Clear”를 클릭해도 몇 번 읽은 파일을 다시 읽는 시간이 눈에 띄게 증가하지 않습니다 (콜드 부팅 후 타이밍으로 복원).
답변
답변
Windows XP의 경우 FILE_FLAG_NO_BUFFERING 옵션과 함께 CreateFile을 사용하여 파일을 연 다음 핸들을 닫으면 특정 파일의 캐시를 지울 수 있습니다. 이것은 문서화되지 않았고 이후 버전의 Windows에서 작동하는지 모르겠지만 오래 전에 파일 압축 라이브러리를 비교하기 위해 테스트 코드를 작성할 때 이것을 사용했습니다. 읽기 또는 쓰기 액세스가이 트릭에 영향을 미쳤는지 기억 나지 않습니다.
답변
빠른 인터넷 검색은 Linux에 이러한 옵션을 제공합니다.
- 파일이있는 파티션을 마운트 해제하고 마운트합니다.
sync && echo 1 > /proc/sys/vm/drop_caches
답변
출처 :
EmptyStandbyList.exe
비울 수있는 Windows (Vista 이상) 용 명령 줄 도구입니다.
- 프로세스 작업 세트,
- 수정 된 페이지 목록,
- 대기 목록 (우선 순위 0 ~ 7) 또는
- 우선 순위 0 대기 목록 만.
용법:
EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
답변
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
with advice 옵션 POSIX_FADV_DONTNEED
:
지정된 데이터는 가까운 장래에 접근하지 않을 것입니다.
답변
작동하는 것 같은 기술 (재부팅 제외)을 발견했습니다.
- MemAlloc 사본 몇 개 실행
- 각각에 대해 큰 메모리 청크를 몇 번 할당하십시오.
- Process Explorer를 사용하여 시스템 캐시 크기가 매우 낮은 수준으로 줄어드는 것을 관찰하십시오.
- MemAlloc 프로그램 종료
하지만 선택적이지는 않습니다. 이상적으로는 더 이상 캐시하지 않으려는 파일의 디스크 블록을 캐시하는 데 사용되는 메모리의 특정 부분을 지울 수 있기를 원합니다.
답변
Windows XP 파일 시스템 캐시를 훨씬 더 잘 보려면 Tim Murgent의 ATM을 사용해보십시오 . 파일 시스템 캐시 작업 세트 크기와 대기 목록 크기를보다 상세하고 정확하게 볼 수 있습니다. Windows XP의 경우 -V2 및 V3 이후 여기 에서 다운로드 할 수있는 ATM의 이전 버전 1이 필요합니다. 서버 2003, 비스타, 이상이 필요합니다.
Sysinternals Cacheset 이 “Cache WS Min”을 줄 임에도 불구 하고 실제 데이터는 다른 것으로 교체 될 때까지 사용할 수있는 대기 목록의 형태로 계속 존재합니다. 그런 다음 그 밖에 같은 도구를 사용 무언가로 대체하려면 MemAlloc 또는 차드 오스틴 flushmem 로부터 또는 Consume.exe 윈도우 서버 2003 리소스 키트 도구 .