- Оптимизация сетевой карты и DMA режим, anonymous, 22:09 , 24-Июн-11 (1)
> в последнее время сетевая карта на веб сервере перестала справляться с нагрузкой > Подскажите какие есть возможности оптимизации и как проверить включен ли DMA режим? > CentOS, kernel 2.6.18, сетевая карта интегрированная, материнка TYAN i5100X S771 возможности оптимизации описаны в документации на драйвер e1000 http://www.intel.com/support/network/sb/CS-009209.htm
- Оптимизация сетевой карты и DMA режим, Дядя_Федор, 22:43 , 24-Июн-11 (2)
Некоторые параметры можно регулировать при помощи утилиты 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 В общем - задача комплексная. И творческая. :) Тут главное не перемудрить.
|