Author: 891rpm

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

    Задача – протестировать суммарную пропускную полосу получаемую при помощи бондинга (bonding — объединение нескольких физических интерфейсов в один логический, с расширенной по сравнению с любым из составных интерфейсов полосой пропускания) двух гигабитных сетевых интерфейсов.

    Тестирование производилось с помощью двух серверов в каждом из которых было по два гигабитных сетевых интерфейса (Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet), физически сетевые платы серверов были соединены между собой с помощью двух кросоверных пачкордов.

    ОС: CentOS 5.3.

    Для начала протестируем максимальную скорость передачи данных по каждому интерфейсу в отдельности при помощи двух утилит iperf и netperf.
    iperf показал результаты 949-968 Mbits/sec
    netperf показал результаты от 865.64 до 956.35 10^6bits/sec

    Теперь настроим bonding на обоих серверах и повторим тесты производительности.

    Подгружаем модуль бондинга, для этого в файлы /etc/modprobe.conf на обоих серверах внесем следующие строки:

    alias bond0 bonding
    options bond0 miimon=100 mode=0

    Настройки сетевых интерфейсов на первом сервере.
    cat ifcfg-eth0

    # Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=none
    USERCTL=no
    MASTER=bond0
    SLAVE=yes
    HWADDR=00:21:5E:3F:E5:A0

    Второй адаптер
    cat ifcfg-eth1

    # Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet
    DEVICE=eth1
    ONBOOT=yes
    BOOTPROTO=none
    USERCTL=no
    MASTER=bond0
    SLAVE=yes
    HWADDR=00:21:5E:3F:E5:A2

    Настраиваем сетевые параметры интерфейса бондинга
    cat ifcfg-bond0

    DEVICE=bond0
    IPADDR=192.168.10.1
    NETMASK=255.255.255.0
    NETWORK=192.168.10.0
    BROADCAST=192.168.10.255
    ONBOOT=yes
    BOOTPROTO=none
    USERCTL=no

    Перезагрузимся, для того, чтобы изменения вступили в силу.

    Теперь аналогичным образом настроим сеть на сервере 2, соответственно назначив интерфейсу bond0 ip адрес 192.168.10.2 .

    Теперь внимательно посмотрим, что же нам выдаст команда
    cat /proc/net/bonding/bond0

    Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)

    Bonding Mode: load balancing (round-robin)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0

    Slave Interface: eth0
    MII Status: up
    Link Failure Count: 1
    Permanent HW addr: 00:21:5e:3f:eb:7c

    Slave Interface: eth1
    MII Status: up
    Link Failure Count: 1
    Permanent HW addr: 00:21:5e:3f:eb:7e

    Протестируем производительность с помошью утилиты iperf в один tcp поток.

    На первом сервере запускаем iperf -s .
    На втором сервере запускаем iperf -c 192.168.10.2

    По 10 проходам получаем такие результаты:

    Тест 1 1.88 Gbits/sec
    Тест 2 1.87 Gbits/sec
    Тест 3 1.88 Gbits/sec
    Тест 4 1.87 Gbits/sec
    Тест 5 1.88 Gbits/sec
    Тест 6 1.88 Gbits/sec
    Тест 7 1.88 Gbits/sec
    Тест 8 1.88 Gbits/sec
    Тест 9 1.88 Gbits/sec
    Тест 10 1.88 Gbits/sec

    Cо стороны первого сервера вывод данных от iperf выглядит так:

    Client connecting to 192.168.10.2, TCP port 5001
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
    [ 3] local 192.168.10.1 port 39151 connected with 192.168.10.2 port 5001
    [ ID] Interval Transfer Bandwidth
    [ 3] 0.0-10.0 sec 2.19 GBytes 1.88 Gbits/sec

    Протестируем производительность с помошью утилиты iperf в 100 tcp потоков.

    На первом сервере запускаем iperf -s .
    На втором сервере запускаем iperf -c 192.168.10.2 -P 100

    По результатам 10 тестов получаем такие результаты:
    iperf на первом и втором сервере после запуска выдавал разные результаты, поэтому я привожу оба результата.

    Тест 1 1.83 1.88 Gbits/sec
    Тест 2 1.84 1.89 Gbits/sec
    Тест 3 1.44 1.88 Gbits/sec
    Тест 4 1.85 1.87 Gbits/sec
    Тест 5 1.87 1.88 Gbits/sec
    Тест 6 1.76 1.88 Gbits/sec
    Тест 7 1.84 1.87 Gbits/sec
    Тест 8 1.83 1.85 Gbits/sec
    Тест 9 1.87 1.89 Gbits/sec
    Тест 10 1.83 1.84 Gbits/sec

    Тестируем производительность с помошью netperf
    На первом сервере запускаем netserver -p 10000 -n 4
    На втором сервере запускаем netperf -p 10000 -H 192.168.10.2 -l 30

    После 10 проходов получаем такие результаты (10^6bits/sec):

    Тест 1 1206.99
    Тест 2 1710.40
    Тест 3 1878.43
    Тест 4 1857.45
    Тест 5 1874.43
    Тест 6 1878.10
    Тест 7 1862.14
    Тест 8 1876.81
    Тест 9 1876.41
    Тест 10 1876.15

    Со стороны второго сервера вывод данных после тестирования выглядят так:

    TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.10.2 (192.168.10.2) port 0 AF_INET
    Recv Send Send
    Socket Socket Message Elapsed
    Size Size Size Time Throughput
    bytes bytes bytes secs. 10^6bits/sec

    87380 16384 16384 30.01 1878.43

    Вывод: При использовании bonding для двух гигабитных сетевых адаптеров имеет смысл и его использование увеличивает пропускную способность сети в 2 раза.

    http://centos.alt.ru/?p=12