Tại sao trái phiếu gigabit của tôi không cung cấp thông lượng ít nhất 150 MB / s?


17

Tôi đã kết nối trực tiếp hai bộ phân tần PowerEdge 6950 (sử dụng các đường thẳng) trên hai bộ điều hợp PCIe khác nhau.

Tôi nhận được một liên kết gigabit trên mỗi dòng này (1000 MBit, song công hoàn toàn, contol theo cả hai hướng).

Bây giờ tôi đang cố gắng liên kết các giao diện này thành bond0 bằng thuật toán rr ở cả hai bên (tôi muốn nhận 2000 MBit cho một phiên IP).

Khi tôi kiểm tra thông lượng bằng cách chuyển / dev / zero sang / dev / null bằng dd bs = 1M và netcat ở chế độ tcp, tôi nhận được thông lượng 70 MB / s - không - như mong đợi hơn 150MB / s.

Khi tôi sử dụng các dòng đơn, tôi nhận được khoảng 98 MB / s trên mỗi dòng, nếu tôi sử dụng một hướng khác nhau cho mỗi dòng. Khi tôi sử dụng các dòng đơn, tôi nhận được 70 MB / s và 90 MB / s trên dòng, nếu lưu lượng truy cập đi theo hướng "tương tự".

Sau khi đọc qua liên kết-readme (/usr/src/linux/Documentation/networking/boinating.txt), tôi thấy phần sau đây hữu ích: (Lựa chọn chế độ liên kết 13.1.1 MT cho cấu trúc liên kết chuyển mạch đơn)

cân bằng-rr: Chế độ này là chế độ duy nhất cho phép kết nối TCP / IP duy nhất để lưu lượng truy cập trên nhiều giao diện. Do đó, đây là chế độ duy nhất cho phép một luồng TCP / IP sử dụng thông lượng của nhiều giao diện. Tuy nhiên, điều này phải trả giá: việc phân chia thường dẫn đến việc các hệ thống ngang hàng nhận được các gói không theo thứ tự, khiến hệ thống kiểm soát tắc nghẽn của TCP / IP hoạt động, thường là do truyền lại các phân đoạn.

    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.

Bây giờ tôi đã thay đổi tham số đó trên cả hai máy chủ được kết nối trên tất cả các dòng (4) từ 3 thành 127.

Sau khi liên kết lại, tôi nhận được khoảng 100 MB / s nhưng vẫn không nhiều hơn thế.

Bất cứ ý tưởng tại sao?

Cập nhật: Chi tiết phần cứng từ 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

Cập nhật kết quả cuối cùng:

8589934592 byte (8,6 GB) được sao chép, 35.889 giây, 240 MB / s

Tôi đã thay đổi rất nhiều tùy chọn tcp / ip và trình điều khiển cấp thấp. Điều này bao gồm mở rộng bộ đệm mạng. Đây là lý do tại sao ddbây giờ hiển thị các số lớn hơn 200 MB / s: dd chấm dứt trong khi vẫn còn đầu ra đang chờ chuyển (trong bộ đệm gửi).

Cập nhật 2011-08-05: Cài đặt đã được thay đổi để đạt được mục tiêu ( /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

Cài đặt đặc biệt cho thiết bị liên kết (SLES: / etc / sysconfig / network / ifcfg-bond0 ):

MTU='9216'
LINK_OPTIONS='txqueuelen 10000'

Lưu ý rằng việc thiết lập MTU lớn nhất có thể là chìa khóa cho giải pháp.

Điều chỉnh bộ đệm rx / tx của các card mạng liên quan:

/usr/sbin/ethtool -G eth2 rx 2048 tx 2048
/usr/sbin/ethtool -G eth4 rx 2048 tx 2048

Bạn đã kiểm tra /proc/net/bonding/bond0để xác minh rằng bạn thực sự đang được thiết lập vào số dư-rr chưa? Bạn có thấy lưu ý n rằng tài liệu bạn đã dán về liên kết 4 giao diện chỉ cung cấp cho bạn 2,3 giao diện có giá trị thông lượng không? Với lưu ý đó, có vẻ như rất khó có khả năng bạn sẽ đạt được gần 2000mb / giây bạn muốn.
Zoredache

Tôi không chắc chắn rằng LACP / Bonding có thể phân chia một phiên TCP duy nhất trên nhiều liên kết vật lý.
Kedare

@Kedare, đây không phải là LACP, đây là mô-đun liên kết Linux sở hữu bộ lập lịch gói vòng tròn có thể sử dụng nhiều liên kết cho một phiên TCP.
larsks

1
Một cách tốt hơn để kiểm tra thông lượng trên một liên kết là sử dụng nuttcp. Kiểm tra các kết nối đơn hoặc nhiều kết nối dễ dàng.
MikeyB

Câu trả lời:


8

Tôi đã gặp một vấn đề tương tự khi cố gắng tăng tốc độ đồng bộ hóa drbd qua hai liên kết gigabit một thời gian trước đây. Cuối cùng, tôi đã đạt được tốc độ đồng bộ khoảng 150MB / giây. Đây là các cài đặt mà tôi đã áp dụng trên cả hai nút:

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

Bạn cũng có thể thử kích hoạt ngắt kết nối nếu bạn chưa có thẻ mạng (với ethtool --coalesce )


Tôi không biết. Nó không cần thiết trong trường hợp của tôi. Đặt các tham số đó là đủ. Nhưng tôi đoán nếu bạn đặt nó sẽ không đau. Tỷ lệ chuyển nhượng đã được cải thiện?
dùng842313

1
Tôi hiện không thể kiểm tra điều đó, nhưng nó sẽ thuận lợi nhất. Gợi ý của bạn về "sự hợp nhất" có thể chạm mốc. Tôi tìm thấy một bài viết thú vị (bằng tiếng Đức) về cài đặt "Ethernet tốc độ cao". Các khung khổng lồ đi theo cùng một hướng - tất cả là về việc giảm số lượng ngắt pci cần thiết để chuyển khối lượng công việc.
Nils

Nếu bạn đang suy nghĩ về một số tắc nghẽn hw như giới hạn ngắt, một công cụ như colld chắc chắn sẽ có ích, mặc dù nó sẽ yêu cầu một chút thiết lập. Xem, ví dụ, biểu đồ này
user842313

0

Bạn đã cấu hình thân cây hai chiều này trên công tắc chưa? nếu không thì nó sẽ không hoạt động như vậy, nó sẽ chỉ hoạt động ở chế độ chủ động / thụ động và chỉ sử dụng 1 trong các liên kết 1Gbps.


Không có thiết bị mạng liên quan. Đây là những cáp chéo trực tiếp.
Nils

5
Ah, vậy là bạn đã hết may mắn vì một lý do hoàn toàn khác rồi; Các trung kế LACP / Etherchannel như thế này dựa vào phương sai trong bit thứ nhất (và nơi thích hợp thứ hai và thứ ba) của MAC đích để xác định thành viên trung kế nào được sử dụng để giao tiếp với MAC đó. Do bạn sẽ chỉ có một MAC cho trung kế ở mỗi đầu, họ sẽ không bao giờ sử dụng nhiều hơn một liên kết.
Chopper3

2
anh ta không sử dụng etherchannel / 802.3ad, anh ta đang sử dụng thăng bằng, chính xác, thậm chí không yêu cầu bất kỳ hỗ trợ chuyển đổi nào.
the-wợi

@ Chopper3: Vì vậy, vấn đề MAC không nên xuất hiện trong RR theo ý kiến ​​của bạn?
Nils

2
Đừng biết rằng đủ để bình luận, mong muốn bạn đã đề cập đến những thứ đó sớm hơn nhưng đừng bận tâm.
Chopper3

0

Có vẻ như PowerEdge 6950 bị giới hạn ở các khe cắm PCI có thể đạt tới 133 MB / giây được chia sẻ trên toàn bộ xe buýt. Bạn có thể thấy các giới hạn I / O trên chính kiến ​​trúc bus hệ thống.

Ngoài việc có các hệ thống khác với các kiến ​​trúc phần cứng và I / O khác nhau để thử nghiệm, hệ thống cáp cũng có thể đi vào hoạt động. Một số kết hợp có thể có thể dọc theo các xếp hạng khác nhau (5e so với 6) cũng như độ dài (ngắn hơn không phải lúc nào cũng tốt hơn).


Tôi đã có 160 MB / s - sử dụng các dòng đơn đồng thời. Nhưng điều này giảm xuống 100 MB / s khi liên kết. Trên mỗi dòng đơn, tôi nhận được gần 100 MB / s nên các dây cáp dường như cũng không phải là vấn đề.
Nils

Dường như không có bất kỳ hỗ trợ PCIe nào cho PowerEdge 6950. Bất cứ điều gì "khác biệt" với bus PCI của nó? Mặc dù vậy, bạn có thể tra cứu thông số kỹ thuật của xe buýt IO cho PowerEdge 6950.
user48838

Tôi đã cập nhật câu hỏi với đầu ra của lspci. Đây không phải là nút cổ chai. Tôi nhận được 200 MB / s của tôi bây giờ.
Nils

0

Khung jumbo?

ifconfig <interface> mtu 9000

Điều này sẽ giảm tải CPU phải không? Tôi tự hỏi CPU đang làm gì trong các thử nghiệm này.
SpacemanSpiff

1
với MTU là 9000 thay vì 1500, bạn giảm số lượng gói dữ liệu tcp mà bạn cần chuyển cùng một lượng dữ liệu (tải trọng lớn hơn). Vì vậy, bạn thực hiện xử lý gói ít hơn, trên cả hai mặt và cả hai cách, và gửi thêm dữ liệu.
Julien Vehent

Điều này có vẻ như nó đáng để thử. Các CPU khá nhàn rỗi trong quá trình chuyển. Nhưng tôi vẫn có cảm giác rằng một liên kết vật lý đang chờ ACK trước khi kernel gửi gói tiếp theo trên liên kết vật lý khác.
Nils

Tôi tò mò về kết quả quá. Ngoài ra, hãy cố gắng liên kết từng NIC với lõi CPU. Một hạt nhân gần đây sẽ xử lý đúng cách, nhưng tôi không chắc nó sẽ hoạt động như thế nào với liên kết. Ý tưởng là để tránh chuyển đổi từ bộ đệm l2 sang bộ đệm khác cho mỗi gói.
Julien Vehent

Tải CPU không phải là vấn đề. Tất cả các tùy chọn giảm tải được bật ...
Nils

0

thực hiện các khung hình khổng lồ là một trợ giúp khổng lồ, miễn là công tắc của bạn và nic hỗ trợ nó. nếu bạn có một siwtch không được quản lý, rất có thể bạn sẽ không nhận được bất cứ nơi nào bạn muốn cho băng thông, nhưng đó không phải là trường hợp nếu bạn liên kết các cổng với nhau trên công tắc. Đây là một cái gì đó tôi đã học được từ lâu, 65% thời gian, đó là một vấn đề vật lý. bạn đang sử dụng cáp cat6?


0

nếu bạn đã cấu hình các khung jumbo trên các bức ảnh của mình, qua giao diện của nó, bạn chắc chắn rằng bạn đã cấu hình các công tắc của mình để hỗ trợ MTU cao.

Khung Jumbo là một hiệu suất tuyệt vời trên các mạng gigabit nhưng bạn cần đảm bảo rằng bạn đã cấu hình chúng từ đầu đến cuối (cả máy chủ nguồn và máy chủ đích và bộ chuyển mạch mạng mà chúng sử dụng).


Không có thiết bị mạng liên quan đến trường hợp đặc biệt này. (đường chéo trực tiếp). Đây cũng là trường hợp duy nhất (thực) mà bạn có thể sử dụng thuật toán RR để tải được chia sẻ trên tất cả các dòng cho một phiên.
Nils
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.