Очистіть кеш файлу, щоб повторити тестування продуктивності


106

Які інструменти чи методи я можу використовувати, щоб видалити вміст файлу, кешований, щоб запобігти перекосу моїх результатів? Я вважаю, що мені потрібно або повністю очистити, або вибірково видалити кешовану інформацію про вміст файлів і каталогів.

Додаток, який я розробляю, - це спеціалізована утиліта для стиснення, і, як очікується, виконає багато роботи з читання та запису файлів, яких операційна система не торкнулася останнім часом, і чиї дискові блоки навряд чи будуть кешовані.

Я хочу видалити мінливість, яку я бачу в IO час, коли я повторюю завдання з профілювання різних стратегій виконання роботи з обробкою файлів.

Мене насамперед цікавлять рішення для Windows XP, оскільки це моя основна машина для розробки, але я також можу перевірити, використовуючи Linux, і тому мене цікавлять відповіді і для цього середовища.

Я спробував SysInternals CacheSet , але натискання кнопки «Очистити» не призводить до помітного збільшення (відновлення часу після холодного завантаження), щоб перечитати файли, які я прочитав лише кілька разів.



1
Чому це питання було видалено ?
Дан Даскалеску

Відповіді:


82

Використовуйте додаток RAMMap SysInternal .

нарізати порожній режим очікування

Параметр меню "Порожній / порожній режим очікування" очистить кеш файлу Windows.


2
RAMMap не працює на Windows XP. Чи ці параметри меню чимось відрізняються від кнопки "Очистити" в додатку кеш-пам'яті SysInternals?
Стівен Денн

@stephen ця техніка відмінно працювала для мене під Windows 8! Windows XP зараз 12 років, з якої причини ви не можете спробувати це на Vista, Windows 7 або Windows 8?
Джефф Етвуд

@Jeff Я більше не працюю з цими обмеженнями. Отже, "Порожній список очікування" призводить до наступного читання з нещодавно прочитаного файлу, який вимагає дискового вводу?
Стівен Денне

2
Натисніть F5, щоб оновити список файлів після натискання порожнього списку очікування
JoshG

3
Для програмного підходу см цей пост SO: stackoverflow.com/a/23085045/430360
snemarch

16

У Windows XP ви маєте змогу очистити кеш певного файлу, відкривши файл за допомогою CreateFile за допомогою параметрів FILE_FLAG_NO_BUFFERING, а потім закривши ручку. Це не задокументовано, і я не знаю, чи працює він на пізніших версіях Windows, але це я давно використовував при написанні тестового коду для порівняння бібліотек стиснення файлів. Я не пам'ятаю, чи впливав на цей трюк доступ читання чи запису.


Мені ідеально підходить під Windows 7 SP1, x64. Чудова порада!
cxxl

2
Отже, що потрібно повторити для кожного файлу ? Отже, якщо, наприклад, ви копіюєте каталог, що містить 100 Мб, розповсюджений на 30 файлів у 10 підкаталогах, ви повинні відкрити кожен і кожен окремо, щоб переконатися, що ви читаєте власне диск замість кешу?
Synetech

Інші відповіді на сайті стверджують, що це працює і в Win7, і в 8. Я припускаю, що це працює на Vista. І так, ви повинні запустити його на кожному файлі, але це не займе все так довго. Все, що вам потрібно зробити, це відкрити та закрити кожен файл, а коли ви закриєте, Windows очищає кеш. Після цього ви запустили тест на працездатність.
Mooing Duck

1
Це була ідеальна відповідь. Простий в коді, ефективний і повинен працювати на більшості ОС Windows (включаючи XP, я протестував лише на Win7x64). Я відкрив файли з правами читання і без спільного доступу. Не впевнений, що має значення комбо.
Роско

Аналогічна функціональність у Linux (2.4.10 далі) із прапором O_DIRECT у відкритому (2) системному виклику. Ну, точніше, з того, що я розумію, O_DIRECT не очищає кеш цього файлу, він намагається найкраще його обійти.
kaiwan

14

Швидкий гугл дає ці параметри для Linux

  1. Демонтуйте та змонтуйте розділ, що містить файли
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
Дякую, це виглядає дуже корисно, хоча я, можливо, хотів би повторити 3 замість 1. Мене насамперед цікавить Windows XP, саме тому я не знайшов цього в своєму гуглінгу.
Стівен Денне

На жаль, середовище Linux, яке я міг би використати, має версію ядра 2.6.9. drop_caches додано в ядрі 2.6.16
Стівен Денне

Багато інших прочитаних вами публікацій свідчать про те, що ви можете відключити та змонтувати файлову систему, щоб видалити всі зв'язані з нею елементи, я вважаю, що це було раніше 2.6.16, як і в останніх ядрах.
TafT

12

Утиліта командного рядка наведено тут

з джерела:

EmptyStandbyList.exe це інструмент командного рядка для Windows (Vista та новіші версії), який може спорожнити:

  • технологічні робочі набори,
  • змінений список сторінок,
  • списки очікування (пріоритети від 0 до 7), або
  • лише пріоритетний список 0 в режимі очікування

Використання:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
Високо занижена відповідь серед усіх шумів, проста утиліта, яка робить одну роботу і робить її добре. Ви, ймовірно, повинні включити більше деталей у відповідь, щоб отримати заслуговуючі результати.
Прометей


3

Я знайшов одну техніку (крім перезавантаження), яка, здається, працює:

  1. Виконайте кілька копій MemAlloc
  2. Кожному з них виділяйте по кілька разів великі шматки пам’яті
  3. Використовуйте Провідник процесів, щоб спостерігати за зменшенням розміру кешу системи до дуже низьких рівнів
  4. Закрийте програми MemAlloc

Однак це не вибірково. В ідеалі я хотів би мати можливість очистити конкретні частини пам'яті, які використовуються для кешування блоків дисків файлів, які я більше не хочу кешувати.


Це має побічний ефект від натискання матеріалів на файл сторінки, що знищить продуктивність на довгий час. Якщо ви збираєтеся вдатися до хитрості, то ви можете просто прочитати якийсь інший великий файл; принаймні, це тільки очищає кеш диска і більше нічого.
Synetech

3

Для набагато кращого перегляду кешу файлової системи Windows XP - спробуйте ATM від Тіма Мергента - він дозволяє переглядати як кеш файлової системи робочий набір, так і розмір списку очікування у більш детальному та точному поданні. Для Windows XP - вам потрібна стара версія 1 банкомату, яка доступна для завантаження тут, оскільки для V2 та V3 потрібні Server 2003, Vista або новіші версії .

Ви помітите, що хоча Cacheset Sysinternals зменшить "Cache WS Min" - фактичні дані все ще продовжують існувати у вигляді списків очікування, звідки їх можна використовувати, поки не буде замінено чимось іншим. Щоб потім замінити його чимось іншим, скористайтеся таким інструментом, як MemAlloc або flushmem Чада Остіна або Consume.exe, з Інструментів набору ресурсів Windows Server 2003 .


0

Оскільки питання також попросив Linux, є споріднений відповідь тут .

Інструмент командного рядка vmtouch дозволяє, крім іншого, додавати та видаляти файли та каталоги з кешу системних файлів.


0

Існує виклик API API https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize, який можна використовувати для очищення кешу файлової системи. Він також може бути використаний для обмеження розміру кешу до дуже малого значення. Виглядає ідеально для таких видів тестів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.