Saya langsung menghubungkan dua crossover PowerEdge 6950 (menggunakan garis lurus) pada dua PCIe-adapter yang berbeda.
Saya mendapatkan tautan gigabit pada setiap baris ini (1000 MBit, dupleks penuh, aliran contol di kedua arah).
Sekarang saya mencoba untuk mengikat antarmuka ini ke bond0 menggunakan rr-algoritma di kedua sisi (saya ingin mendapatkan 2000 MBit untuk sesi IP tunggal).
Ketika saya menguji throughput dengan mentransfer / dev / nol ke / dev / null menggunakan dd bs = 1M dan netcat dalam mode tcp saya mendapatkan throughput 70 MB / s - tidak - seperti yang diharapkan lebih dari 150MB / s.
Ketika saya menggunakan baris tunggal saya mendapatkan sekitar 98 MB / s pada setiap baris, jika saya menggunakan arah yang berbeda untuk setiap baris. Ketika saya menggunakan baris tunggal saya mendapatkan 70 MB / s dan 90 MB / s di telepon, jika lalu lintas menuju ke arah "sama".
Setelah membaca bonding-readme (/usr/src/linux/Documentation/networking/bonding.txt), saya menemukan bagian berikut ini berguna: (13.1.1 Pilihan Mode Ikatan MT untuk Topologi Single Switch)
balance-rr: Mode ini adalah satu-satunya mode yang akan mengizinkan koneksi TCP / IP tunggal untuk memotong lalu lintas di beberapa antarmuka. Oleh karena itu satu-satunya mode yang akan memungkinkan aliran TCP / IP tunggal untuk memanfaatkan lebih dari satu nilai throughput antarmuka. Namun, hal ini berbiaya: striping sering mengakibatkan sistem peer menerima paket rusak, menyebabkan sistem kontrol kemacetan TCP / IP untuk menendang, sering dengan mentransmisikan kembali segmen.
It is possible to adjust TCP/IP's congestion limits by altering the net.ipv4.tcp_reordering sysctl parameter. The usual default value is 3, and the maximum useful value is 127. For a four interface balance-rr bond, expect that a single TCP/IP stream will utilize no more than approximately 2.3 interface's worth of throughput, even after adjusting tcp_reordering. Note that this out of order delivery occurs when both the sending and receiving systems are utilizing a multiple interface bond. Consider a configuration in which a balance-rr bond feeds into a single higher capacity network channel (e.g., multiple 100Mb/sec ethernets feeding a single gigabit ethernet via an etherchannel capable switch). In this configuration, traffic sent from the multiple 100Mb devices to a destination connected to the gigabit device will not see packets out of order. However, traffic sent from the gigabit device to the multiple 100Mb devices may or may not see traffic out of order, depending upon the balance policy of the switch. Many switches do not support any modes that stripe traffic (instead choosing a port based upon IP or MAC level addresses); for those devices, traffic flowing from the gigabit device to the many 100Mb devices will only utilize one interface.
Sekarang saya mengubah parameter itu pada kedua server yang terhubung pada semua baris (4) dari 3 menjadi 127.
Setelah ikatan lagi saya mendapatkan sekitar 100 MB / s tetapi masih tidak lebih dari itu.
Ada ide mengapa?
Pembaruan: Detail perangkat keras dari lspci -v
:
24:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
Subsystem: Intel Corporation PRO/1000 PT Dual Port Server Adapter
Flags: bus master, fast devsel, latency 0, IRQ 24
Memory at dfe80000 (32-bit, non-prefetchable) [size=128K]
Memory at dfea0000 (32-bit, non-prefetchable) [size=128K]
I/O ports at dcc0 [size=32]
Capabilities: [c8] Power Management version 2
Capabilities: [d0] MSI: Mask- 64bit+ Count=1/1 Enable-
Capabilities: [e0] Express Endpoint, MSI 00
Kernel driver in use: e1000
Kernel modules: e1000
Perbarui hasil akhir:
8589934592 byte (8,6 GB) disalin, 35,8489 detik, 240 MB / s
Saya mengubah banyak opsi tcp / ip dan driver tingkat rendah. Ini termasuk pembesaran buffer jaringan. Inilah sebabnya mengapa dd
sekarang menunjukkan angka yang lebih besar dari 200 MB / s: dd berakhir sementara masih ada output yang menunggu untuk ditransfer (dalam mengirim buffer).
Pembaruan 2011-08-05: Pengaturan yang diubah untuk mencapai tujuan ( /etc/sysctl.conf ):
# See http://www-didc.lbl.gov/TCP-tuning/linux.html
# raise TCP max buffer size to 16 MB. default: 131071
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# raise autotuninmg TCP buffer limits
# min, default and max number of bytes to use
# Defaults:
#net.ipv4.tcp_rmem = 4096 87380 174760
#net.ipv4.tcp_wmem = 4096 16384 131072
# Tuning:
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Default: Backlog 300
net.core.netdev_max_backlog = 2500
#
# Oracle-DB settings:
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
kernel.shmmax = 2147659776
kernel.sem = 1250 256000 100 1024
net.core.rmem_default = 262144
net.core.wmem_default = 262144
#
# Tuning for network-bonding according to bonding.txt:
net.ipv4.tcp_reordering=127
Pengaturan khusus untuk bond-device (SLES: / etc / sysconfig / network / ifcfg-bond0 ):
MTU='9216'
LINK_OPTIONS='txqueuelen 10000'
Perhatikan bahwa pengaturan MTU sebesar mungkin adalah kunci untuk solusi.
Menyetel buffer rx / tx dari kartu jaringan yang terlibat:
/usr/sbin/ethtool -G eth2 rx 2048 tx 2048
/usr/sbin/ethtool -G eth4 rx 2048 tx 2048
nuttcp
. Uji koneksi tunggal atau banyak koneksi dengan mudah.
/proc/net/bonding/bond0
untuk memverifikasi bahwa Anda benar-benar disetel ke saldo-rr ? Apakah Anda melihat catatan dan dokumentasi yang Anda tempelkan tentang ikatan 4 antarmuka hanya memberi Anda 2,3 antarmuka senilai throughput? Mengingat catatan itu, tampaknya sangat tidak mungkin bahwa Anda akan mendekati 2000mb / s yang Anda inginkan.