2009-01-25 31 views
84

Tôi có thể sử dụng công cụ hoặc kỹ thuật nào để xóa nội dung tệp được lưu trong bộ nhớ cache để ngăn các kết quả hiệu suất của tôi bị lệch? Tôi tin rằng tôi cần phải xóa hoàn toàn hoặc xóa một cách có chọn lọc thông tin về nội dung tệp và thư mục. Ứng dụng mà tôi đang phát triển là một tiện ích nén chuyên dụng và dự kiến ​​sẽ thực hiện rất nhiều công việc đọc và ghi các tệp mà hệ điều hành chưa chạm vào gần đây và các khối đĩa của chúng không thể được lưu vào bộ nhớ cache.Xóa bộ nhớ cache tệp để lặp lại thử nghiệm hiệu suất

Tôi muốn loại bỏ sự thay đổi mà tôi thấy trong thời gian IO khi tôi lặp lại nhiệm vụ lược tả các chiến lược khác nhau để thực hiện công việc xử lý tệp.

Tôi chủ yếu quan tâm đến các giải pháp cho Windows XP, vì đó là máy phát triển chính của tôi, nhưng tôi cũng có thể kiểm tra bằng cách sử dụng Linux và cũng quan tâm đến các câu trả lời cho môi trường đó.

Tôi đã thử SysInternals CacheSet, nhưng việc nhấp vào "Xóa" không dẫn đến tăng có thể đo lường (khôi phục thời gian sau khi khởi động nguội) trong thời gian đọc lại các tệp mà tôi vừa đọc một vài lần.

+0

có thể trùng lặp của [Cách vô hiệu hóa bộ nhớ cache của hệ thống tệp?] (Http://stackoverflow.com/questions/7405868/how-to-invalidate-the-file-system-cache) – Mehrdad

+0

Tại sao câu hỏi này lại bị xóa ] (http://meta.stackexchange.com/questions/186129/please-undelete-this-moderator-deleted-question-on-so)? –

Trả lời

63

Sử dụng SysInternal's RAMMap app.

rammap empty standby

Các Rỗng Standby tùy chọn Rỗng/Danh sách menu sẽ xóa các tập tin bộ nhớ cache của Windows.

+2

RAMMap không chạy trên Windows XP. Các tùy chọn trình đơn này có khác gì so với nút "Xóa" trong ứng dụng SysInternals Cacheset không? –

+0

@stephen kỹ thuật này hoạt động hoàn hảo cho tôi trong Windows 8! Windows XP đã 12 tuổi rồi, bất kỳ lý do gì bạn không thể thử trên Vista, Windows 7 hoặc Windows 8? –

+0

@ Jeff Tôi không còn làm việc với những hạn chế đó nữa. Vì vậy, "Danh sách chờ rỗng" kết quả trong lần đọc tiếp theo từ một tập tin vừa đọc cần đĩa IO? –

13

Một googling nhanh chóng cung cấp cho tùy chọn theese cho Linux

  1. Ngắt kết nối bộ và gắn kết phân vùng lưu trữ các file
  2. sync && echo 1 > /proc/sys/vm/drop_caches
+2

Cảm ơn, trông rất hữu ích, mặc dù tôi có thể muốn echo 3 thay vì 1. Tôi chủ yếu quan tâm đến Windows XP, đó là lý do tại sao tôi đã không tìm thấy rằng trong googling của tôi. –

+0

Thật không may là môi trường Linux tôi có thể sử dụng điều này trong, có phiên bản hạt nhân 2.6.9. drop_caches đã được thêm vào kernel 2.6.16 –

+0

Rất nhiều bài viết khác mà tôi đã đọc gợi ý rằng bạn có thể tháo gắn và gắn hệ thống tập tin để loại bỏ tất cả các mục chached cho nó, tôi cho rằng đó là trường hợp trước 2.6.16 cũng như các hạt nhân gần đây. – TafT

3

Tôi đã tìm thấy một kỹ thuật (trừ khởi động lại) mà dường như công việc:

  1. Chạy một vài bản sao của MemAlloc
  2. Với mỗi người, phân bổ khối lượng lớn bộ nhớ một vài lần
  3. Sử dụng Process Explorer để quan sát kích thước hệ thống bộ nhớ cache giảm xuống mức rất thấp
  4. Thoát khỏi chương trình MemAlloc

Nó không phải là chọn lọc Tuy nhiên. Lý tưởng nhất là tôi muốn có thể xóa các phần cụ thể của bộ nhớ đang được sử dụng để lưu trữ các khối đĩa của các tệp mà tôi muốn không còn được lưu trong bộ nhớ cache nữa.

+0

Tôi cũng sử dụng MemAlloc - http://www.soft.tahionic.com/download-memalloc – Ampere

+0

Điều đó có tác dụng phụ khi đẩy nội dung vào tệp trang sẽ giết hiệu suất trong một thời gian sau đó. Nếu bạn đang đi đến khu nghỉ mát để một kludge, sau đó bạn cũng có thể chỉ cần đọc một số tập tin lớn khác; ít nhất là chỉ xóa bộ nhớ cache của đĩa và không có gì khác. – Synetech

13

Đối với Windows XP, bạn sẽ có thể xóa bộ nhớ cache cho một tệp cụ thể bằng cách mở tệp bằng cách sử dụng CreateFile với tùy chọn FILE_FLAG_NO_BUFFERING và sau đó đóng chốt. Đây không phải là tài liệu, và tôi không biết nếu nó hoạt động trên các phiên bản sau của Windows, nhưng tôi đã sử dụng từ lâu này khi viết mã kiểm tra để so sánh các thư viện nén tệp. Tôi không nhớ nếu truy cập đọc hoặc ghi ảnh hưởng đến thủ thuật này.

+0

Hoạt động hoàn hảo với tôi trong Windows 7 SP1, x64. Mẹo tuyệt vời! – cxxl

+2

Vì vậy, phải được lặp lại cho * mọi tệp *? Vì vậy, nếu ví dụ, bạn sao chép một thư mục chứa 100MB trải rộng trên 30 tệp trong 10 thư mục con, bạn phải mở từng thư mục riêng lẻ để đảm bảo bạn đọc đĩa thực tế thay vì bộ nhớ cache? – Synetech

+0

Các câu trả lời khác trên trang web cũng xác nhận rằng tác phẩm này cũng có trong Win7 và 8. Tôi đoán nó hoạt động trên vista. Và có, bạn phải chạy nó trên mỗi tập tin, nhưng nó không mất tất cả những gì dài. Tất cả những gì bạn cần làm là mở và đóng từng tệp và khi bạn đóng, Windows sẽ xóa bộ nhớ cache. Sau khi bạn đã làm điều này, THÌ bạn chạy thử nghiệm hiệu suất của bạn. –

3
#include <fcntl.h> 

int posix_fadvise(int fd, off_t offset, off_t len, int advice); 

với lời khuyên lựa chọn POSIX_FADV_DONTNEED:
Các dữ liệu chỉ định sẽ không được truy cập trong tương lai gần.

+0

Chỉ dành cho Linux và posix khác, không dành cho Windows: http://stackoverflow.com/questions/29752064/what-is-posix-fadviseposix-fadv-dontneed-equivalent-on-windows http://stackoverflow.com/questions/1201168/what-is-fadvise-madvise-equivalent-on-windows – osgx

3

Để có cái nhìn tốt hơn về bộ đệm hệ thống tệp Windows XP - hãy thử ATM by Tim Murgent - nó cho phép bạn xem cả bộ nhớ cache của tệp hệ thống Kích thước bộ làm việc và kích thước danh sách chờ ở chế độ xem chi tiết và chính xác hơn. Đối với Windows XP - bạn cần phiên bản cũ của máy ATM có sẵn để tải xuống here từ V2V3 yêu cầu Server 2003, Vista hoặc phiên bản cao hơn.

Bạn sẽ thấy rằng mặc dù Sysinternals Cacheset sẽ giảm "Cache WS Min" - dữ liệu thực vẫn tiếp tục tồn tại dưới dạng danh sách chờ từ nơi nó có thể được sử dụng cho đến khi nó được thay thế bằng một thứ khác. Để thay thế nó bằng một thứ khác, hãy sử dụng công cụ như MemAlloc hoặc flushmem by Chad Austin hoặc Consume.exe từ Windows Server 2003 Resource Kit Tools. tiện ích dòng

+0

Điều đó có vẻ tuyệt vời. –

0

Một lệnh có thể được tìm thấy here

0

Như câu hỏi cũng hỏi dành cho Linux, có một câu trả lời liên quan here.

Công cụ dòng lệnh vmtouch cho phép thêm và xóa tệp và thư mục khỏi bộ nhớ cache của tệp hệ thống, trong số những thứ khác.

Các vấn đề liên quan