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


106

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

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

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

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

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



1
이 질문이 삭제 된 이유는 무엇 입니까?
Dan Dascalescu

답변:


82

SysInternal의 RAMMap 앱을 사용 합니다 .

rammap 빈 대기

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


2
RAMMap은 Windows XP에서 실행되지 않습니다. 이러한 메뉴 옵션이 SysInternals Cacheset 애플리케이션의 "지우기"버튼과 다른 작업을 수행합니까?
Stephen Denne 2012 년

@stephen이 기술은 Windows 8에서 완벽하게 작동했습니다! Windows XP는 이제 12 년이되었습니다. Vista, Windows 7 또는 Windows 8에서이 기능을 사용할 수없는 이유가 있습니까?
Jeff Atwood 2011

@Jeff 나는 더 이상 그 한계로 일하지 않습니다. 따라서 "Empty Standby List"는 디스크 IO가 필요한 최근에 읽은 파일에서 다음 읽기를 수행합니까?
Stephen Denne 2011

2
비어있는 대기 목록을 클릭 한 후 F5 키를 눌러 파일 목록을 새로 고칩니다
JoshG 2013 년

3
프로그래밍 방식의 접근 방식은 다음 SO 게시물을 참조하십시오. stackoverflow.com/a/23085045/430360
snemarch

16

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


Windows 7 SP1, x64에서 완벽하게 작동합니다. 좋은 팁!
cxxl

2
모든 파일에 대해 반복해야 합니까? 예를 들어, 10 개의 하위 디렉토리에있는 30 개의 파일에 100MB가 포함 된 디렉토리를 복사하는 경우 캐시 대신 실제 디스크를 읽을 수 있도록 각각을 개별적으로 열어야합니까?
Synetech

사이트의 다른 답변은 이것이 Win7 및 8에서도 작동한다고 확인합니다. 나는 그것이 비스타에서 작동한다고 생각합니다. 그리고 예, 각 파일에서 실행해야하지만 그렇게 오래 걸리지는 않습니다. 각 파일을 열고 닫기 만하면됩니다. 닫으면 Windows에서 캐시를 지 웁니다. 이 작업을 완료 한 후 성능 테스트를 실행합니다.
Mooing Duck 2014 년

1
이것은 완벽한 대답이었습니다. 코딩이 간단하고 효과적이며 대부분의 Windows OS에서 작동합니다 (XP 포함, Win7x64에서만 테스트했습니다). 읽기 권한과 공유없이 파일을 열었습니다. 어떤 콤보가 중요한지 잘 모르겠습니다.
Rosco

open (2) syscall에 O_DIRECT 플래그가있는 Linux (2.4.10 이상)의 유사한 기능. 글쎄, 더 정확하게, 내가 이해하는 바에 따르면 O_DIRECT는 해당 파일의 캐시를 지우지 않으므로 우회하는 것이 가장 좋습니다.
kaiwan

14

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

  1. 파일이있는 파티션을 마운트 해제하고 마운트합니다.
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
감사합니다. 매우 유용 해 보이지만 1 대신에 3을 에코하고 싶을 것입니다. 저는 주로 Windows XP에 관심이 있습니다. 이것이 제가 인터넷 검색에서 찾지 못한 이유입니다.
Stephen Denne

불행히도 내가 이것을 사용할 수있는 리눅스 환경은 커널 버전 2.6.9를 가지고 있습니다. drop_caches는 커널 2.6.16에 추가되었습니다
Stephen Denne

내가 읽은 다른 많은 게시물에서는 파일 시스템을 마운트 해제하고 마운트하여 모든 chached 항목을 제거 할 수 있다고 제안합니다. 2.6.16 이전의 경우와 최신 커널의 경우라고 가정합니다.
TafT

12

명령 줄 유틸리티는 여기 에서 찾을 수 있습니다.

출처 :

EmptyStandbyList.exe 비울 수있는 Windows (Vista 이상) 용 명령 줄 도구입니다.

  • 프로세스 작업 세트,
  • 수정 된 페이지 목록,
  • 대기 목록 (우선 순위 0 ~ 7) 또는
  • 우선 순위 0 대기 목록 만.

용법:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
모든 소음 속에서 매우 과소 평가 된 대답, 하나의 작업을 잘 수행하는 간단한 유틸리티. 당신이받을 자격이있는 업 보트를 얻으려면 대답에 더 많은 세부 사항을 포함해야 할 것입니다.
Prometheus


3

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

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

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


그것은 페이지 파일에 물건을 밀어 넣는 부작용이있어 나중에 성능을 상당히 떨어 뜨립니다. kludge에 의지한다면 다른 큰 파일을 읽는 것이 좋습니다. 최소한 디스크 캐시 만 지우고 다른 것은 지 웁니다.
Synetech

3

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

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



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.