2009-06-18 4 views
3

Я использую драйвер e1000e для нескольких сетевых карт Intel (Intel EXPI9402PT, основанный на чипе 82571EB). Проблема в том, что когда я пытаюсь использовать максимальную скорость (1 ГБ) на нескольких интерфейсах, скорость на каждом интерфейсе начинает снижаться.Тот же драйвер для нескольких сетевых карт - узкое место производительности?

У меня есть собственный драйвер в пространстве ядра, предназначенный только для отправки данных пакетов. Это просто ALLOCS пакеты по:

skb = dev_alloc_skb(packet->len); 

и их посылает их:

result = dev->hard_start_xmit(skb,dev); 

Каждый интерфейс имеет свой собственный экземпляр драйвера.

Для одного интерфейса я получаю: 120435948 байт/сек.

Для двух интерфейсов я получаю: 61080233 байт/с и 60515294 байта/сек.

Для трех интерфейсов я получаю: 28564020 bytes/sec, 27111184 bytes/sec, 27118907 bytes/sec.

В чем может быть причина? Является ли функция hard_start_xmit реентерабельной?

ответ

3

Это, скорее всего, связано с отсутствием полосы пропускания по вашей материнской плате.

Если вы пытаетесь перекачать 3 Гбит/с информации через шину медленнее 3 Гбит/с, у вас возникнут проблемы. На каких автобусах находятся эти карты?

Возможно, исправление, но я считаю, что это физическое ограничение платы, а не только ваш водитель.

+0

У меня есть PCI-Express x4 и x8, они должны быть достаточно быстрыми. –

0

Когда я добавляю числа вместе для 2 интерфейсов, результат сети немного больше, чем выход для одного интерфейса. Для меня это означает, что при использовании обоих интерфейсов система немного более эффективна. Одной из возможных причин может быть улучшение использования ЦП или, возможно, использование шины. Но учтите, что результат немного лучше и, вероятно, указывает на то, что ресурс, вызывающий шею бутылки, ограничен 121 МБ/с. Как только нагрузка (3 активных интерфейса) превышает этот предел, производительность резко падает до 82 МБ/с.

Трудно придавить точную причину без каких-либо дополнительных измерений, но мои догадки были бы

  1. CPU ограничен: Добавление нескольких процессоров в системе будет исключить это как проблему.
  2. Ограниченная память: Помните, что даже если устройство находится в слоте x4 или x8, подключение к основной памяти (то есть, где SKB live) может не выдерживать эту нагрузку.
  3. Прерывание ограничено: пакеты в секунду могут быть достаточно высокими, чтобы переключение в и из контекстов прерываний ухудшало производительность. Это менее вероятно, так как большинство драйверов хорошо разбираются в коллапсе прерывания, но, если это возможно, переключите драйвер в режим опроса, чтобы это исключить.