[performance] 성능 테스트를 반복하려면 파일 캐시 지우기

성능 결과가 왜곡되는 것을 방지하기 위해 캐시 된 파일 내용을 제거하는 데 사용할 수있는 도구 또는 기술은 무엇입니까? 파일 및 디렉터리 내용에 대한 캐시 된 정보를 완전히 지우거나 선택적으로 제거해야한다고 생각합니다.

내가 개발중인 애플리케이션은 전문 압축 유틸리티이며, 최근 운영 체제가 다루지 않았고 디스크 블록이 캐시 될 가능성이 적은 파일을 읽고 쓰는 많은 작업을 수행 할 것으로 예상됩니다.

파일 처리 작업을 수행하기 위해 다른 전략을 프로파일 링하는 작업을 반복 할 때 IO 시간에서 볼 수있는 가변성을 제거하고 싶습니다.

저는 주로 Windows XP 용 솔루션에 관심이 있습니다. 이것이 저의 주요 개발 시스템이기 때문입니다.하지만 Linux를 사용하여 테스트 할 수도 있으므로 해당 환경에 대한 답변에도 관심이 있습니다.

SysInternals CacheSet을 시도 했지만 “Clear”를 클릭해도 몇 번 읽은 파일을 다시 읽는 시간이 눈에 띄게 증가하지 않습니다 (콜드 부팅 후 타이밍으로 복원).



답변

SysInternal의 RAMMap 앱을 사용 합니다 .

rammap 빈 대기

Empty / Empty Standby List 메뉴 옵션은 Windows 파일 캐시를 지 웁니다.


답변

Windows XP의 경우 FILE_FLAG_NO_BUFFERING 옵션과 함께 CreateFile을 사용하여 파일을 연 다음 핸들을 닫으면 특정 파일의 캐시를 지울 수 있습니다. 이것은 문서화되지 않았고 이후 버전의 Windows에서 작동하는지 모르겠지만 오래 전에 파일 압축 라이브러리를 비교하기 위해 테스트 코드를 작성할 때 이것을 사용했습니다. 읽기 또는 쓰기 액세스가이 트릭에 영향을 미쳤는지 기억 나지 않습니다.


답변

빠른 인터넷 검색은 Linux에 이러한 옵션을 제공합니다.

  1. 파일이있는 파티션을 마운트 해제하고 마운트합니다.
  2. 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:
지정된 데이터는 가까운 장래에 접근하지 않을 것입니다.


답변

작동하는 것 같은 기술 (재부팅 제외)을 발견했습니다.

  1. MemAlloc 사본 몇 개 실행
  2. 각각에 대해 큰 메모리 청크를 몇 번 할당하십시오.
  3. Process Explorer를 사용하여 시스템 캐시 크기가 매우 낮은 수준으로 줄어드는 것을 관찰하십시오.
  4. MemAlloc 프로그램 종료

하지만 선택적이지는 않습니다. 이상적으로는 더 이상 캐시하지 않으려는 파일의 디스크 블록을 캐시하는 데 사용되는 메모리의 특정 부분을 지울 수 있기를 원합니다.


답변

Windows XP 파일 시스템 캐시를 훨씬 더 잘 보려면 Tim Murgent의 ATM을 사용해보십시오 . 파일 시스템 캐시 작업 세트 크기와 대기 목록 크기를보다 상세하고 정확하게 볼 수 있습니다. Windows XP의 경우 -V2V3 이후 여기 에서 다운로드 할 수있는 ATM의 이전 버전 1이 필요합니다. 서버 2003, 비스타, 이상이 필요합니다.

Sysinternals Cacheset 이 “Cache WS Min”을 줄 임에도 불구 하고 실제 데이터는 다른 것으로 교체 될 때까지 사용할 수있는 대기 목록의 형태로 계속 존재합니다. 그런 다음 그 밖에 같은 도구를 사용 무언가로 대체하려면 MemAlloc 또는 차드 오스틴 flushmem 로부터 또는 Consume.exe 윈도우 서버 2003 리소스 키트 도구 .