LINUX.ORG.RU

Про скорость переключения между процессами

 , ,


0

1

Внезапно поломался Гугл. Советует банальные вещи наподобие выбора планировщика ввода-вывода, отключения лишних служб и апгрейда. А самую суть не рассказывает.

Почему может такое происходить, что когда какой-либо процесс в фоне начинает жрать ресурсы, то другим процессам в новых системных ресурсах сразу бывает резко отказано?

Насколько я понимаю, это должно быть связано с context switching и разными схемами приоритетов. В десктопной схеме ресурсы всё равно расшариваются даже в ущерб скорости запущенных до этого процессов, в серверной схеме подразумевается, что уже запущенные процессы приоритетнее новых и пусть они побыстрее завершатся, а уже потом можно и новым процессам ресурсы выделить.

Однако, где и какие настройки для этого существуют?

Сама система работает шустро, загружается тоже быстро:

# systemd-analyze
Startup finished in 3.153s (kernel) + 2.002s (initrd) + 9.396s (userspace) = 14.552s
#

7097.3 попугая в UnixBench'е.

Накладки возникают именно при запуске ресурсоёмких процессов. Во время их выполнения можно забыть о запуске новых процессов, да. В отдельных случаях уже запущенный софт перестаёт отвечать (видимо, чего-то ждёт). А как только ресурсоёмкие процессы завершаются систему сразу отпускает.

Как сказать системе, что у меня не сервер, а десктоп?

★★★★★

выбора планировщика

А чем ещё это настраивать если не планировщиком — планировщик же и отвечает за выделение времени процессу?!

MaxPower ★★ ()

Насколько я понимаю, это должно быть связано с context switching и разными схемами приоритетов

Предположу, что с этим в линуксе все нормально, а проблема связана с буферизацией доступа к накопителям - очень многое вплоть до shared libraries «замаплено» в память, т. е. находится не в образе процесса, а в кэше (том, который buff/cache в выводе free). При запуске ресурсоемкой программы она читает очень много данных, «смывая» кэш, при повторных обращениях к замапленному уже запущенных и вновь запускаемых программ оно заново перечитывается с накопителя. Если накопитель - это хард с его огромной задержкой произвольного доступа (seek time), и ресурсоемкая программа все еще запускается и осуществляет интенсивный ввод-вывод - получается убийственно медленно. С этим же связано фактическое зависание системы при «почти» полном исчерпании памяти - формально она еще есть и оом киллер еще не срабатывает, но для кэша ее уже не хватает, и все данные процессов, которые в норме постоянно находятся в кэше, перечитываются с диска при каждом обращении.

Знатоки, поправьте или опровергните.

shatsky ★★ ()

Нагуглил, что на то, о чём я говорю, скорее походят опции ядра CONFIG_PREEMPT и CONFIG_PREEMPT_VOLUNTARY. Однако, у меня есть сомнения, что это оно, поскольку на другой системе с

CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
скорость переключения между процессами, вроде как, была больше.

saahriktu ★★★★★ ()
Последнее исправление: saahriktu (всего исправлений: 1)

Мда. Второй раз наступаю на грабли тормозов десктопа из-за того, что я недонастроил сеть.

В прошлый раз софт тормозил из-за проблем с /etc/resolv.conf (даже mc запускался столько времени, что за него можно было состариться). В этот раз софт тормозил из-за того, что я забыл отредактировать /etc/hosts.

saahriktu ★★★★★ ()
Ответ на: комментарий от saahriktu

вся суть мамкиных оптимизаторов

anonymous ()

тоже замечал, что когда что-то конпеляеццо, переключение клавой на другую вкладку терминала происходит с большой задержкой. как победить? приоритеты?

teod0r ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.