Ngày tốt,
Tôi gặp trường hợp sau: 4 luồng dữ liệu TCP từ máy này sang máy khác. Mỗi luồng có Cổng TCP đích riêng. 4 luồng có mức độ ưu tiên khác nhau: cao, trung bình, thấp, số lượng lớn. Cao, trung bình, thấp tạo ra 1,67Mbit/s và số lượng lớn tạo ra 10Mbit/s. (iperf3 được sử dụng để tạo lưu lượng truy cập). Các gói của mỗi luồng được đánh dấu bằng dấu DiffServ thích hợp (DSCP) và dấu này được sử dụng để phân loại lưu lượng trong HTB qdisc.
Ghi bàn: HTB qdisc phải được định cấu hình theo cách sao cho bất cứ lúc nào luồng ưu tiên cao đều nhận được yêu cầu 1,67Mbit/s, ưu tiên trung bình cũng được đảm bảo 1,67Mbit/s nhưng với ưu tiên thấp hơn một chút và phần còn lại của lưu lượng phải được đảm bảo 50kbit/ S. Mỗi luồng phải có khả năng sử dụng toàn bộ liên kết nếu nó không hoạt động và luồng tạo ra nhiều băng thông hơn so với chỉ định ban đầu.
Tạo lưu lượng truy cập:
Ưu tiên cao:
iperf3 -c 192.168.88.254 -p 5150 -t 62 -b 1.67M -l 128 -S 224
Ưu tiên trung bình:
iperf3 -c 192.168.88.254 -p 5160 -t 62 -b 1.67M -l 4K -S 160
Ưu tiên thấp:
iperf3 -c 192.168.88.254 -p 5170 -t 62 -b 1.67M -l 4K -S 96
số lượng lớn:
iperf3 -c 192.168.88.254 -p 5180 -t 62 -b 10M -l 4K -S 0
Cấu hình HTB qdisc
NI="eth2"
AC="sudo /sbin/tc lớp thêm nhà phát triển"
# Xóa qdiscs trước đó
Sudo /sbin/tc qdisc del dev $NI root
# Thêm HTB với quyền root với lớp 40 mặc định cho lưu lượng truy cập chưa được phân loại
sudo /sbin/tc qdisc add dev $NI xử lý gốc 1: htb mặc định 40
sudo /sbin/tc class add dev $NI parent 1: classid 1:1 tốc độ htb 3,5mbit ceil 1000mbit
# luồng ưu tiên cao DSCP 224 - 1110 0000 - 0xE0
$AC $NI cha 1:1 classid 1:10 tỷ lệ htb 1,7mbit ceil 1000mbit trước 1
# luồng ưu tiên trung bình
$AC $NI cha 1:1 classid 1:20 tỷ lệ htb 1,7mbit ceil 1000mbit trước 2
# luồng ưu tiên thấp
$AC $NI cha 1:1 classid 1:30 tốc độ htb 50kbit ceil 1000mbit trước 3
# luồng số lượng lớn
$AC $NI cha 1:1 classid 1:40 tốc độ htb 50kbit ceil 1000mbit ưu tiên 4
# Thêm bộ lọc để phân loại các gói dựa trên dấu dscp
# ưu tiên cao DSCP 224 - 1110 0000 - 0xE0
sudo /sbin/tc filter add dev $NI giao thức ip cha mẹ 1: ưu tiên 1 u32 khớp với ip tos 0xE0 0xff flowid 1:10
# ưu tiên trung bình DSCP 160 - 1010 0000 - 0xA0
sudo /sbin/tc filter add dev $NI giao thức ip cha mẹ 1: ưu tiên 2 u32 khớp với ip tos 0xA0 0xff flowid 1:20
# ưu tiên thấp DSCP 96 - 1100 0000 - 0x60
sudo /sbin/tc filter add dev $NI giao thức ip cha mẹ 1: ưu tiên 3 u32 khớp với ip tos 0x60 0xff flowid 1:30
# số lượng lớn DSCP 0 - 0000 0000 - 0x00
sudo /sbin/tc filter add dev $NI giao thức ip cha mẹ 1: ưu tiên 4 u32 khớp với ip tos 0x00 0xff flowid 1:40
Lưu lượng truy cập được phân loại chính xác. Tôi có thể thấy các bộ đếm có liên quan trong số liệu thống kê lớp tc đang tăng lên. Tôi đã kiểm tra lại điều này nhiều lần.
Vấn đề:
Cấu hình này phân bổ chính xác băng thông cho các luồng ưu tiên cao và trung bình. Ưu tiên thấp và số lượng lớn cũng nhận được 50kbit của họ. Tuy nhiên, Tôi không thể đẩy liên kết nhiều hơn giá trị được chỉ định trong thư mục gốc lớp1:1 như tỷ lệ tức là 3,5mbit.
Trong mọi bài báo và sách hướng dẫn về HTB mà tôi đọc đều có nêu thông số "tỷ lệ" là tỷ lệ được đảm bảo tối thiểu đối với hạng và "trần" là số tiền tối đa mà nó có thể nhận được. Trong trường hợp của tôi, có vẻ như "tỷ lệ" giới hạn liên kết ở giá trị được chỉ định. Đây chắc chắn không phải là hành vi mong muốn và dự kiến.
Nếu tôi đặt tham số "tốc độ" của lớp gốc thành cùng giá trị với "trần", tức là 1000mbit, thì không có ưu tiên nào diễn ra và băng thông khả dụng được chia đều cho tất cả các luồng. Đây không phải là hành vi mong muốn vì trong trường hợp băng thông khả dụng dao động, lưu lượng ưu tiên sẽ nhận được ít hơn 1,67Mbit/s
Tôi đã hiểu sai ý nghĩa của tham số "tỷ lệ" trong lớp gốc phải không? Vấn đề này bằng cách nào đó có liên quan đến các tham số HTB khác như "lượng tử" không? Tôi cũng quan sát thấy rằng mọi lớp đều có số lượng mã thông báo âm trong quá trình truyền dữ liệu. Điều này có tệ không? Nếu vậy, những thông số tôi nên điều chỉnh và làm thế nào?
Cảm ơn bạn trước!