^rage^ Posted March 13, 2013 всем привет! в linux-3.9 добавили аналог freebsd'шного ng_bpf - xt_bpf At least, on an x86_64 that achieves 40K netperf TCP_STREAM without any iptables rules (40 GBps), inserting 100x this bpf rule gives 28K ./iptables -A OUTPUT -m bpf --bytecode '6,40 0 0 14, 21 0 3 2048,48 0 0 25,21 0 1 20,6 0 0 96,6 0 0 0,' -j inserting 100x this u32 rule gives 21K ./iptables -A OUTPUT -m u32 --u32 '6&0xFF=0x20' -j DROP компилятор байткода: http://patchwork.ozlabs.org/patch/221140/ модуль для iptables: http://patchwork.ozlabs.org/patch/215095/ Правда, можно обойтись без компилятора байткода и использовать для этих целей tcpdump: modprobe ipip tcpdump -i tunl0 -ddd 'udp' > udp.bpf tcpdump -i tunl0 -ddd 'icmp' > icmp.bpf iptables -A INPUT -m bpf --bytecode-file udp.bpf -j LOG --log-prefix "udp: " iptables -A INPUT -m bpf --bytecode-file icmp.bpf -j LOG --log-prefix "icmp: " в итоге: [17450.201379] udp: IN=dsw0 OUT= MAC= SRC=192.168.99.1 DST=192.168.99.255 LEN=225 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=631 DPT=631 LEN=205 [17450.201430] udp: IN=eth0 OUT= MAC= SRC=192.168.100.2 DST=192.168.100.255 LEN=226 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=631 DPT=631 LEN=206 [17450.201477] udp: IN=virbr0 OUT= MAC= SRC=192.168.122.1 DST=192.168.122.255 LEN=226 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=631 DPT=631 LEN=206 [17451.241597] udp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=10.250.0.3 DST=192.168.100.2 LEN=507 TOS=0x00 PREC=0x00 TTL=60 ID=44930 PROTO=UDP SPT=5060 DPT=5060 LEN=487 [17453.963938] udp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=192.168.100.1 DST=192.168.100.2 LEN=237 TOS=0x00 PREC=0x00 TTL=64 ID=63634 PROTO=UDP SPT=53 DPT=8516 LEN=217 [17460.203403] icmp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=192.168.100.1 DST=192.168.100.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=18090 SEQ=1 [17461.204093] icmp: IN=eth0 OUT= MAC=00:15:17:14:c8:c3:00:30:4f:64:71:92:08:00 SRC=192.168.100.1 DST=192.168.100.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=18090 SEQ=2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted March 13, 2013 Ооо, ну это вообще круто. Надо будет защупать... Спасибо за информацию. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
^rage^ Posted March 13, 2013 Ооо, ну это вообще круто. Надо будет защупать... Спасибо за информацию. как я понимаю, на некоторых платформах оно ещё делает jit в нативный код, если сказать sysctl -w net.core.bpf_jit_enable=1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted March 13, 2013 x86_64 насколько я помню, и было что-то про ARM Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
^rage^ Posted March 13, 2013 кстати, патчик без проблем наложился на 3.8 )) думаю, с не сильно старыми версиями проблем тоже не будет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...