У меня есть коробка с сервером Ubuntu 16.04. Он имеет внутренний жесткий диск SATA с ОС на нем и подключенный жесткий диск USB 3, который я использую для хранения больших / долгосрочных файлов. Часто это означает копирование большого файла или папки с внутреннего накопителя на USB-накопитель. Однако всякий раз, когда я делаю это, остальная часть системы становится невероятно медленной, если не почти полностью замороженной, пока не завершится передача файла.
Я провел несколько тестов, чтобы убедиться, что это не из-за программных издержек или типа файла. Я пробовал как большие смежные файлы, так и большие папки с множеством маленьких файлов, и я попытался использовать cp, pv с pipe, tar с pipe и rsync. Во всех случаях остальная часть системы блокируется.
Я также попытался выполнить каждую из этих команд с ionice -c 3 nice -n 20 перед ними, что дало процессу самый низкий приоритет для процессора и ввода-вывода. htop показывает, что процесс имеет приятное значение 19. Не знаю, является ли это фактическим минимумом или он не настроен правильно, но, тем не менее, большинство других процессов, включая веб-службы, в любом случае имеют более низкие значения nice, чем 19.
На коробке запущено несколько динамических веб-страниц, пара с php и пара с python. Те становятся в основном непригодными на время передачи файла. Я предполагаю, что замедление вызвано перегрузкой USB, поскольку, насколько я понимаю, все передачи USB должны проходить через ЦП. Это то, что на самом деле вызывает замедление? И, что более важно, есть ли для меня способ смягчить это?
РЕДАКТИРОВАТЬ (отвечая на комментарии):
Внутренние и внешние диски используют родной ext4, поэтому FUSE нет. Ничто не должно индексировать файлы, о которых я знаю, кроме того, что Ubuntu может делать по умолчанию (это безголовый Ubuntu Server). С точки зрения htop
кажется, что процессор не загружен, но отчеты об использовании безотказной работы подскочили с 0.5 до 6.0-8.0. Ограничение скорости pv
с использованием -L
, кажется, помогает, так что это решение для одного инструмента. Я обычно использую pv
только при копировании отдельных файлов. Есть ли способ ограничить скорость других программ? Я также предпочел бы изменить приоритеты, а не ограничивать их. Оптимизация на основе загрузки системы.
Это чистая установка сервера Ubuntu. На нем установлен xorg, но я не думаю, что с ним установлен даже оконный менеджер, я просто хотел пересылку X11 через ssh.
Кроме того, хотя ограничители скорости на pv, rsync и т.д. Хорошо работают для сохранения системы, я также хотел бы максимизировать скорость передачи. Есть ли какой-нибудь способ, кроме nice/ionice, который, кажется, мало что делает, чтобы заставить систему выполнить передачу как можно быстрее, но при этом дать что-то еще в системе более высокий приоритет, если она этого хочет? Так, например, если у меня есть переход на USB, который займет час, то через полчаса кто-то начнет использовать один из сайтов Python, он будет передавать как можно быстрее в течение первых получаса, но затем система начнет ограничивать его, когда пользователь начнет делать запросы к сайту python. (Я начинаю думать, что этот вопрос должен был быть опубликован вместо Server Fault, и я прошу прощения за это.)