Điểm:2

Cách đảm bảo thông lượng từ thiết bị mạng 10GbE trên Ubuntu 20.04 khi tải nặng

lá cờ jp

Tôi gặp sự cố khi đảm bảo thông lượng mạng cần thiết trên máy chủ được kết nối với máy phân tích phổ Signal Hound qua giao diện mạng 10GbE.Về cơ bản, tôi có thể nhận được thông lượng tốt khi chỉ chạy quy trình chụp radio, nhưng khi tôi chạy các quy trình khác, thông lượng bắt đầu giảm. Tôi đang sử dụng bộ điều hợp ethernet Aquantia PCIe với bộ điều hợp QNAP SFP+ 10GbE Thunderbolt 3.

Khi tôi đang chạy một chương trình python đơn giản để thăm dò ý kiến ​​từ API máy phân tích phổ ở chế độ phát trực tuyến, tất cả đều hoạt động tốt ở băng thông tối đa (~ 800MB/s). Khi tôi làm

$ căng thẳng --cpu 8 --io 8 --vm 8 --hdd 8

cạnh nhau, nó giảm xuống còn khoảng 600 MB/giây và tôi bắt đầu giảm rất nhiều dữ liệu.

Những điều tôi đã thử:

  1. Đang cập nhật trình điều khiển
  2. Lộn xộn với các tham số hợp nhất và nhiều tùy chọn ethtool (MTU, v.v.)
  3. Tắt siêu phân luồng và cách ly quy trình thành một lõi (8 trên 8) thông qua ghim mối quan hệ cpu
    • Điều này cũng liên quan đến việc cách ly các ngắt kết nối mạng với lõi của chính chúng (7 trên 8)
    • Tôi cũng thay đổi bộ điều chỉnh lõi thành "hiệu suất" để nó luôn ở tần số tối đa
    • Tôi cũng đã thử tắt hầu hết các ngắt khác cho lõi 7 và 8 để ngăn chúng chạy chậm lại, được xác minh bởi bảng điều khiển netdata
    • Về cơ bản tôi đã thử mọi thứ trong đây

Về cơ bản, tôi biết rằng nó có thể chạy trong thời gian thực vì nó hoạt động tốt khi chỉ giới hạn ở 2 lõi. Nhưng vì một số lý do, mặc dù các lõi khác không can thiệp vào chu kỳ CPU hoặc IRQ mạng, nhưng khi lõi 1-6 ở mức tải nặng, chúng sẽ làm chậm quá trình chính rất nhiều.

Nếu nó giúp, tôi thấy rằng --vm 4 tùy chọn cho thư giãn gây ra sự chậm chạp nhất, vì vậy tôi nghi ngờ rằng nó có liên quan đến việc cấp phát bộ nhớ và có lẽ là giao diện DRAM với card mạng.

Về cơ bản, tôi đang cố gắng lấy mọi gói tin từ đài phát thanh trên một máy Ubuntu 20.04 (rất mạnh mẽ). Có ai có bất kỳ kinh nghiệm với các ứng dụng như thế này?

CHỈNH SỬA: Tôi đã sao chép một số đường cong hiệu suất ở đây:

Đây là hiệu ứng tôi thấy

Vì vậy, đây là việc sử dụng.Lõi 6 ở mức 100% với softirqs cả trong giai đoạn căng thẳng cao và giai đoạn "chỉ nắm bắt". Tôi đã thử chia dữ liệu mạng thành hai lõi (5 và 6), nhưng một trong số chúng luôn được tải trong khi lõi kia có vẻ rõ ràng, ngay cả khi chúng có số lượng ngắt tương tự nhau. tải CPU

Số lượng softirqs thực tế không may giảm xuống trên CPU 6 trong khoảng thời gian chạy thử nghiệm căng thẳng. Số IRQ mềm

Đây là hiệu ứng tôi thấy trên softnet CPU6. CPU6 Softnet

Ngoài ra, các khoảng thời gian gián đoạn dường như vẫn tương đối giống nhau, mặc dù chúng kém nhất quán hơn một chút trong giai đoạn căng thẳng cao độ. ngắt

Đây là tốc độ mạng thẳng và có vẻ hơi không nhất quán trong cả hai giai đoạn. Thông tin mạng

Tôi đã tìm kiếm khá kỹ các điểm bất thường (mặc dù có rất nhiều sơ đồ trong netstat) và có vẻ như không có bộ nhớ liên tiến trình trong giai đoạn căng thẳng cao độ. Điều này có thể dẫn đến các vấn đề? nhập mô tả hình ảnh ở đây

Ai cần thêm lô thì báo mình nhé. Tôi không thể suy ra vấn đề từ những điều này, nhưng tôi hy vọng đó là đủ thông tin để đưa ra các giải pháp tiềm năng.

Cảm ơn một lần nữa!

lá cờ jp
Brendan Gregg đang đợi bạn. Bắt đầu với trang web của anh ấy https://www.brendangregg.com/, bắt đầu thu thập các số liệu hiệu suất hệ thống, tìm kiếm các nút thắt cổ chai.
Eric avatar
lá cờ jp
Cảm ơn Alex vì những gợi ý! Tôi đã chỉnh sửa bài đăng gốc với nhiều đường cong hiệu suất hơn để hy vọng ai đó thông minh hơn tôi có thể giúp tôi tìm ra điều gì đang xảy ra.
Điểm:0
lá cờ jp

Được rồi, tôi nghĩ rằng tôi đã tìm ra câu trả lời cho vấn đề của mình. Tôi nghĩ biểu đồ chính ở đây là biểu đồ "softirq". Trong điều kiện hoạt động bình thường, tôi không nghĩ nó phải cao như vậy.

Tôi đã có một chút thời gian trong khi định hình: về cơ bản, vì tôi đang chạy CUDA và một loạt các thư viện cài đặt khó sử dụng khác, nên tôi đã chạy tất cả những thứ này trong một bộ chứa docker (tôi biết tất cả những gì bạn đang nói!) . Vì tôi không gây rối với công cụ mạng cho radio trong docker, nên tôi đã không nghĩ về điều đó.Và vâng, bạn đã đoán ra rồi, mạng docker đã bổ sung đủ quá trình xử lý để đẩy tôi đến giới hạn trong việc loại bỏ các gói tin. Tôi đã kết thúc việc thiết lập chế độ mạng đến chủ nhà để sử dụng mạng máy chủ và nó đã giải quyết được sự cố của tôi. Hy vọng điều này có thể hữu ích cho người khác!

Nhưng đó không phải là tất cả--để tìm ra điều này, tôi đã dành nhiều thời gian lập hồ sơ để tìm ra chính xác lý do tại sao tôi lại thấy hiệu ứng mà tôi đang thấy (Cảm ơn @AlexD về các tài nguyên). Đây là biểu đồ ngọn lửa của CPU 7 được ghim đang chạy trình điều khiển API: nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, nó dành nhiều thời gian cho việc cấp phát bộ nhớ cho lỗi trang (đáng lẽ phải là một manh mối khác, mặc dù tôi không đăng nó ở đây. Các lỗi bộ nhớ nhỏ đã xảy ra rất nhiều trong quá trình chụp). Điều đó giải thích tại sao chạy thư giãn với --vm 4 đã cho kết quả tồi tệ nhất--Nó đã gây ra sự tranh chấp bộ nhớ làm chậm trình điều khiển một cách đáng kể. Ngoài ra, sau khi thử nghiệm một chút, tôi nghĩ dù sao nó cũng cần nhiều hơn một lõi (nó chỉ loại bỏ các gói được ghim vào lõi 7, nhưng hoạt động được ghim vào 6 và 7). Tôi nhận được kết quả tốt hơn sau khi ép xung (nhưng vẫn chưa hoàn hảo) và điều đó giải thích tại sao.

Vậy là bạn đã có nó: một lời giải thích cho lý do tại sao tất cả lại diễn ra như vậy, với các biểu đồ để chứng minh điều đó. Tôi có khoảng 60% mức sử dụng trên hai lõi cho API radio và nó khá ổn định trong việc nhận tất cả các gói (một lõi khác xử lý các softirqs ở mức khoảng 10%, giảm từ 95% mà bạn thấy trong biểu đồ ở trên). Tôi cảm thấy hơi ngớ ngẩn vì không nghĩ đến việc docker làm tôi chậm lại, nhưng tốt hơn hết là tôi đã tìm ra tất cả. Hy vọng rằng bài viết này sẽ giúp người khác!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.