Jump to content

Recommended Posts

Posted

В целях тестирования коммутаторов, нужно сгенерить и принять трафик ~1гбит.

 

Имеется 2 сервера с сетевой карточкой Intel 82541GI, соединил их патчкордом, запускаю iperf сервер и клиент, получаю 868 мбит/с(tcp), по udp немного меньше. Хочется получить ~1гбит/с

 

ethtool говорит, что flow-control делает своё грязное дело:

 

# ethtool -S eth1 | grep flow

rx_flow_control_xon: 908

rx_flow_control_xoff: 908

tx_flow_control_xon: 8393961

tx_flow_control_xoff: 8394042

 

Отключил flow control на обоих серверах:

# ethtool -a eth1

Pause parameters for eth1:

Autonegotiate: off

RX: off

TX: off

 

счётчики flow-control больше не растут, скорость стала чуть меньше - 848мбит(tcp) и появились дропы:

# ifconfig eth1

eth1 Link encap:Ethernet HWaddr 00:15:C5:5D:79:1B

inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0

inet6 addr: fe80::215:c5ff:fe5d:791b/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:18596995 errors:0 dropped:194 overruns:0 frame:0

TX packets:10089840 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:10000

RX bytes:25946366654 (24744.3 Mb) TX bytes:7811726942 (7449.8 Mb)

 

До выключения flow-contol дропов не было.

 

Сервера одинаковые, линуксы на них разные: 2.6.27.19-5-pae и 2.6.32.43-0.4 x86_64

# lspci | grep -i eth

02:04.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)

04:03.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)

 

# modinfo e1000 | grep version

version: 7.3.21-k5-NAPI

srcversion: 97D091079A6192E2599020D

vermagic: 2.6.32.43-0.4-default SMP mod_unload modversions

 

и

# modinfo e1000 | grep version

version: 7.3.21-k3-NAPI

srcversion: C6E401D1B1A22E86974265F

vermagic: 2.6.27.19-5-pae SMP mod_unload modversions 586

 

Что можно сделать, чтобы всё-таки выжать гигабит?

Posted (edited)

Изменяя модулей ( http://e1000.sf.net ) и оптимизация Linux Вы можете делать - ~940Mbps.

Если Вы все еще должны быть около 1 Гбит - использовать LACP (802.3ad) с 2 сетевые карты на каждом сервере.

 

Обзор и http://www.maxgigapop.net/twiki/bin/view/MAX/PerformanceTuning

Edited by 0pl0pl
Posted

Обновил e1000 до 8.0.30-NAPI на обоих серверах - не помогает, любые другие тюнинги из статьи тоже не помогают :(

 

Выкручивание MTU до 9000 даёт скорость 990Мбит/с, но этот случай мне не интересен, т.к. коммутаторы, которые мне нужно протестить имеют максимальный MTU ~2000

 

На MTU 1500 по-прежнему либо flow-control, либо дропы(при отключенном flow-control)

 

И ещё вопрос, dropped в ifconfig - где собственно происходит сам drop - на сетевой карточке или на уровне ОС?

Posted

Сервер http://support.dell.com/support/edocs/systems/SC1425/en/ug/f3593aa0.htm

Чипсет E7520

# cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 15

model : 4

model name : Intel® Xeon™ CPU 3.20GHz

stepping : 10

cpu MHz : 3200.071

cache size : 2048 KB

physical id : 0

siblings : 2

core id : 0

cpu cores : 1

apicid : 0

initial apicid : 0

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 5

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2m

bogomips : 6400.14

clflush size : 64

power management:

 

processor : 1

... тоже самое что и processor 0

 

В sysctl поставил

### CORE settings (mostly for socket and UDP effect)

# maximum receive socket buffer size, default 131071

net.core.rmem_max = 75000000

# maximum send socket buffer size, default 131071

net.core.wmem_max = 75000000

# default receive socket buffer size, default 65535

net.core.rmem_default = 2524287

# default send socket buffer size, default 65535

net.core.wmem_default = 2524287

# maximum amount of option memory buffers, default 10240

net.core.optmem_max = 2524287

# number of unprocessed input packets before kernel starts dropping them, default 300

net.core.netdev_max_backlog = 300000

 

 

### IPV4 specific settings

# turns TCP timestamp support off, default 1, reduces CPU use

net.ipv4.tcp_timestamps = 0

# turn SACK support off, default on -- you probably only want to do this at 10GigE

#net.ipv4.tcp_sack = 0

# on systems with a VERY fast bus -> memory interface this is the big gainer

# sets min/default/max TCP read buffer, default 4096 87380 174760

# setting to 100M - 10M is too small for cross country (chsmall)

net.ipv4.tcp_rmem = 150000000 150000000 150000000

# sets min/pressure/max TCP write buffer, default 4096 16384 131072

net.ipv4.tcp_wmem = 150000000 150000000 150000000

# sets min/pressure/max TCP buffer space, default 31744 32256 32768

net.ipv4.tcp_mem = 150000000 150000000 150000000

 

но эти настройки sysctl ничего не изменили

 

ethtool -G eth1 rx 4096 tx 4096 тоже не помогает

Posted

Увеличение размера пакетов в iperf помогает?

С какими аргументами он запускается?

 

Да, как я уже написал выше, при увеличении MTU до 9000 скорость поднимается до 990мбит/с, но, повторяюсь, этот случай мне не очень интересен.

 

iperf запускал и с большим размером окна и с большим udp-буфером, не в этом сейчас дело(см. ниже)

 

Обновление ядра до ванильного 2.6.39.4 значительно улучшило ситуацию, удалось добиться скорости 930мбит/с при MTU 1500 и включенном flow-control, но проблема по-прежнему сохраняется - либо возникает rx_missed_errors, либо tx_flow_control_* на "принимающей" стороне.

 

e1000 теперь 7.3.21-k8-NAPI(модулем)

 

Сейчас собираю ядро 3.0.1, но вряд ли там большая разница по сравнению с 2.6.39.

 

Кстати, iperf ведёт себя неадекватно(на сервере и клиенте показывает разные скорости), теперь использую nuttcp, очень удобная вещь оказалось, на порядок лучше iperf.

Posted (edited)

IMHO, тестировать нужно исключительно в UDP.

Я для этих целей использовал netperf.

Получил 964+957, но карточки были не Intel.

 

rx_missed_errors свидетельствует о том, что пакеты не помещаются в буфер, а не помещаются потому, что процессор не успевает их оттуда выгребать - что весьма странно при большом размере пакета.

Edited by x86
Posted

От ядра 3.0.1 ничего не улучшилось + на нём не собирает e1000 8.0.30(править makefile лень)

 

На ядре 2.6.39 помогло

ethtool -C eth1 rx-usecs 2700

 

C этой опцией на tcp удалось выжать 949мбит, при этом ни одного drop'а или flow-control'я, т.е. как бы максимум

 

На udp пока только 870мбит, вероятно с sysctl перестарался.

Posted

Вседа думал, что на сервере такие большие значения не только не нужны, но ещё и вредны...

Чем объясняется необходиомсть такого повышния частоты? Не внесет ли это больше оверхеда, чем пользы??

Posted

не утверждаю что будет польза, но можно предположить, что будет быстрее данные выгребать из буферов сетевух, по старому опыту, HZ=1000 поднимало производительность софтроутера под freebsd(ipfw dummynet)

Posted

Ну с 1000 я ещё могу согласиться. Но 3 - 6...

Интересно мнение более опытных коллег.

Posted

HZ это частота переключения потоков планировщиком, соответственно и величина кванта времени отводимого потоку. Поллинг во фряхе сейчас по умолчанию не используется. На многопроцессорных системах которые занимаются ограниченным кругом задачь, ИМХО не разумно увеличивать HZ.

 

Как обычно, критерий истинности - эксперимент.

 

 

Posted

От ядра 3.0.1 ничего не улучшилось + на нём не собирает e1000 8.0.30(править makefile лень)

 

На ядре 2.6.39 помогло

ethtool -C eth1 rx-usecs 2700

 

C этой опцией на tcp удалось выжать 949мбит, при этом ни одного drop'а или flow-control'я, т.е. как бы максимум

 

На udp пока только 870мбит, вероятно с sysctl перестарался.

 

Если тестировать на 100 мегабит, то у меня iperf никогда не показывал 100, точнее всегда показывал 94 мегабита. По аналогии 940 мегабит наверное хороший результат :-). Про UDP не помню, сколько было.

Posted

Если тестировать на 100 мегабит, то у меня iperf никогда не показывал 100, точнее всегда показывал 94 мегабита. По аналогии 940 мегабит наверное хороший результат :-). Про UDP не помню, сколько было.

 

mtu загните по-максимуму и будет больше 94мбит. только проблема в том, что не все FE-свитчи поддерживают jumbo frame, не говоря уж про сетевые карты.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.