Author: 891rpm

  • NAT производительность

    Решил выяснить сколько трафика сможет занатить один Linux сервер, какая нагрузка будет при этом на CPU.

    Выяснилось, что при одном и том, же сетевом трафике, но разном количестве пакетов нагрузка на CPU будет разная, что совершенно логично.

    Приведу тестовые данные:

    Итак тестовая система:
    Однопроцессорный четырехядерный сервер Intel(R) Xeon(R) CPU E5405 2.00GHz
    Сетевые адаптеры Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz
    ОС CentOS 5.4

    Правила для iptables простые /etc/sysconfig/iptables


    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT DROP [0:0]

    COMMIT

    *nat

    -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to 192.168.0.1
    -A POSTROUTING -o eth0 -s 172.16.2.0/24 -j SNAT --to 192.168.0.2
    -A POSTROUTING -o eth0 -s 172.16.3.0/24 -j SNAT --to 192.168.0.3
    --//--
    -A POSTROUTING -o eth0 -s 172.16.254.0/24 -j SNAT --to 192.168.0.254

    COMMIT

    Пропустим через сервер трафик порядка 100 мегабит:

    Входящий 90-100 мбит/с
    Исходящий 50-60 мбит/с

    Посмотрим количество пакетов:

    vnstat -tr 15 -i eth0
    409452 packets sampled in 15 seconds
    Traffic average for eth0

    rx 11291.52 kB/s 14072 packets/s
    tx 5771.39 kB/s 13223 packets/s

    Нагрузка на процессоры:

    Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 91.0%id, 0.0%wa, 1.7%hi, 7.3%si, 0.0%st
    Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 88.3%id, 0.0%wa, 3.7%hi, 8.0%si, 0.0%st

    Количество соединений:

    sysctl -a | grep ip_conntrack_count
    net.ipv4.netfilter.ip_conntrack_count = 65405

    Как видим нагрузка на каждый из процессоров всего в районе 7-8 процентов.

    Увеличим трафик проходящий через сервер трафик до 200 мбит/с посмотрим как изменится картина

    Трафик на обоих сетевых интерфейсах:
    Входящий 200-230 мбит/с
    Исходящий 130-150 мбит/с


    vnstat -tr 15 -i eth0
    873819 packets sampled in 15 seconds
    Traffic average for eth0

    rx 22922.61 kB/s 29719 packets/s
    tx 14199.36 kB/s 28535 packets/s

    Нагрузка на CPU

    Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 68.0%id, 0.0%wa, 2.3%hi, 29.7%si, 0.0%st
    Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 60.0%id, 0.0%wa, 4.7%hi, 35.0%si, 0.0%st

    Увеличим трафик проходящий через сервер трафик до 350 мбит/с посмотрим как изменится картина

    Трафик на обоих сетевых интерфейсах:
    Входящий 350-370 мбит/с
    Исходящий 190-210 мбит/с


    vnstat -tr 15 -i eth0
    1475987 packets sampled in 15 seconds
    Traffic average for eth0

    rx 37181.86 kB/s 49891 packets/s
    tx 20991.49 kB/s 48507 packets/s

    Нагрузка на CPU

    Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 37.9%id, 0.0%wa, 1.7%hi, 60.5%si, 0.0%st
    Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 19.5%id, 0.0%wa, 5.3%hi, 75.2%si, 0.0%st

    Количество сетевых соединений

    sysctl -a | grep ip_conntrack_count
    net.ipv4.netfilter.ip_conntrack_count = 215402

    Ну вот в принципе и все, как видим, даже обычный сервер в состоянии «заNATить» порядка 400 мегабит трафика.