Привет всем!В общем такая ситуация:
Имеем машинку на linux
uname -a
(Linux br01 2.6.30-gentoo-r5 #1 SMP Tue Sep 22 13:29:24 YEKST 2009 i686 Intel(R) Xeon(TM) CPU 3.20GHz GenuineIntel GNU/Linux)На машинку на 1 гаигабитный интерфейс (tg3) выходят 591 vlan. Оптимизация интерфейса выполнена вроде все возможное, смотрел сюда и еще по всяким ссылкам: (http://timetobleed.com/useful-kernel-and-driver-performance-.../), poll работает.
На половине vlan, 270 штук, висят правила ebtables. На каждом vlan, в срднем, 8 правил, 4 по arp модулю, 4 по ip модулю. Ничего особенного, дроп или аццепт маков или ipv4 адресов.
Также, на каждом из vlan висят htb sfq шейперы, скорости от 128кбит до 8Мбит.
Имеем следующую ситуацию. При трафике около 5-8Мбайт/c (до 64 мбит/c) происходит отсечка пакетов на границе примерно 10 тыс. пакетов/c. Потери полезного трафика 5-25%. При этом видим скачки занятости процессора до 100%.> mpstat -P ALL 1
09:00:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:12 all 0.74 0.00 0.49 0.00 0.00 25.25 0.00 0.00 73.53
09:00:12 0 0.99 0.00 0.00 0.00 0.00 0.99 0.00 0.00 98.02
09:00:12 1 0.00 0.00 0.96 0.00 0.00 0.00 0.00 0.00 99.04
09:00:12 2 0.00 0.00 0.00 0.00 0.00 100.00 0.00 0.00 0.00
09:00:12 3 1.94 0.00 0.97 0.00 0.00 1.94 0.00 0.00 95.1509:00:12 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:13 all 0.49 0.00 0.98 0.00 0.00 25.49 0.00 0.00 73.04
09:00:13 0 0.00 0.00 0.00 0.00 0.00 0.98 0.00 0.00 99.02
09:00:13 1 0.00 0.00 0.98 0.00 0.00 81.37 0.00 0.00 17.65
09:00:13 2 0.97 0.00 1.94 0.00 0.00 18.45 0.00 0.00 78.64
09:00:13 3 0.99 0.00 0.99 0.00 0.00 0.99 0.00 0.00 97.0309:00:13 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:14 all 0.49 0.00 0.25 0.00 0.00 25.00 0.00 0.00 74.26
09:00:14 0 0.00 0.00 0.00 0.00 0.00 1.96 0.00 0.00 98.04
09:00:14 1 0.00 0.00 0.00 0.00 0.00 79.00 0.00 0.00 21.00
09:00:14 2 0.00 0.00 0.98 0.00 0.00 20.59 0.00 0.00 78.43
09:00:14 3 1.92 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.0809:00:14 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:15 all 0.50 0.00 0.75 0.00 0.00 21.80 0.00 0.00 76.94
09:00:15 0 0.00 0.00 0.00 0.00 0.00 2.94 0.00 0.00 97.06
09:00:15 1 0.00 0.00 0.00 0.00 0.00 85.26 0.00 0.00 14.74
09:00:15 2 0.00 0.00 1.02 0.00 0.00 3.06 0.00 0.00 95.92
09:00:15 3 1.92 0.00 1.92 0.00 0.00 0.00 0.00 0.00 96.1509:00:15 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:16 all 0.25 0.00 0.49 0.00 0.00 24.63 0.00 0.00 74.63
09:00:16 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:00:16 1 0.00 0.00 0.00 0.00 0.00 94.34 0.00 0.00 5.66
09:00:16 2 0.98 0.00 0.98 0.00 0.00 0.00 0.00 0.00 98.04
09:00:16 3 0.00 0.00 1.03 0.00 0.00 0.00 0.00 0.00 98.9709:00:16 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:00:17 all 0.74 0.00 0.25 0.00 0.00 24.88 0.00 0.00 74.14
09:00:17 0 0.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.04
09:00:17 1 0.00 0.00 0.00 0.00 0.00 100.00 0.00 0.00 0.00
09:00:17 2 1.01 0.00 0.00 0.00 0.00 1.01 0.00 0.00 97.98
09:00:17 3 0.97 0.00 0.97 0.00 0.00 0.00 0.00 0.00 98.06Если опустить ebtables, количество пакетов возрастает до 20 тыс. пак/c, но это не весь полезный трафик, часть пакетов, примерно 6-8 тыс. должна была отсекаться iptables.
oprofile подтверждает что загрузку дают именно ebtables
CPU: P4 / Xeon with 2 hyper-threads, speed 3200.17 MHz (estimated)
Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 100000
samples % app name symbol name
533027 76.0937 vmlinux ebt_do_table
10088 1.4401 sch_htb (no symbols)
7200 1.0279 vmlinux mwait_idle
6743 0.9626 vmlinux tg3_poll
6657 0.9503 ipcad flow_update
4818 0.6878 vmlinux tg3_read32
4527 0.6463 vmlinux dev_queue_xmit
3181 0.4541 vmlinux rb_get_reader_page
3133 0.4473 vmlinux tg3_start_xmit_dma_bug
3042 0.4343 sch_sfq (no symbols)
3032 0.4328 vmlinux irq_entries_start
3014 0.4303 vmlinux mix_pool_bytes_extract
2854 0.4074 vmlinux nf_iterate
2768 0.3952 vmlinux get_next_timer_interrupt
2718 0.3880 vmlinux __qdisc_run
2397 0.3422 vmlinux getnstimeofday
2138 0.3052 vmlinux kmem_cache_alloc
1988 0.2838 vmlinux read_tsc
1979 0.2825 vmlinux tg_shares_up
1955 0.2791 vmlinux ring_buffer_consume
1819 0.2597 oprofiled (no symbols)
1611 0.2300 ip_tables (no symbols)
Вот, в общем такой расклад. Кто ковырялся с высоконагруженными бриджами и ebtables? Может есть еще куда порыть, или это предел..?Методы оптимизации примерно понятны... можно конечно и всю схему переломать и перекроить, просто рассчитывалось выжать из схемы несколько поболее чем 10 тыс ппс..
сетевки поставить 2 и агрегировать их в одну, сетевки желательно какие нить мажорные, с собственными процами