Як точно ввімкнути команди grep?


9

Я хочу порівняти швидкість цих двох команд:

grep pattern1 files* 
grep pattern2 files* 

На жаль, перший grep зчитує багато файлів * у буфери пам'яті, тому другий grep працює дуже швидко, але з неправильної причини.

Як сказати Linux (Fedora 11): "Будь ласка, припиніть кешування читання дисків, тому що я щось тестую."


Напевно, є розумніша відповідь ... але ви могли б дублювати структуру каталогу, тому ви не матимете справу з тим самим файлом і у вас не буде проблем з кешуванням!
nico

1
На додаток: Fedora 11 закінчився термін експлуатації в червні 2010 року. Пора оновитись. Майбутній випуск Fedora 15 виглядає дійсно приємно. Або якщо вам потрібно щось більш стабільне протягом більш тривалого життя (і це здається, що ви можете, оскільки ви все ще на 11), є RHEL6 або CentOS 6. будь-який день
mattdm

Щоб оновити з RH 7,3 до цього мені знадобилося назавжди! Модернізації ламають речі і мене лякають.
barrycarter

2
Вимкнувши кешування, ви орієнтуєтесь не на швидкість відповідності шаблонів, а на швидкість вашого диска. Як говорять інші - просто запустіть першу команду два рази: спочатку пройдіть кеш, другий - для порівняння.
alex

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

Відповіді:


11

Я не думаю, що ви можете легко сказати це "тимчасово припинити кешування". Але що ви можете зробити, це сказати системі скидати кеш перед кожним запуском:

Як корінь:

sync; echo 3 > /proc/sys/vm/drop_caches

(Це задокументовано в документах ядра за адресою Documentation / sysctl / vm.txt , що зручно, якщо, як і деякі з нас, ви не завжди можете згадати назовні, що роблять значення 1, 2 або 3.)

Або, по черзі, звичайно, розгорніть кеш і порівняйте кешовану ефективність. (Я думаю, що обидва корисні номери.)


1
echo 1випаде лише кеш сторінки, а не будь-який кеш диска.
jsbillings

@jsbillings - е, так. Виправлено.
mattdm

Неймовірно, незначне потроху: мені довелося робити ">>", а не ">"
barrycarter

@barrycarter: справді? так!
mattdm

3
@barrycarter: ви, мабуть, встановили -o noclobber у своїй оболонці, що робить його так, що він не дозволить вам використовувати> для перезапису наявного файлу.
jsbillings

1

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

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


IRL, я виконую цю команду лише зрідка, тому вміст файлів * ніколи не кешується. Я намагаюся оптимізувати греп для швидкого запуску в цій ситуації. Коли вміст файлів * вже є в кеші, він працює за секунду (немає сенсу в оптимізації цього, оскільки вихід призначений для кінцевого користувача)
barrycarter

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