URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID13
Нить номер: 746
[ Назад ]

Исходное сообщение
"Оптимизация сетевой карты и DMA режим"

Отправлено oasjdfioasjdf , 24-Июн-11 12:56 
Добрый день,

в последнее время сетевая карта на веб сервере перестала справляться с нагрузкой

Подскажите какие есть возможности оптимизации и как проверить включен ли DMA режим?

CentOS, kernel 2.6.18, сетевая карта интегрированная, материнка TYAN i5100X S771


Содержание

Сообщения в этом обсуждении
"Оптимизация сетевой карты и DMA режим"
Отправлено anonymous , 24-Июн-11 22:09 
> в последнее время сетевая карта на веб сервере перестала справляться с нагрузкой
> Подскажите какие есть возможности оптимизации и как проверить включен ли DMA режим?
> CentOS, kernel 2.6.18, сетевая карта интегрированная, материнка TYAN i5100X S771

возможности оптимизации описаны в документации на драйвер e1000

http://www.intel.com/support/network/sb/CS-009209.htm


"Оптимизация сетевой карты и DMA режим"
Отправлено Дядя_Федор , 24-Июн-11 22:43 
Некоторые параметры можно регулировать при помощи утилиты ethtool. Например, на гиговых линках вместо дефолтных RX/TX выставить их (при помощи ключа -G) в максимальные 4096. Можно еще выставить очередь побольше txqueuelen - по дефолту она ставится в 1000. ifconfig-ом можно увеличить до 5000, например. тем же ethtool можно посмотреть статистику сетевой карты. Вот, например, у меня на гиговом линке (стоит поток в 250 Мбит - файлопомойка, в пике бывает под 800):
ethtool -S eth0
NIC statistics:
     rx_packets: 5340661595
     tx_packets: 10477922476
     rx_bytes: 936904612202
     tx_bytes: 15475615496524
     rx_broadcast: 67824
     tx_broadcast: 1
     rx_multicast: 199
     tx_multicast: 0
     rx_errors: 2
     tx_errors: 0
     tx_dropped: 0
     multicast: 199
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 1
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 1144725332
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_long_byte_count: 936904612202
     rx_csum_offload_good: 5340575116
     rx_csum_offload_errors: 573
     rx_header_split: 0
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 67878
     dropped_smbus: 0
     rx_dma_failed: 0
     tx_dma_failed: 0
Можно еще с настройками сетевого стека пограться. У меня во чего в sysctl.conf:
net.core.rmem_max=1000000
net.core.wmem_max=1000000
net.ipv4.tcp_rmem=4096 87380 1000000
net.ipv4.tcp_wmem=4096 65536 1000000
net.ipv4.tcp_no_metrics_save = 1
net.core.netdev_max_backlog = 2500
Можно использовать другие Congession Control Algorithms - http://linuxgazette.net/135/pfeiffer.html Ну и до кучи - http://fasterdata.es.net/fasterdata/host-tuning/linux/ А вообще сетевуха обычно вешается не от величины трафика а по PPS - посмотреть можно при помощи iptraf (например). Ну и прерывание каждой сетевухи надо вешать на отдельное ядро (в случае многоядерности) - используя аффинити - http://www.linuxjournal.com/article/6799 В общем - задача комплексная. И творческая. :) Тут главное не перемудрить.