Уменьшить блокировку io диска, используя много устройств?

Это не - контекст , а \ s * в начале вашего шаблона регулярного выражения. Кажется, что ag не выполняет построчный поиск, как обычный grep , а просматривает весь файл за один раз (или, по крайней мере, несколько строк за раз время). Немного похоже на этот однострочник Perl:

perl -0777 -ne 'print "$&\n" while /^\s*(def|class)\s+[_A-Za-z]*/msg' ../prog.py

Итак, поскольку \ s соответствует любому пробелу, включая символы новой строки, он соответствует предыдущей пустой строке, новой строке, пробелам перед следующей, а затем ключевое слово def . Если вы добавите пустую строку перед строкой blah , она не будет напечатана, поскольку blah не соответствует шаблону.

Чтобы избавиться от нежелательного совпадения, используйте / ^ * ... или / ^ [\ t] * ... вместо / ^ \ s * ... . (пробел + звездочка в первом)

3
30.11.2016, 15:26
2 ответа

Я думаю, проблема в том, что большинство файловых систем плохо поддерживает такое количество файлов.

Поэтому старайтесь не хранить так много файлов в одном каталоге, а разбивать их на подкаталоги.

Когда вы выполняете медленную операцию, вы можете nice / renice chmod , чтобы это не мешало работе веб-сервера. Но, как я писал в первом абзаце, это проблема многих файлов, поэтому чрезмерная блокировка и время в режиме ядра, что приятно, на самом деле не решает.

Наличие других устройств могло бы помочь, но ИМХО это не столько реальный ввод-вывод, сколько работа ядра из-за огромного каталога.

[Примечание: перемещение очень больших файлов не вызывает такого замедления, поэтому это не только ввод-вывод]

0
27.01.2020, 21:30

Механические запоминающие устройства медленные, потому что они механические. (Другие немеханические устройства хранения также могут быть медленными, но по другим причинам и по-разному.) Каждая операция ввода-вывода на механическом диске занимает фиксированное время ( время поиска , порядка миллисекунд), чтобы определить местоположение на диске, плюс переменное время для передачи данных (обычно от 40 до 200 МБ / с, в зависимости от характеристик диска). При выполнении множества мелких операций время поиска преобладает; один вращающийся диск ограничен несколькими сотнями операций ввода-вывода в секунду (IOPS) - дорогой диск SAS со скоростью 15 тыс. об / мин будет хорош примерно для 200 операций ввода-вывода в секунду, обычный диск SATA со скоростью 7,2 тыс. об / мин - для 100 операций, а маленький и дешевый - 5,4 kRPM около 70.

Использование нескольких дисков может помочь - при условии, что операции ввода-вывода распределены между доступными дисками . Распределение операций ввода-вывода между доступными дисками может выполняться автоматически с помощью подходящей конфигурации программного или аппаратного обеспечения. Использование выделенного оборудования, такого как массивы хранения, подключенные через сеть хранения данных , предпочтительно в корпоративных приложениях; для частного использования обычным подходом является использование программного обеспечения RAID ; хорошей отправной точкой является вики Linux RAID . RAID может увеличить пропускную способность, надежность или и то, и другое; если целью является увеличение пропускной способности, вам следует рассмотреть уровни RAID с чередованием, такие как RAID 0 и RAID 10.

1
27.01.2020, 21:30

Теги

Похожие вопросы