Ethernet không mất gói cho lưu trữ: DCB, PFC, ECN
Ethernet rớt khung khi bị nghẽn; các giao thức lưu trữ được xây dựng cho Fibre Channel hoặc RDMA lại giả định rằng không có gì từng bị rớt. Data Center Bridging (DCB) thu hẹp khoảng cách đó bằng điều khiển luồng và cấp phát băng thông theo từng mức priority, còn RoCE bổ sung thêm tín hiệu báo nghẽn ở trên. Kết quả chỉ “không mất gói” ở mức của liên kết tệ nhất trong đó: một thiết bị quang cận biên làm rớt một khung trên một triệu khung đã là một sự cố lưu trữ. Trang này giải thích các cơ chế đó và chuyển chúng thành các yêu cầu ở lớp vật lý.
Bộ công cụ DCB
| Tiêu chuẩn | Tên | Chức năng |
|---|---|---|
| IEEE 802.1Qbb | PFC — điều khiển luồng dựa trên priority | khung pause theo từng lớp lưu lượng (0–7): một bộ thu bị nghẽn dừng một lớp mà không dừng cả cổng |
| IEEE 802.1Qaz | ETS — lựa chọn truyền dẫn nâng cao | phần băng thông đảm bảo theo từng lớp (ví dụ 50 % lưu trữ, 50 % LAN) |
| IEEE 802.1Qaz | DCBX — trao đổi DCB | thỏa thuận cài đặt PFC/ETS giữa switch và NIC, dựa trên LLDP |
| IEEE 802.1Qau | CN — thông báo nghẽn | hiếm khi triển khai |
| RFC 3168 + DCQCN | đánh dấu ECN + điều khiển tốc độ | switch đánh dấu gói tin khi hàng đợi bắt đầu đầy lên; NIC RoCE giảm tốc độ luồng trước khi cần đến PFC |
Cách RoCE giữ được tính không mất gói
- Lưu lượng lưu trữ/RDMA được gắn thẻ bằng một priority riêng (thường là 3 hoặc 4) qua DSCP hoặc 802.1p.
- PFC chỉ được bật cho priority đó trên mọi cổng dọc theo đường đi, với headroom buffer được tính theo tốc độ liên kết và chiều dài cáp (số byte đang trên đường truyền).
- Ngưỡng ECN đánh dấu gói tin sớm; NIC chạy DCQCN để giảm tốc độ, nên PFC chỉ kích hoạt như phương án cuối cùng.
- ETS đảm bảo băng thông cho lớp lưu trữ ngay cả khi có tải LAN.
- DCBX giữ cho cài đặt của NIC và switch luôn khớp nhau; nếu lệch nhau, tính không mất gói sẽ bị phá vỡ một cách âm thầm.
FC và InfiniBand đạt được điều tương tự bằng credit trên mọi liên kết theo mặc định; Ethernet cần phải cấu hình, xác minh và giám sát tính năng này (Giao thức FC cơ bản, Giao vận InfiniBand).
Những gì có thể sai
| Vấn đề | Ảnh hưởng | Cách phát hiện |
|---|---|---|
| PFC không được bật trên một hop / sai priority | rớt gói khi có tải; RDMA phải truyền lại; độ trễ tăng vọt | bộ đếm pause bằng 0 ở nơi lẽ ra không được bằng 0; rớt gói trên lớp đó |
| PFC storm | một bộ thu bị kẹt pause ngược dòng vô thời hạn; nghẽn lan ra khắp fabric | khung pause tràn ngập; bộ đếm watchdog |
| PFC deadlock | phụ thuộc buffer theo vòng trong các fabric dạng Clos; toàn bộ lưu lượng trên lớp đó dừng lại | cần phát hiện deadlock / watchdog để phá vỡ |
| Headroom quá nhỏ cho cáp/quang học dài | vẫn rớt gói dù đã có PFC | rớt gói trong khi bộ đếm pause vẫn đang hoạt động |
| Ngưỡng ECN sai | quá sớm: mất thông lượng; quá muộn: PFC tràn ngập | bộ đếm đánh dấu ECN, bộ đếm CNP trên NIC |
| Lỗi vật lý trên liên kết (CRC, FEC không sửa được) | khung bị mất mà không cơ chế điều khiển luồng nào cứu được | bộ đếm lỗi cổng, bộ đếm FEC — Chỉ số VDM & FEC |
iSCSI không dùng DCB
iSCSI chạy trên TCP và vẫn sống sót qua mất gói, nhưng phải trả giá bằng độ trễ và truyền lại. Thực hành tốt nhất, bất kể có DCB hay không:
- VLAN/subnet riêng cho từng fabric, hai fabric, MPIO trên host;
- khung jumbo (MTU 9000) từ đầu đến cuối;
- không oversubscription giữa initiator và target; uplink 25G/100G có dung lượng phù hợp với mảng lưu trữ;
- bật FEC cho mọi liên kết 25G trở lên; bộ đếm CRC bằng 0;
- có thể bật thêm PFC cho lớp iSCSI để làm mượt các micro-burst (nhiều mảng lưu trữ khuyến nghị việc này).
Yêu cầu ở lớp vật lý
| Yêu cầu | Vì sao | Thực hành |
|---|---|---|
| Bật FEC và khớp nhau trên mọi liên kết 25G trở lên | RoCE không chịu được BER thô của các làn 25G/50G không được bảo vệ | FEC & link training |
| CRC và FEC không sửa được = 0 | mỗi khung bị mất làm nghẽn một hàng đợi | cảnh báo ngay khi có bất kỳ lần tăng nào |
| Công suất Rx nằm trong khoảng cho phép, có dự trữ | quang học cận biên tạo ra từng đợt lỗi khi nhiệt độ thay đổi | Công suất Rx & quỹ công suất tuyến |
| Tốc độ/duplex/AN nhất quán | DAC cần AN + link training ở cả hai đầu | Đồng & DAC |
| Chiều dài cáp nằm trong giả định của headroom | headroom được tính từ số byte đang trên đường truyền | ưu tiên DAC trong tủ rack, SR/AOC trong hàng, DR/LR giữa các phòng |
| Thông tin nhận dạng được NIC và switch chấp nhận | quang học bị từ chối sẽ rơi về trạng thái không lên liên kết hoặc giảm tốc độ | Khóa nhà sản xuất |
Danh sách kiểm tra giám sát
- Theo từng cổng: khung pause gửi/nhận theo từng priority, đánh dấu ECN, rớt gói theo từng lớp, CRC, FEC đã sửa/không sửa được, số lần liên kết chập chờn.
- Theo từng NIC: CNP gửi/nhận, số lần truyền lại, gói sai thứ tự, timeout.
- Theo từng thiết bị quang: xu hướng công suất Rx/Tx và nhiệt độ (Giám sát).
- Đối chiếu các đợt tăng vọt độ trễ đuôi (tail latency) của lưu trữ với những điều trên — lớp vật lý là thủ phạm thường xuyên hơn so với mảng lưu trữ.
Trong CodingBox
Một fabric không mất gói được xây dựng từ những thiết bị quang bình thường, chỉ là được giữ theo một tiêu chuẩn cao hơn. Kiểm tra đầu vào trên bàn thử — thông tin nhận dạng, checksum, DDM trực tiếp đối chiếu với giá trị điển hình, lưu lại giá trị tham chiếu — là cách giữ các module cận biên ra khỏi một fabric nơi chỉ một liên kết xấu cũng khiến một ứng dụng mất SLA về độ trễ (Check transceiver, DDM).
PFC và ECN nằm ở đâu trong các cơ chế chuyển tiếp khác, và lỗi ở lớp vật lý biểu hiện ra sao trong đó: Nguyên lý chuyển tiếp.