Борьба за производительность
В продолжение истории борьбы за производительность.
Допустим, у нас есть что-то, что обладает каким-то неприличным количеством ядер, например 16.
И нам надо разбалансировать эти ядра между разными «типами» нагрузки. Причём мы точно знаем, сколько ядер нам надо для одного типа, и точно не знаем, сколько нужно для всего остального.
Тут на помощь приходят четыре параметра ядра — isolcpus, nohz_full, rcu_nocbs и irqaffinity.
В рамках решаемого кейса сразу указал на них, что сократило поиск необходимых решений.
По сути, все четыре параметра решают одну задачу — ограничить использование указанных ядер (например, 0–3) процессами, за исключением базовых — init, scsi и прочих.
taskset указать вручную на ядра 0–3 те процессы, что нам нужны.В данной картине мы защищаем этот сегмент от службы irqbalance, которая с завидным упорством будет ребалансировать процессы между ядрами.
Но будьте внимательны при изоляции, так как в случае количества процессоров > 1 нужно чуть иначе выставлять диапазоны, чтобы не угодить в яму NUMA. Там деление ядер от 0 до последнего происходит сегментами по очереди.
irqbalance, taskset и ещё несколько твиков — давал профит только при утилизации сетевой карты лишь до 70 %, дальше спецэффекты постепенно возвращались.







Комментарии