LINUX.ORG.RU
ФорумAdmin

1GB карта 82541GI. Предельная нагрузка. Как расширить производительность?


1

2

Доброго дня!
На серваке воткнута 82541GI с драйвером e1000.
Intel выложило вот такой интересный документ: Small Packet Traffic Performance Optimization for 8255x and 8254x Ethernet Controllers Application Note (AP-453)
http://download.intel.com/design/network/applnots/ap453.pdf
в котором радостно сообщает, что: Theoretical Maximum Frame при Rate Maximum-sized Ethernet frames carrying TCP/IP data (1538 byte) составляет 81,274 packets per second (approx.), при минимальных размерах (64 byte) 1,488,095 packets per second (approx.)

Что имеется по факту. Максимум примерно. RX+TX=100000 pp/s. Выше не поднимается. Соотношение трафика: 66-255 10% 256-511 10% 512-1023 25% 1023-1538 55% Скорость передачи данных при этом: 450 RX, 250 TX. При этом количество пакетов примерно 48000-50000 что на TX, что на RX.

Собственно вопрос: следует ли считать, что «уперлись» в предел производительность интерфейса? К сожалению, документ не уточняет, что подразумевается под Theoretical Maximum Frame суммарно RX+TX или же отдельно RX и TX количество пакетов в секунду.

Есть ли у кого-нибудь опыт решения таких проблем?

Использовали ли вы 10GB сетевые карты?

Если что:
cat sysctl.conf
net.ipv4.neigh.default.gc_thresh3=8192
net.netfilter.nf_conntrack_max=1048576
net.core.rmem_default=201250
net.ipv4.tcp_keepalive_probes=3
net.ipv4.conf.all.secure_redirects=0
net.ipv4.neigh.default.gc_thresh1=2048
net.core.wmem_default=201250
net.core.netdev_max_backlog=100000
net.ipv4.tcp_mtu_probing=1
net.core.somaxconn=300000
net.core.wmem_max=16777216
net.ipv4.conf.all.send_redirects=0
net.ipv4.ip_local_port_range=«1024 65000»
net.nf_conntrack_max=1048576
net.core.rmem_max=16777216
net.ipv4.tcp_wmem=«4096 65536 16777216»
net.ipv4.tcp_keepalive_intvl=5
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.tcp_fin_timeout=15
net.ipv4.neigh.default.gc_thresh2=4096
net.ipv4.tcp_rmem=«4096 87380 16777216»

Процессор при этом не загружен в 100%. В среднем 30-40% id всегда есть



Последнее исправление: gich (всего исправлений: 5)

Есть ли у кого-нибудь опыт решения таких проблем?

увеличение количества сетевух. Агреггирование не помогает.

Использовали ли вы 10GB сетевые карты?

хотели вот попробовать, но руки не дошли. Были мысли, что в PCI-E упирается, но выше PCI-E 2.0 карт я не нашел.

xpahos ★★★★★
()

1) сами указываете, что больших пакетов - больше половины, так что 100000pp/s довольно годное число

2) видимо без второй платы не обойтись - но тут надо тщательно обдумать как разбрасывать по ним трафик

3) затык может ещё быть в источниках данных(на что возможно косвенно намекает меньший TX при одинаковых прочих данных с RX), т.е. в дисках, прцое, ОЗУ ну и т.д.

4) про «в среднем 40% idle» - в среднем по больнице 36.6 ;-)

надо смотреть нет ли кратковременных пиков, насколько качественно отрабатываются прерывания и т.д.

mumpster ★★★★★
()

Интерфейс карты какой? PCIX? Возможно упирается в него или в процессор карты. Современные сетевухи от 82574 и выше умеют создавать несколько очередей на отправку и прием, которые можно и нужно вешать на разные ядра или процессоры.

По поводу 10гбит, у меня сервер с 3 картами по 2 порта 10гбит легко бриджует почти 20гбит, а может и больше. Но там по 8 очередей на каждой карте и 12 ядер проц.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Спасибо за мнения и информацию.

надо смотреть нет ли кратковременных пиков

Кратковоременно в 0 id оно уезжает.

видимо без второй платы не обойтись - но тут надо тщательно обдумать как разбрасывать по ним трафик

Судя по всему собирать bonding интерфейс и курить маны уже на эту тему.

увеличение количества сетевух. Агреггирование не помогает.

А увеличить их количество и соединить в один bonding не?

затык может ещё быть в источниках данныхв дисках, прцое, ОЗУ ну и т.д.

На сервере собирается netflow. Это стабильно 30-40% При его отключении id меньше 70% не бывает, wa, даже с включенным netflow редко больше 0,1, что вполне нормально. При всех этих условиях картинка с 50/50 RX/TX остается.
Спасибо, посмотрю в сторону 82574, если что есть подменный фонд железа в относительно близком доступе, попробую найти и потестить эти карты.

gich
() автор топика
Ответ на: комментарий от gich

Если покупать сейчас, то лучше 82576 (драйвер igb) или 82580 (сразу 4 порта гигабита на 1 карте). Они самые производительные из гигабитных, на каждый порт можно поставить по 6 очередей вроде (т.е. раскидать нагрузку на 6 ядер\процессоров).

Bonding поможет если его умеет свитч и если нагрузка идёт по нескольким хостам (т.е. одно TCP соединение он разбить на сетевухи сможет только в режиме round-robin, который поддерживается по-хорошему только при прямом соединении линукс-линукс без свичей, иначе появляются пакеты вне очереди).

blind_oracle ★★★★★
()
Ответ на: комментарий от gich

Вот, например, как равномерно раскидываются прерывания по ядрам второго процессора на 10-гбит картах:

 148:         17          0          0          0          0          0   21681465          0          0          0          0          0   PCI-MSI-edge      card2_p1-TxRx-0
 149:         13          0          0          0          0          0          0   32375929          0          0          0          0   PCI-MSI-edge      card2_p1-TxRx-1
 150:         13          0          0          0          0          0          0          0   31356756          0          0          0   PCI-MSI-edge      card2_p1-TxRx-2
 151:         13          0          0          0          0          0          0          0          0   29185907          0          0   PCI-MSI-edge      card2_p1-TxRx-3
 152:         13          0          0          0          0          0          0          0          0          0   29521647          0   PCI-MSI-edge      card2_p1-TxRx-4
 153:         13          0          0          0          0          0          0          0          0          0          0   27738922   PCI-MSI-edge      card2_p1-TxRx-5
 154:          4          0          0          0          0          0          0          0          0          0          0          0   PCI-MSI-edge      card2_p1
 155:         12          0          0          0          0          0     858116          0          0          0          0          0   PCI-MSI-edge      card2_p2-TxRx-0
 156:         12          0          0          0          0          0          0     858116          0          0          0          0   PCI-MSI-edge      card2_p2-TxRx-1
 157:         12          0          0          0          0          0          0          0     858116          0          0          0   PCI-MSI-edge      card2_p2-TxRx-2
 158:         12          0          0          0          0          0          0          0          0     858116          0          0   PCI-MSI-edge      card2_p2-TxRx-3
 159:         12          0          0          0          0          0          0          0          0          0     858116          0   PCI-MSI-edge      card2_p2-TxRx-4
 160:         12          0          0          0          0          0          0          0          0          0          0     858116   PCI-MSI-edge      card2_p2-TxRx-5
 161:          4          0          0          0          0          0          0          0          0          0          0          0   PCI-MSI-edge      card2_p2

blind_oracle ★★★★★
()
Ответ на: комментарий от gich

Почитайте темы
1. http://forum.nag.ru/forum/index.php?showtopic=46335
http://nag.ru/articles/article/19974/kak-my-10gigabit-na-linux-routere-marshr...
2. На сайте intel есть сводная брошюра сетевух из которой можно узнать какие сетевухи умеют несколько очередей на прием, на отправку
3. Ethernet controller: Intel Corporation 82575EB Gigabit Network супер чип для 1ГБИТ/с не знаю есть ли он на внешней сетевухе, но рекомендую ориентироваться на него.
4. Из своего опыта приведу неудачный пример
Купил сетевуху Intel Corporation 82572EI Gigabit Ethernet Controller которая якобы умеет несколько очередей. Установил его на плату ASRock + 4 ядерный проц от AMD. Установил centos5.X c ядром 2.6.18. но никакого распаралеливания не получил.
Хотя точно такое же ядро на сервере от интел с интегрированным 82575EB отлично паралелит прерывания. думаю что виновато железо.

Vlad-76 ★★★★
()
Ответ на: комментарий от blind_oracle

По информации на сайте интел
Intel® 82576EB2
Performance Features
Intel® I/O Acceleration Technology (Intel® QuickData Technology, MSI-X, RSS, Direct Cache Access,
checksum and segmentation offload, header splitting/replication, low latency interrupts),
16Rx/16Tx queues/port, jumbo frames, Intel® VT for Connectivity (Virtual Machine Device Queues (VMDq), Virtual Machine Direct Connect (VMDc - PCI-SIG SR-IOV based), Security (IPsec offload, LinkSec3), IEEE 1588 (time stamp

Intel® 82580EB
Performance Features
I/O Acceleration Technology (I/OAT). Receive Side Scaling (RSS), Direct Cache Access, and Message Signal Interrupt Extension (MSI-X), UDP, TCP and IP Checksum offloads, UDP and TCP Transmit Segmentation Offload (TSO), SCTP receive and transmit checksum offloads, Stateless offloads (header splitting), 8 Tx and 8 Rx queues, 9500-byte jumbo frame support, Intel® VT-c and VMDq, IEEE 1588 (time stamp) / 802.1AS

Это же надо сколько ядер в системе если одна очередь вешается на одно ядро?

Vlad-76 ★★★★
()
Ответ на: комментарий от Vlad-76

На самом деле для гигабитных карт разбрасывание по ядрам имеет смысл только на слабых процессорах. А вот для 10Гбит оно уже начинает играть решающую роль, т.к. без него 10Гбит не получишь вообще.

blind_oracle ★★★★★
()
Ответ на: комментарий от mumpster

Юзаю древнй Intel сервер двухядерный ( Intel(R) Xeon(TM) CPU 2.40GHz) в качестве роутера. В него интегрирован Intel Corporation 82546EB Gigabit Ethernet Controller. Сentos 5.x + 2.6.18
Прежде чем его выставить в продакшн, тестил iperf производительность по прерываниям hi+si. Получил интересную картину.
В одну сторону на прием сервак без проблем справлялся с нагрузкой 250000 pps.
Сетевуха умеет только одну очередь прерываний на интерфейс.

Vlad-76 ★★★★
()
Ответ на: комментарий от blind_oracle

Полоса пропускания по трафику это не главное. Главная сложность разрулить высокий PPS.

Vlad-76 ★★★★
()
Ответ на: комментарий от blind_oracle

Собственно вопрос не в том как это сделать. А вопрос есть ли смысл в 16 очередях?
16 очередей = 16 ядер.
Для разруливания 1 ГБИТ большими пакетами такого количества очередей не нужно вовсе, если сервер исключительно как роутер. Хотя если идет DDOS атака это вполне может пригодиться.

Vlad-76 ★★★★
()
Ответ на: комментарий от gich

а фаервол есть ли на этой машине ?
попробуй выключить - именн овыгрузив все модули что за него отвечают - а частности conntrack

и чем проверял то скорость ?

ae1234 ★★
()
Ответ на: комментарий от ae1234

Пакет для анализа в каком месте проц тратит себя - oprofile.

Vlad-76 ★★★★
()
Ответ на: комментарий от blind_oracle

82580 есть двухпортовые медные и стоят не дороже 82576. Но не знаю каким образом у нас на 82572 pps был выше, чем на 82576.

А 10G у тебя сколько pps обрабатывают? И оптика сразу к оборудованию идет или через конвертер?

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

PPS не мерял, т.к. нужды особой не было, по нему гоняется iSCSI в основном и PPS не особо важен. Померяю при случае. Как нынче это принято? iperf в UDP?

Подсоединено оно напрямую твинкоаксиалами SFP+

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

лучше TCP iperf. У нас веб сервер текст в основном отдает.

xpahos ★★★★★
()
Ответ на: комментарий от Vlad-76

собсно, мне это знание зачем?8)

а Тнудра - это же тоже 82546EB?

вроде бы платы хорошие были на ней 2 -портовые. годные.

про очереди - не понмю.:(

mumpster ★★★★★
()
Ответ на: комментарий от mumpster

Собственно этот пост связан с «4. Из своего опыта приведу неудачный пример».
Казалось бы подбираешь решение, сам все собираешь а интегрированные с заявленными меньшими возможностями сетевых чипов работают лучше.
Если это знание ни к чему то ни к чему.

Vlad-76 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.