Gigabit bağım neden en az 150 MB / s veri üretmiyor?


17

İ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 ddartı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

Eğer kontrol ettiniz /proc/net/bonding/bond0aslı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.
Zoredache

LACP / Bonding'in tek bir TCP oturumunu birden çok fiziksel bağlantıya bölebileceğinden emin değilim.
Kedare

@Kedare, bu LACP değil, bu tek bir TCP oturumu için birden fazla bağlantı kullanabilen kendi yuvarlak robin paket zamanlayıcı Linux bağlanma modülleridir.
larsks

1
Bir bağlantıdaki verimi test etmenin daha iyi bir yolu kullanmaktır nuttcp. Tekli bağlantıları veya çoklu bağlantıları kolayca test edin.
MikeyB

Yanıtlar:


8

Bir süre önce iki gigabit bağlantı üzerinden bir drbd senkronizasyon hızını artırmaya çalışırken benzer bir sorun vardı. Sonunda yaklaşık 150MB / sn senkronizasyon hızı elde etmeyi başardım. Her iki düğümde de uyguladığım ayarlar şunlardı:

ifconfig bond0 mtu 9000
ifconfig bond0 txqueuelen 10000
echo 3000 > /proc/sys/net/core/netdev_max_backlog

Ağ kartlarınız için henüz yoksa kesme birleşimini etkinleştirmeyi de deneyebilirsiniz ( ethtool --coalesce ile )


Bilmiyorum. Benim durumumda buna gerek yoktu. Bu parametreleri ayarlamak yeterliydi. Ama sanırım onu ​​ayarlarsan acıtmaz. Aktarım hızı iyileşti mi?
user842313 15:11

1
Şu anda bunu test edemiyorum, ama en uygun şekilde olacak. "Birleşme" konusundaki ipucunuz işarete çarpıyor. "Yüksek Hızlı Ethernet" ayarları hakkında ilginç bir makale (Almanca) buldum. Jumbo çerçeveler aynı yöne gider - tamamen iş yükünü aktarmak için gereken pci-kesme sayısını azaltmakla ilgilidir.
Nils

Kesmeler sınırı gibi bazı hw darboğazını düşünüyorsanız, biraz kurulum gerektirse de, koleksiyon gibi bir araç kesinlikle yardımcı olacaktır. Örneğin, bu grafiğe bakın
user842313 15:07

0

Bu iki yönlü bagajı anahtarda yapılandırdınız mı? değilse, bu şekilde çalışmaz, sadece aktif / pasif modda çalışır ve sadece 1Gbps bağlantılarından birini kullanır.


İlgili bir ağ cihazı yok. Bunlar doğrudan çapraz kablolardır.
Nils

5
Ah, o zaman tamamen farklı bir nedenden ötürü şansın kalmadı Bunun gibi LACP / Eterchannel gövdeleri, hedef MAC'in ilk (ve uygun olduğunda ikinci ve üçüncü) en az anlamlı bitindeki varyansa dayanır ve bu gövde ile hangi gövde elemanının iletişim kurmak için kullanıldığını tanımlar. Her iki uçta bagaj için sadece bir MAC'iniz olduğu göz önüne alındığında, asla birden fazla bağlantı kullanmazlar.
Chopper3

2
eterchannel / 802.3ad kullanmıyor, tam olarak herhangi bir anahtar desteği gerektirmeyen balance-rr kullanıyor.
the-wabbit

@ Chopper3: Yani MAC sorunu RR'de sizce görünmemeli mi?
Nils

2
Yorum yapmak için yeterince iyi bilmiyorum, bu şeylerden daha önce bahsetmiş olmanızı diliyorsunuz ama boş verin.
Chopper3

0

Görünüşe göre PowerEdge 6950, tüm veri yolu boyunca paylaşılan 133 MB / sn'de çıkabilen muhtemelen PCI yuvalarıyla sınırlı. Sistem veri yolu mimarisinin kendisinde G / Ç sınırlamaları görüyor olabilirsiniz.

Test etmek için farklı donanıma ve G / Ç mimarisine sahip başka sistemlere sahip olmanın dışında, kablolar da devreye girebilir. Bazı olası kombinasyonlar, farklı derecelerde (5e ve 6) ve uzunlukların (daha kısa olan her zaman daha iyi değildir) boyunca olabilir.


Eşzamanlı tek satırları kullanarak 160 MB / sn zaten var. Ancak bu, yapıştırma üzerine 100 MB / s'ye düşer. Her satırda yaklaşık 100 MB / sn alırım, böylece kablolar da sorun gibi görünmüyor.
Nils

PowerEdge 6950 için PCIe desteği yok gibi görünüyor. PCI veri yolu ile "farklı" bir şey var mı? Buna rağmen, PowerEdge 6950 için IO veri yolu özelliklerine bakabilirsiniz.
user48838

Soruyu lspci çıktısıyla güncelledim. Bu darboğaz değildi. 200 MB / sn'mi şimdi alıyorum.
Nils

0

Jumbo çerçeveler?

ifconfig <interface> mtu 9000

Bu CPU yükünü azaltmalı doğru mu? Bu testler sırasında CPU'nun ne yaptığını merak ediyorum.
SpacemanSpiff

1
1500 yerine 9000 MTU ile, aynı miktarda veri aktarmanız gereken tcp veri paketlerinin sayısını azaltırsınız (yük daha büyüktür). Böylece, her iki tarafta ve her iki yönde daha az paket işleme yaparsınız ve daha fazla veri gönderirsiniz.
Julien Vehent

Bu denemeye değer gibi görünüyor. İşlemciler aktarım sırasında oldukça boşta. Ama yine de, çekirdek diğer fiziksel bağlantıdaki bir sonraki paketi göndermeden önce bir fiziksel bağlantının bir ACK'yi beklediğini hissediyorum.
Nils

Ben de sonucu merak ediyorum. Ayrıca, her NIC'yi bir CPU çekirdeğine bağlamayı deneyin. Yakın tarihli bir çekirdek bunu düzgün bir şekilde ele almalıdır, ancak bağ ile nasıl çalışacağından emin değilim. Fikir, her paket için bir l2 önbellekten diğerine geçiş yapmaktan kaçınmaktır.
Julien Vehent

CPU yükü sorun değil. Tüm boşaltma seçenekleri açık ...
Nils

0

jumbo çerçeveler yapmak, anahtarınız ve nic'in desteklediği sürece devasa bir yardımcıdır. yönetilmeyen bir siwtch'iniz varsa, büyük olasılıkla bant genişliği için istediğiniz herhangi bir yere gitmeyeceksiniz, ancak bağlantı noktalarını anahtarda birbirine bağlarsanız durum böyle değildir. işte uzun zaman önce öğrendiğim bir şeydi,% 65'i fiziksel bir mesele. cat6 kablosu mu kullanıyorsunuz?


0

Nics'inizde jumbo çerçeveleri yapılandırdıysanız, görünümünüzde anahtarlarınızı yüksek MTU'yu da destekleyecek şekilde yapılandırdığınızdan emin olun.

Jumbo çerçeveleri gigabit ağlarında mükemmel bir performanstır, ancak bunları uçtan uca yapılandırdığınızdan emin olmanız gerekir (hem kaynak hem de hedef sunucular ve kullandıkları ağ anahtarları).


Bu özel durumda hiçbir ağ cihazı yoktur. (doğrudan çapraz çizgiler). Bu aynı zamanda, tek bir oturum için yükün tüm satırlarda paylaşılmasını sağlamak için RR algoritmasını kullanabileceğiniz tek (gerçek) durumdur.
Nils
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.