5 điểm bởi GN⁺ 2024-07-29 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Stack mạng Linux

Nhận gói mạng trong Linux

  • Trên thiết bị mạng, NIC (Network Interface Card) sẽ phát sinh IRQ (Interrupt Request) để báo rằng một gói tin đã đến
  • Trình xử lý IRQ chạy với mức ưu tiên rất cao và chặn việc tạo thêm IRQ
  • Hệ thống softIRQ được dùng để xử lý công việc bên ngoài ngữ cảnh IRQ của trình điều khiển thiết bị
  • Kernel thread softIRQ được tạo ra, và cấu trúc softnet_data được tạo
  • NIC sử dụng DMA (Direct Memory Access) để ghi dữ liệu mạng vào ring buffer trong RAM
  • Vòng lặp polling softIRQ của NAPI được khởi động
  • Vòng lặp net_rx_action kiểm tra cấu trúc NAPI và chuyển gói tin tới napi_gro_receive
  • Gói tin được chuyển tới stack giao thức thông qua netif_receive_skb

Truyền mạng trong kernel Linux

  • Khi ứng dụng gửi một thông điệp, TCP header được tạo và trình xử lý L3 được gọi
  • Gói tin được phân mảnh và hàm truyền L2 được gọi
  • Trình điều khiển đưa gói tin vào hàng đợi trong ring buffer tx
  • NIC lấy gói tin từ RAM và truyền đi
  • Khi quá trình truyền hoàn tất, NIC phát sinh hard IRQ
  • Trình điều khiển xử lý IRQ này và lên lịch hệ thống polling NAPI

Tinh chỉnh hiệu năng mạng

HOWTO nhanh

/proc/net/softnet_stat & /proc/net/sockstat
  • Tệp /proc/net/softnet_stat cung cấp thống kê cho từng lõi CPU
  • Tệp /proc/net/sockstat cung cấp thống kê về mức sử dụng socket
ss
  • ss là tiện ích để kiểm tra thống kê socket, có thể dùng để xem mức sử dụng bộ nhớ
netstat
  • netstat là tiện ích dòng lệnh cung cấp thống kê về kết nối mạng và stack giao thức
sysctl
  • Có thể dùng lệnh sysctl để thay đổi các thiết lập hệ thống/mạng
  • Có thể chỉnh sửa tệp /etc/sysctl.conf để thay đổi giá trị một cách vĩnh viễn

Ring buffer của NIC

  • Ring buffer của NIC là bộ đệm FIFO có kích thước cố định, nằm trong RAM
  • Cần tăng hàng đợi này để hấp thụ mượt mà các kết nối dạng burst

Tóm tắt của GN⁺

  • Hướng dẫn này giải thích chi tiết cách stack mạng Linux hoạt động và đưa ra nhiều phương pháp để tối ưu hiệu năng mạng
  • Điều quan trọng là phải hiểu vai trò của IRQ và softIRQ trong quá trình nhận và truyền gói mạng
  • Có thể cải thiện hiệu năng bằng cách điều chỉnh cấu hình hệ thống với lệnh sysctl và thay đổi kích thước ring buffer của NIC
  • Việc tinh chỉnh hiệu năng mạng có thể thay đổi tùy theo yêu cầu cụ thể của hệ thống, và cần thử nghiệm nhiều thiết lập khác nhau

Chưa có bình luận nào.

Chưa có bình luận nào.