У меня есть пользовательская плата под управлением Marvell 3700 с включенным SMP. Из-за настроек драйвера мне пришлось реализовать спин-блокировку в функции ndo_start_xmit (функция TX) драйвера, чтобы избежать конкуренции двух ядер. (Моя настройка драйвера использует некоторые общие переменные, которых нельзя избежать).
При тестировании с iperf3 и TCP я часто вижу, что интерфейс зависает и больше не xmit. Это не происходит всегда, но только после продолжительных iperfs. Статистика интерфейса ifconfig TX не увеличивается, когда я пытаюсь пропинговать хост на этом интерфейсе. Я думаю, что происходит то, что skbs не высвобождаются в состоянии гонки между двумя ядрами, что в итоге приводит к исчерпанию skbs.
Я попытался сделать XPS, установив echo 1> /sys /class /net /ethX /queues /txN /xps_cpus для всех интерфейсов и TX-Q. Насколько я понимаю, каждый из этих TX-Q будет обслуживаться процессором № 1, который должен предотвращать состояние гонки. Это верно? Любые другие предложения / указатели будут полезны.
Спасибо.