В продолжение истории борьбы за производительность.
🔤🔤🔤🔤🔤🔤🔤🔤
Допустим у нас есть что-то, что обладает каким-то неприличным количеством ядер, например 16.
ㅤ
И нам надо разбалансировать эти ядра между разными «типами» нагрузки.
Причем мы точно знаем, сколько ядер нам надо для одного типа и точно не знаем, сколько нужно для всего остального.
Тут на помощь приходят 4 параметра ядра -
isolcpus, nohz_full, rcu_nocbs и irqaffinity.В рамках решаемого кейса сразу указал на них, что сократило поиск необходимых решений.
По сути, все 4 параметра решают одну задачу - ограничить использование указанных ядер (например 0-3) процессами, за исключением базовых - init, scsi и прочих.
Таким образом мы можем через тот же
taskset указать вручную на ядра 0-3 те процессы, что нам нужны.В данной картине мы защищаем этот сегмент от службы
irqbalance, которая с завидным упорством будет ребалансировать процессы между ядрами.Но будьте внимательны при изоляции, так как в случае количества процессоров > 1 нужно чуть иначе выставлять диапазоны, чтобы не угодить в яму NUMA. Там деление ядер от 0 до последнего происходит сегментами по очереди.
Конкретно мой случай изоляции был применен в рамках разделения нагрузки на сетевые прерывания и nginx, но в совокупности факторов - параметры ядра, отключенный + маскированный
irqbalance, taskset и еще несколько твиков - давало профит только при утилизации сетевой карты лишь до 70%, дальше спецэффекты постепенно возвращались.🛠 #cpu #core #taskset #nice #perfomance
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog