Всем доброго времени суток.
Такая ситуация: есть старый сервер (4 CPU cores), подключенный к SCSI (DAS) дисковой полке. На дисках лежат логи apache/nginx. Периодически запускается grep по какой-то части этих логов (обычно по отдельному каталогу в 80-120GB). Самый оптимальный способ запуска grep, который я нашел:
В такой ситуации время поиска, по моим наблюдениям (пробовал на разных хостах), сильно зависит от CPU. Как раз пришло время заказывать новый сервер и я пытаюсь выбрать CPU (желательно, Intel), максимально производительный для этой задачи. Подскажите, пожалуйста, на какие характеристики следует в первую очередь обратить внимание: частота, кэш, может быть, частота памяти или что-то еще.
Заранее большое спасибо
P.S. Возможно, есть более оптимальный способ запуска grep. GNU parallel почему-то на моей задаче показывает худшие результаты, чем xargs -P 4
Спасибо за ответ. Мне кажется, новый правильно подобранный CPU позволит уложиться в необходимое время. А купить новую железку, как обычно, дешевле, чем что-то переписывать :)
А не zcat ли является тут cpu bound звеном? Во время поиска в ТОПе процессов по cpu из этих 4х первым висит именно grep?
Если именно grep, то присоединяюсь к варианту избавления от -i.
запускает 4 потока zcat и только один grep. А ядро у вас наверняка не одно можно использовать.
Сделайте это в несколько потоков таки :) Например банально так:
Если вот так распаковывать несколькими потоками в один пайп, то можно некоторые вхождения паттерна не найти. Дело в том, что распаковка происходит не построчно, а поблочно (как удобно декомпрессору). Поэтому декомпрессор может выдать начало паттерна в конце блока, затем другой процесс выдаст свой блок и первый процесс запишет хвост паттерна из второго блока. Таким образом паттерн будет разорван.