- С драйвером по умолчанию ixgb из дистрибутива RedHat (версия 1.3.30-k2 в ядре 2.6.18) сетевой интерфейс просто подвисал при выполненнии теста.
- Поэтому нам пришлось загрузить драйвер с сайта Intel (1.3.56.11-2-NAPI) и пересобрать его. С ним все заработало и максимальную пропускную способность, которую мы получили, была 232K операций/секунду на том же ядре версии 2.6.18. Однако эта версия ядра не поддерживает многопоточную передачу данных (прим. переводчика — в оригинале multiply rings).
- Версия ядра 2.6.29 включает многопоточную передачу данных, но по прежнему не включает последнюю версию драйвера ixgb — 1.3.56-2-NAPI. Поэтому мы загрузили, собрали и установили новые версии ядра и драйвера. Это сработало и после небольшого тюнинга дало нам максимальную пропускную способность в 280К опер./сек.
Результаты
Как мы уже сообщали, система с OpenSolaris и memcached 1.3.2 давала нам максимальную пропускную способность около 350К опер./сек. На том же сервере с RHEL5 (с ядром 2.6.29) и той же версией memcached мы получили 280K опер./сек. Получается, что OpenSolaris обходит Linux на 25%!Тюнинг Linux
Следующие системные значения были использованы, чтобы получить максимальную производительностьnet.ipv4.tcp_timestamps = 0 net.core.wmem_default = 67108864 net.core.wmem_max = 67108864 net.core.optmem_max = 67108864 net.ipv4.tcp_dsack = 0 net.ipv4.tcp_sack = 0 net.ipv4.tcp_window_scaling = 0 net.core.netdev_max_backlog = 300000 net.ipv4.tcp_max_syn_backlog = 200000Следующие, специфические для ixgb-драйвера, параметры были установлены (2 очереди на прием и 2 на передачу)
RSS=2,2 InterruptThrottleRate =1600,1600
Тюнинг OpenSolaris
В /etc/system мы установили следующие параметры для MSI-X (прим. переводчика — в оригинале MSIX, но параметры относятся именно к MSI-X):set ddi_msix_alloc_limit=4 set pcplusmp:apic_intr_policy=1Для интерфейса ixgbe 4-е очереди на передачу и 4-е на прием, дали нам лучшее быстродействие:
tx_queue_number=4, rx_queue_number=4И кроме того мы выделили сетевому интерфейсу отдельные процессорные ядра:
dladm set-linkprop -p cpus=12,13,14,15 ixgbe0
Upd: Ответ Shanti почему они 2х2 использовали: Basically, we tried various settings to see which gives the best performance. On Linux, we got the best results with 2+2 rings. On OpenSolaris, it was 4+4. We suspect that the Linux implementation for multiple rings is probably not performing well yet (it is relatively new).
Краткий перевод: потому что гладиолус

