Добрый день,в последнее время сетевая карта на веб сервере перестала справляться с нагрузкой
Подскажите какие есть возможности оптимизации и как проверить включен ли DMA режим?
CentOS, kernel 2.6.18, сетевая карта интегрированная, материнка TYAN i5100X S771
> в последнее время сетевая карта на веб сервере перестала справляться с нагрузкой
> Подскажите какие есть возможности оптимизации и как проверить включен ли DMA режим?
> CentOS, kernel 2.6.18, сетевая карта интегрированная, материнка TYAN i5100X S771возможности оптимизации описаны в документации на драйвер e1000
Некоторые параметры можно регулировать при помощи утилиты 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 В общем - задача комплексная. И творческая. :) Тут главное не перемудрить.