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 dd
bâ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
nuttcp
. Kiểm tra các kết nối đơn hoặc nhiều kết nối dễ dàng.
/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.