ibtop: kiểm tra InfiniBand theo adapter/port để khỏi đoán mò lúc job chậm
ibtop: kiểm tra InfiniBand theo adapter/port để khỏi đoán mò lúc job chậm
Nguyễn Đức Tài — 15/01/2026 — 17:30
Có những ca job chạy chậm mà khó nhất là không biết bắt đầu từ đâu. Dashboard thì vẫn xanh, GPU vẫn có util, ai cũng đoán: người nghi NCCL, người nghi storage, người nghi data pipeline, còn mạng thì “có vẻ vẫn ổn” vì port vẫn ACTIVE và link vẫn báo rate cao.
Mình dùng ibtop cho đúng tình huống đó. Đây là tool dạng bảng chạy ngay trong terminal, đọc từ sysfs và show theo từng adapter/port theo thời gian thực. Nó không thay monitoring hay phân tích fabric, nhưng giúp mình trả lời rất nhanh: rail nào đang gánh traffic, rail nào đang đứng im, node này có lệch so với các node khác không.

Ibtop là gì và vì sao mình quan tâm
ibtop là một tool dạng bảng trong terminal để theo dõi InfiniBand theo thời gian thực. Nó đọc trực tiếp từ sysfs của Linux và hiển thị theo từng adapter, từng port. Cái khác bọt của nó nằm ở cách trình bày và mục đích sử dụng.
ibtop không thay monitoring stack, không thay công cụ phân tích fabric. Nó chỉ làm một việc rất cụ thể: cho mình nhìn tình trạng InfiniBand theo thời gian thực ngay trên node đang chạy.
Những điểm chính khiến mình để ý tới ibtop:
- Hiển thị theo từng adapter và port, không gom thành một con số tổng
- Thấy ngay port nào
ACTIVEhayDOWN, link nào đang chạy rate thấp - Thấy được traffic có đang phân bổ đều giữa các rail hay không?
- Chạy trực tiếp trên node, không cần exporter hay dashboard
- Có JSON output để chụp snapshot hoặc đưa vào workflow tự động
Nói ngắn gọn, đây là công cụ dành cho lúc bạn SSH vào node và cần câu trả lời trong vài phút đầu, chứ không phải để theo dõi dài hạn.
Sử dụng ibtop trong một ca nghi InfiniBand như thế nào?
Mình SSH vào một node đang chạy worker. Việc đầu tiên là kiểm tra xem node này có InfiniBand không:
ls /sys/class/infiniband/
Output mình thấy:
mlx5_0 mlx5_1 mlx5_2 mlx5_3 mlx5_4 mlx5_5 mlx5_6 mlx5_7
Thấy danh sách adapter là mình yên tâm. Nếu bước này trống trơn thì mình dừng luôn, vì node đó không có IB hoặc driver không expose sysfs.
Cài ibtop nhanh
Bước cài đặt này mình hay dùng là tải binary và bỏ vào PATH:
wget https://github.com/JannikSt/ibtop/releases/latest/download/ibtop-linux-amd64
chmod +x ibtop-linux-amd64
sudo mv ibtop-linux-amd64 /usr/local/bin/ibtop
Xong là có lệnh ibtop để dùng ngay.
Mở ibtop và đọc màn hình theo thói quen
Mình chạy:
ibtop
ibtop mở ra một bảng cập nhật liên tục. Mình không đọc từng con số, mà nhìn để tìm lệch. Trên node bình thường, màn hình sẽ trông như thế này:
Port State Rate RX Data TX Data RX Rate TX Rate--
Adapter: mlx5_0
1 ACTIVE 400 Gb/sec 350.4GB 361.2GB 13.7GB/s 14.6GB/s
Adapter: mlx5_1
1 ACTIVE 400 Gb/sec 303.2GB 304.4GB 11.5GB/s 14.8GB/s
Adapter: mlx5_2
1 ACTIVE 400 Gb/sec 303.3GB 305.9GB 13.0GB/s 12.8GB/s
Nếu trên vài node trong cùng job mà ibtop đều trông bình thường như vậy, mình thường tạm gác nghi vấn về mạng và chuyển sang soi app, storage hoặc data pipeline.
Nhưng ca hôm đó thì không như vậy.
Lúc này ibtop mới thật sự hữu ích
Ở node đầu tiên, mình nhìn thấy một rail gần như không gánh traffic, dù port vẫn ACTIVE và link vẫn báo 400 Gb/sec.
Port State Rate RX Data TX Data RX Rate TX Rate--
Adapter: mlx5_0
1 ACTIVE 400 Gb/sec 410.2GB 398.7GB 14.1GB/s 13.8GB/s
Adapter: mlx5_1
1 ACTIVE 400 Gb/sec 405.4GB 392.1GB 13.9GB/s 14.0GB/s
Adapter: mlx5_2
1 ACTIVE 400 Gb/sec 408.8GB 399.7GB 0.2GB/s 0.1GB/s
Hai rail đầu vẫn chạy đều ~14 GB/s, nhưng rail mlx5_2 thì gần như đứng im (0.1–0.2 GB/s). Đến đoạn này thì không còn đoán mò nữa: job đang chạy mà một rail gần như không nhúc nhích là tín hiệu quá rõ.
Cái hay của ibtop ở đây là nó cho mình cho mình một dấu hiệu cụ thể để lần theo, thay vì chỉ đoán già đoán non.
So sánh thêm node khác để tránh kết luận vội
Mình SSH sang node thứ hai trong cùng job và chạy lại ibtop. Lần này thì mọi thứ trông hoàn toàn bình thường:
Port State Rate RX Data TX Data RX Rate TX Rate--
Adapter: mlx5_0
1 ACTIVE 400 Gb/sec 351.0GB 360.8GB 13.4GB/s 14.2GB/s
Adapter: mlx5_1
1 ACTIVE 400 Gb/sec 303.6GB 305.1GB 12.9GB/s 13.8GB/s
Adapter: mlx5_2
1 ACTIVE 400 Gb/sec 304.2GB 306.0GB 13.1GB/s 13.5GB/s
Đặt cạnh node đầu tiên là thấy khác ngay, và mình cũng bớt nghi mạng cả cụm hẳn. Nếu fabric có vấn đề diện rộng thì kiểu gì nhiều node cũng sẽ có dấu hiệu lạ giống nhau. Ở đây node thứ hai vẫn ổn, nên khả năng cao là node đầu tiên đang bị lệch rail, hoặc cấu hình per-node của nó có gì đó không khớp với phần còn lại.
Từ đây mình quay sang kiểm tra binding, topology,… hoặc nếu cần gấp thì loại node đó không cho job chạy trên node đó để job còn chạy được.
Khi cần gửi dữ liệu cho người khác
Có lúc mình cần snapshot máy đọc được để gửi ticket. ibtop có JSON output:
ibtop --json
Mình thường lấy snapshot đó rồi diễn giải lại thành dạng dễ đọc như này:
hostname: gpu-node-07
adapters:
- name: mlx5_0
ports:
- port: 1
state: ACTIVE
rate: 400 Gb/sec
rx_rate: 14.1 GB/s
tx_rate: 13.8 GB/s
- name: mlx5_2
ports:
- port: 1
state: ACTIVE
rate: 400 Gb/sec
rx_rate: 0.2 GB/s
tx_rate: 0.1 GB/s
Gửi kiểu này thì người nhận nhìn phát hiểu ngay node nào, rail nào, vấn đề nằm ở đâu.
Kết luận
ibtop giúp mình khoanh vùng rất nhanh: nhìn vài node là biết mạng cả cụm có vấn đề hay chỉ một node bị lệch rail. Khi thấy một rail gần như đứng im dù vẫn ACTIVE, mình có manh mối rõ ràng để điều tra đúng adapter/port. Và nếu cần gửi ticket, ibtop --json cho snapshot gọn, người nhận nhìn là hiểu ngay.
Tags: Ibtop, InfiniBand, Linux