Добрый день. Есть у меня следующая проблема: Двухголовая сетевая от intel . С одной стороны мир, с другой пачка вланов на абонентов. Прерывания распределены вручную, включен rps , но со стороны абонентов, там где l2 трафик, rps не распределяет нагрузку на потоки сетевой, а почти всё вешается на один, именно первый поток rx-0 .
rx_queue_0_packets: 561311202
rx_queue_1_packets: 2348
rx_queue_2_packets: 3355
rx_queue_3_packets: 2714
rx_queue_4_packets: 3627
rx_queue_5_packets: 2531
rx_queue_6_packets: 2770
rx_queue_7_packets: 2198
rx_queue_8_packets: 2975
rx_queue_9_packets: 2896
Прошу хоть какие-то догадки, потому-что уже ума не приложу что именно происходит, почему так и как это исправить.
Решение оказалось до боли простым. Так как идёт перекос из-за rss очереди, в которую вливается всё pppoe, но понятно что необходимо использовать rps. Но так как при использовании rps на ffff для всей сетевой перкос на ядро всё так же проявлялся, было принято решение растянуть это всё на fffe, а первое ядро оставить для той самой несбаллансированой очереди rss. В итоге первое ядро немного не дотягивает до остальных, остальные 15 ядер приблизительно одинаково баллансятся по процессору. Как итог - ни одно ядро даже не даёт намёка на пергрузку, и трафик льётся прекрасно. Всё гениальное просто :))
The first step in determining the target CPU for RPS is to calculate a
flow hash over the packet’s addresses or ports (2-tuple or 4-tuple hash
depending on the protocol). This serves as a consistent hash of the
associated flow of the packet.
Может такое быть, что все эти пакеты из одного flow?