İki farklı PCIe adaptörüne doğrudan iki PowerEdge 6950 geçişi (düz çizgiler kullanarak) bağladım.
Bu satırların her birinde bir gigabit bağlantısı alıyorum (1000 MBit, tam çift yönlü, her iki yönde de akış kontrolü).
Şimdi her iki tarafta rr algoritmasını kullanarak bond0 bu arayüzleri bağlamaya çalışıyorum (tek bir IP oturumu için 2000 MBit almak istiyorum).
Verileri, tdp modunda dd bs = 1M ve netcat kullanarak / dev / zero / dev / null'a aktararak test ettiğimde 70 MB / s - değil - 150MB / s'den daha fazla beklediğim bir verim elde ediyorum.
Tek satırları kullandığımda, her satır için farklı bir yön kullanırsam, her satırda yaklaşık 98 MB / sn alırım. Tek satırları kullandığımda, trafik "aynı" yöne giderse 70 MB / sn ve 90 MB / sn alırım.
Bonding-readme (/usr/src/linux/Documentation/networking/bonding.txt) dosyasını okuduktan sonra aşağıdaki bölümü faydalı buldum: (Tek Anahtar Topolojisi için 13.1.1 MT Yapıştırma Modu Seçimi)
balance-rr: Bu mod, tek bir TCP / IP bağlantısının trafiği birden çok arabirimden çıkarmasına izin veren tek moddur. Bu nedenle, tek bir TCP / IP akışının birden fazla arabirimin işlem hacmini kullanmasına izin veren tek moddur. Bununla birlikte, bu bir maliyete sahiptir: şeritleme genellikle paketleri düzenli olarak alan eş sistemlerle sonuçlanır, bu da TCP / IP'nin tıkanıklık kontrol sisteminin, genellikle segmentleri yeniden ileterek devreye girmesine neden olur.
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.
Şimdi bu parametreyi tüm hatlardaki (4) her iki bağlı sunucuda 3'ten 127'ye değiştirdim.
Tekrar bağladıktan sonra yaklaşık 100 MB / s alıyorum ama yine de bundan daha fazla değil.
Neden herhangi bir fikir?
Güncelleme: Donanım detayları 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
Nihai sonuçları güncelleyin:
8589934592 bayt (8,6 GB) kopyalandı, 35.8489 saniye, 240 MB / s
Çok fazla tcp / ip ve düşük seviye sürücü seçeneklerini değiştirdim. Bu, ağ arabelleklerinin genişlemesini içerir. Bu yüzden dd
artık 200 MB / sn'den büyük sayılar gösterilmektedir: dd aktarılmayı bekleyen çıktı varken (gönderme tamponlarında) sonlandırılır.
2011-08-05 Güncellemesi: Hedefe ulaşmak için değiştirilen ayarlar ( /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
Bond cihazı için özel ayarlar (SLES: / etc / sysconfig / network / ifcfg-bond0 ):
MTU='9216'
LINK_OPTIONS='txqueuelen 10000'
Mümkün olan en büyük MTU'yu ayarlamanın çözümün anahtarı olduğunu unutmayın.
İlgili ağ kartlarının rx / tx arabelleklerinin ayarlanması:
/usr/sbin/ethtool -G eth2 rx 2048 tx 2048
/usr/sbin/ethtool -G eth4 rx 2048 tx 2048
nuttcp
. Tekli bağlantıları veya çoklu bağlantıları kolayca test edin.
/proc/net/bonding/bond0
aslında içine ayarlamalar yapıyorum doğrulamak için denge-rr ? 4 arayüzlü bir bağ hakkında yapıştırdığınız belgelerin size yalnızca 2.3 arayüz verim verdiğini not ettiniz mi? Bu not göz önüne alındığında, istediğiniz 2000mb / s'ye yaklaşmanız pek olası görünmüyor.