Комментарии 47
Индикатор load при старте системы стал подниматься выше 11, а процессорная нагрузка стала состоять по большей части из wait.
Это говорит о том, что планировщик deadline работал оптимальнее. wait
в нагрузке процессора означает, что текущая выполняемая задача ожидает завершения I/O операций. И пока операция не завершится, другие задачи тоже вынуждены ждать, о чём и говорит рост очереди (параметр load
).
Как можно предположить, при использовании Deadline приоритет отдаётся задачам (процессам), не так активно использующим ввод-вывод, они быстрее отрабатывают, и очередь не растёт. Выходит, что при переключении на CFQ произошла деградация, и разумнее вернуться на Deadline.
Видимо, deadline неправильно выставлял приоритеты процессам, и потоки dropbox в результате съедали много, просто за счёт их количества.
Пришлось через ionice вручную сообщить системе, что все потоки dropbox должны иметь низкий приоритет. И всё полетело как
Хорошие примеры
http://0pointer.de/blog/projects/resources.html
В 14.04 используется upstart
, совместимый с SysV init
, SystemD
выпилен, есть systemd-shim
, но самого systemd
нету — демонами управлять он не может и поставить нормальный systemd
не представляется возможным.
Да и насколько я знаю, Dropbox запускается не системой, а DE, то есть запускается не какой-нибудь /etc/init.d/dropbox
, а Dropbox.desktop
, так что это обсуждение — бессмысленно.
Для начала попроще собираем пиды тредов dropbox:
$(ps -LC dropbox -o tid=)
Потом обращаем внимание, что ваше решение приводит к запуску 50 процессов каждые 5 секунд. Это условно ~5% загрузки процессора. Не жалко вам на это тратить ресурсы? ionice может за раз выставить io класс нескольким пидам:
ionice -c3 --pid $(ps -LC dropbox -o tid=)
Так сокращаем количество порождаемых каждые 5 секунд процессов с N тредов dropbox (у меня 51) +2 до 3
Но вообще постоянно висящий фоном скрипт с циклом тоже излишен. Достаточно заменить автозапуск dropbox на автозапуск
ionice -c3 dropbox
io класс процесса наследуется при порождении новых процессов/тредов (как и переменные окружения и практически все свойства процесса). Так что все треды, которые наклепает dropbox, тоже будут с классом idle.
ionice -c3 dropbox
Dropbox на пару с GoogleDrive на старте занимают лаптоп на добрых 10 минут.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\syncthing.exe] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\syncthing.exe\PerfOptions] "IoPriority"=dword:00000000 "PagePriority"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\syncthing.exe] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\syncthing.exe\PerfOptions] "IoPriority"=dword:00000000 "PagePriority"=dword:00000001
Это получается настройки берутся по названию exe-шки?
А как быть если разные файлы с одним названием? Какие-нибудь launcher.exe для различных софтов, или вообще java.exe. Просто любопытно.
...\Image File Execution Options\<filename>.exe\
можно создать значение "UseFilter"=dword:00000001
и произвольное количество подключей с произвольными именами, внутри подключей — значение "FilterFullPath"="C:\<полный путь к filename>.exe"
, тогда настройки будут браться из подключа с FilterFullPath
, совпавшим с полным путём (если такого не нашлось, то, как и раньше, из самого IFEO\<filename>.exe\
)."IoPriority"=dword:00000001
и для Vitaljok и MacIn
P.S. да и в целом MS рекомендует выставлять только CPUPriority, который также называется BasePriority ибо IO выставляется тоже, вот тут разъяснения https://bitsum.com//pl_io_priority.php, но ссылки на msdn не приведу.
На мой взгляд выносить хранилище таких вот штук на отдельный от системного физический носитель — лучшее из возможных решений. Если нет такой возможности — стартовать ручками по необходимости.
Летом 2015 года, после скачки и установки deb с сайта dropbox'а и после запуска: инсталлятор начал скачивать сам клиента dropbox, попутно выжрав во время! скачивания свободные 7/8гб оперативки, все 4гб свопа(больше 500мб не поднимался прежде) и устроив нагрузку процессора(4ядра) за 50 и не установившись в итоге.
Следующая версия dropbox'а встала без проблем на тот же ноут с HDD и ubuntu 14.04 x64.
Вот такое у меня было первое знакомство с ним, так и не прижился он у меня.
Насколько я понял суть:
Dropbox, at least under Linux, creates ~50 threads, some of which end up competing for disk I/O on Dropbox client startup (i.e. during user login), which in turn, makes system unresponsive for minutes right after logging in.
This behavior was confirmed at least under Ubuntu 14.04.
Some people work around this decreasing I/O priority for Dropbox.
Отсебятина:
But the real fix should be either eliminating need for such massive I/O on startup or adding options to decrease number of threads that do I/O simultaneously or decreasing their priority.
@Highstaker, напишите, пожалуйста внизу поста всем, что в Ubuntu 14.04 systemd выпилен с потрохами, место под него залито бетоном, обнесено ключей проволокой и по периметру стоят пулеметные вышки.
Юзерские стартап задачи запускаются, обычно, десктопным окружением через .desktop
файлы. Можно в ~/.local
создать свой Dropbox.desktop, с ionice
и запускать его. Пробовали?
Если сделать предположение, что демон синхронизации дропбокса нагружает дисковое io синхронно с cpu (ну там же скорее всего диффы/хэши считаются в этот момент), то более красивым может быть решение с планировщиком процессов (не io планировщики, которые вы пытались крутить).
Гуглить по SCHED_BATCH — процесс с таким правилом будет получать свои тики только когда все остальные отдыхают. Предположительно, это даст именно то, что хотите — дропбокс будет работать только когда вы, условно, «отошли от комьютера».
https://github.com/Nefelim4ag/Ananicy
В простейшей схеме, можно поместить запускаемый процесс в нужную группу запустив через cgexec.
HDD посвящается: усмиряем приложение, прожорливое на дисковое время