Имеем сетевую карту на 10G. Реализовали драйвер, который принимает/отсылает данные. Драйвер под Linux.
На простеньких HP пролиантах ( Xeon, c200 ) все завелось и скорость близка к максимальной.
На других серверах
+ два Xeon'a + материнка TYAN
+ один Xeon + материнка asus
+ i7 930 + материнка asus
+ i7 3960X + DX79SI
скорость в 3 и более раз ниже. Перепробывали разное, разные ядра Linux,
вытаскивание процесоров и памяти, отключение гипертредингов и виртуализации,
назначение прерываний на одно ядро, прерывания через MSI, отключение не нужных устройств.
Ничего не помогло. Нужна идея куда копать дальше.
Для начала, я бы попробовал протестировать с включенным профайлером ядра.
Ну, и насколько помню polling/interrupt режим адаптера тоже влияет на скорость.
Здравствуйте, airmaxx, Вы писали:
A>Для начала, я бы попробовал протестировать с включенным профайлером ядра. A>Ну, и насколько помню polling/interrupt режим адаптера тоже влияет на скорость.
В частности драйвер делает подмену буферов сетевой карты для отсылки. И процессор вроде тут ни приечем.
Профайлер покажет только работу драйвера но никак загрузку PCI.
Далее сетевай карта по ДМА забирает данные. Так вот здесь мы и уперлись в какойто предел по какой то шине.
Здравствуйте, klimov.alexey, Вы писали:
KA>Профайлер покажет только работу драйвера но никак загрузку PCI. KA>Далее сетевай карта по ДМА забирает данные. Так вот здесь мы и уперлись в какойто предел по какой то шине.
1) Каким образом вы тестируете скорость?
2) Надо расставлять метки на пакеты и смотреть латентность при прохождении стека. Заодно попробовать минимизировать работу ядра и использовать PF_RING-сокеты.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, klimov.alexey, Вы писали:
KA>>Профайлер покажет только работу драйвера но никак загрузку PCI. KA>>Далее сетевай карта по ДМА забирает данные. Так вот здесь мы и уперлись в какойто предел по какой то шине. C>1) Каким образом вы тестируете скорость? C>2) Надо расставлять метки на пакеты и смотреть латентность при прохождении стека. Заодно попробовать минимизировать работу ядра и использовать PF_RING-сокеты.
Реализован тест
Один компьютер генерирует пакеты с метками, другой компютер принимает и валидирует метки.
Проблема с генератором просто низкая скорость, проблема с валидатором — не успевает писать данные в память и буфер переполняется.
Для генератора проще понять ситуацию. Драйвер для генерации заполянет метку и помечает пакет для отправки. Дальше как быстро сетевая карта отправит пакет зависит от памяти и шины pci express.
Здравствуйте, klimov.alexey, Вы писали:
KA>Для генератора проще понять ситуацию. Драйвер для генерации заполянет метку и помечает пакет для отправки. Дальше как быстро сетевая карта отправит пакет зависит от памяти и шины pci express.
Каким образом отправляются пакеты?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, klimov.alexey, Вы писали:
KA>>Для генератора проще понять ситуацию. Драйвер для генерации заполянет метку и помечает пакет для отправки. Дальше как быстро сетевая карта отправит пакет зависит от памяти и шины pci express. C>Каким образом отправляются пакеты?
У сетевой карты есть кольцевой буфер для отправки. Пакет помещается в буфер, сетевыя карта его отправляет.
Здравствуйте, klimov.alexey,
KA>Реализован тест KA>Один компьютер генерирует пакеты с метками, другой компютер принимает и валидирует метки. KA>Проблема с генератором просто низкая скорость, проблема с валидатором — не успевает писать данные в память и буфер переполняется.
KA>Для генератора проще понять ситуацию. Драйвер для генерации заполянет метку и помечает пакет для отправки. Дальше как быстро сетевая карта отправит пакет зависит от памяти и шины pci express.
--
Правильно ли я понимаю, что проблема проявляется не в передаче данных по PCIe, а до этой передачи ("низкая скорость" в генераторе) и после этой передачи (в приемнике)?
Здравствуйте, klimov.alexey, Вы писали:
KA>>>Для генератора проще понять ситуацию. Драйвер для генерации заполянет метку и помечает пакет для отправки. Дальше как быстро сетевая карта отправит пакет зависит от памяти и шины pci express. C>>Каким образом отправляются пакеты? KA>У сетевой карты есть кольцевой буфер для отправки. Пакет помещается в буфер, сетевыя карта его отправляет.
Каким образом? Напрямую или через PF_RING?
Здравствуйте, klimov.alexey, Вы писали:
KA>Напрямую. У сетевой карты есть регистры, в которые записываются указатели на пакеты.
Интересно. Кстати, а IOMMU выключен (попробуйте загрузить с параметром iommu=off или intel-iommu=off ).
Мы достигли максимальной скорости на всех одноголовых конфигурациях, однако на двухголовых наблюдаем падение скорости в 3-4 раза.
Предположительно влияет наличие чипсета, который находится на плате а не в процессоре, как в одноголовой конфигурации.
Re: Передача данных по ДМА по PCI Express
От:
Аноним
Дата:
15.04.12 08:49
Оценка:
повторюсь ....
Мы немного продвинулись в решении.
Теперь проблема выглядит следующим образом
Мы достигли максимальной скорости на всех одноголовых конфигурациях, однако на двухголовых наблюдаем падение скорости в 3-4 раза.
Предположительно влияет наличие чипсета, который находится на плате а не в процессоре, как в одноголовой конфигурации.