Những gì tải mạng yêu cầu bỏ phiếu Nic so với ngắt?


18

Có ai có một số dữ liệu hoặc tính toán cơ bản có thể trả lời khi cần kết hợp khung (NAPI) và khi một ngắt đơn cho mỗi khung là đủ?

Phần cứng của tôi: IBM BladeServer HS22, phần cứng Broadcom 5709 Gigabit (MSI-X), với bộ xử lý lõi tứ Xeon E5530. Mục đích chính là máy chủ proxy Squid. Switch là một dòng Cisco 6500 đẹp.

Vấn đề cơ bản của chúng tôi là trong thời gian cao điểm (lưu lượng 100 Mbps, chỉ 10.000 pps) mà độ trễ và mất gói tăng lên. Tôi đã thực hiện rất nhiều điều chỉnh và nâng cấp kernel lên 2.6,38 và nó đã cải thiện việc mất gói nhưng độ trễ vẫn còn kém. Pings là lẻ tẻ; nhảy thậm chí tới 200ms trên mạng LAN Gbps cục bộ. Phản ứng trung bình của mực nhảy từ 30ms đến 500 + ms mặc dù tải CPU / bộ nhớ vẫn ổn.

Các ngắt tăng lên khoảng 15.000 / giây trong thời gian cao điểm. Ksoftirqd không sử dụng nhiều CPU; Tôi đã cài đặt sự mất cân bằng để cân bằng các IRQ (8 mỗi cho eth0 và eth1) trên tất cả các lõi nhưng điều đó không giúp được gì nhiều.

Các NIC của Intel dường như không bao giờ gặp phải các loại vấn đề này, nhưng thực tế là phần cứng cấu hình cánh quạt và phần cứng cấu hình cố định, chúng tôi bị mắc kẹt với Broadcom.

Tất cả mọi thứ đang chỉ vào NIC là thủ phạm chính. Ý tưởng tốt nhất tôi có ngay bây giờ là thử giảm các ngắt trong khi vẫn giữ cả độ trễ thấp và thông lượng cao.

Thật không may, bnx2 không hỗ trợ thích nghi-rx hoặc tx.

Các Napi vs thích ứng Ngắt chủ đề trả lời cung cấp một cái nhìn qua vĩ đại của ngắt điều độ nhưng không có thông tin cụ thể về làm thế nào để tính toán tối ưu ethtool liên hiệp cài đặt cho workaround nhất định. Có một cách tiếp cận tốt hơn sau đó chỉ là thử nghiệm và lỗi?

Liệu khối lượng công việc và cấu hình phần cứng được đề cập ở trên thậm chí cần NAPI? Hoặc nó có thể sống trên một ngắt đơn trên mỗi gói không?


Phải là một câu hỏi khó ... Cảm ơn vì tiền thưởng, @Holocryptic! Tôi đã thử một số cài đặt "ethtool -c" để kết hợp nhưng chưa có sự khác biệt đáng chú ý nào.
Wim Kerkhoff

Không vấn đề gì. Tôi chỉ thấy nó kéo dài ở đó vài ngày và có vẻ như đó là một câu hỏi hay. Hy vọng ai đó có một cái gì đó cho bạn.
Holocryptic

Một bản cập nhật khác ... chúng tôi đã chuyển sang các lưỡi IBM HS23 với các NIC Emulex 10 Gbps. Tuần này chúng tôi đạt hơn 800.000 gói / giây, không giảm. Chúng tôi đã phải thực hiện rất nhiều điều chỉnh (vá các trình điều khiển nhân Linux) để cân bằng tải IRQ nhưng hiện tại nó hoạt động rất tốt.
Wim Kerkhoff

Câu trả lời:


6

Câu hỏi tuyệt vời đã khiến tôi đọc một số bài để thử và tìm ra nó. Ước gì tôi có thể nói tôi có câu trả lời ... nhưng có lẽ một số gợi ý.

Tôi ít nhất có thể trả lời câu hỏi của bạn, "nếu nó có thể sống trên một ngắt đơn trên mỗi gói". Tôi nghĩ câu trả lời là có, dựa trên một tường lửa rất bận mà tôi có quyền truy cập:

Đầu ra Sar:

03:04:53 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
03:04:54 PM        lo     93.00     93.00      6.12      6.12      0.00      0.00      0.00
03:04:54 PM      eth0 115263.00 134750.00  13280.63  41633.46      0.00      0.00      5.00
03:04:54 PM      eth8  70329.00  55480.00  20132.62   6314.51      0.00      0.00      0.00
03:04:54 PM      eth9  53907.00  66669.00   5820.42  21123.55      0.00      0.00      0.00
03:04:54 PM     eth10      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM     eth11      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth2 146520.00 111904.00  45228.32  12251.48      0.00      0.00     10.00
03:04:54 PM      eth3    252.00  23446.00     21.34   4667.20      0.00      0.00      0.00
03:04:54 PM      eth4      8.00     10.00      0.68      0.76      0.00      0.00      0.00
03:04:54 PM      eth5      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth6   3929.00   2088.00   1368.01    183.79      0.00      0.00      1.00
03:04:54 PM      eth7     13.00     17.00      1.42      1.19      0.00      0.00      0.00
03:04:54 PM     bond0 169170.00 201419.00  19101.04  62757.00      0.00      0.00      5.00
03:04:54 PM     bond1 216849.00 167384.00  65360.94  18565.99      0.00      0.00     10.00

Như bạn có thể thấy, một số gói rất cao mỗi giây và không có tinh chỉnh ethtool đặc biệt nào được thực hiện trên máy này. Ồ ... chipset Intel, mặc dù. : \

Điều duy nhất đã được thực hiện là một số cân bằng irq thủ công với / Proc / irq / XXX / smp_affinity, trên cơ sở mỗi giao diện. Tôi không chắc tại sao họ lại chọn cách đó thay vì mất cân bằng, nhưng dường như nó vẫn hoạt động.

Tôi cũng đã nghĩ về toán học cần thiết để trả lời câu hỏi của bạn, nhưng tôi nghĩ có quá nhiều biến số. Vì vậy, ... để tóm tắt, theo tôi, câu trả lời là không, tôi không nghĩ bạn có thể dự đoán kết quả ở đây, nhưng với việc thu thập đủ dữ liệu, bạn sẽ có thể điều chỉnh nó đến mức tốt hơn.

Đã nói tất cả, cảm giác ruột của tôi là bạn bằng cách nào đó bị ràng buộc phần cứng ở đây ... như trong một chương trình cơ sở hoặc một loại lỗi nào đó.


Một số nền tảng hữu ích ở đây: alexonlinux.com/ Từ
DictatorBob

1
Tôi đồng ý với tuyên bố cơ bản "vâng, không nên có vấn đề", nhưng xem như cách họ gặp vấn đề thì đó có thể là vấn đề về phần sụn hoặc trình điều khiển. Tôi chưa "điều chỉnh" máy trạm của mình và nó có thể kéo 65kips mà không bị đổ mồ hôi; 15kips không phải là bất cứ thứ gì đối với CPU hiện đại. Tôi sử dụng độc quyền Broadcom NIC, 5709 là phổ biến nhất cho đến nay. Thử nghiệm này đã được chạy trên FreeBSD, tuy nhiên, không phải Linux.
Chris S

Cảm ơn các ý tưởng. Tôi đã thử mất cân bằng nhưng không nhận thấy sự khác biệt nào. Tôi đã chơi với nhiều cài đặt kết hợp hơn (ethtool -c) nhưng không nhận thấy sự khác biệt nào. Một trong những lưỡi dao thực sự là bộ cân bằng tải, đẩy tới 120.000 gói / giây. Tôi nhận thấy rằng nếu các iptables NAT và conntrack được tải thì việc sử dụng CPU ksoftirqd sẽ đạt 100%. Dỡ bỏ các mô-đun đó và tải giảm xuống 0. Trên các máy chủ Squid (tối đa 10.000 gói / giây), tôi đã xóa các quy tắc iptables 17.000 (!!!) và ngay lập tức độ trễ giảm xuống. Tôi nghĩ rằng tôi đã thử điều đó trước đây, nhưng dường như không ...
Wim Kerkhoff

3

Chắc chắn với khả năng của CPU, chipset và bus so với lưu lượng thấp như vậy, bạn không có lý do gì để bạn CẦN bất kỳ hình thức quản lý ngắt nào. Chúng tôi có nhiều máy 64-bit RHEL 5.3 với các NIC 10Gbps và các ngắt của chúng không quá tệ, điều này ít hơn 100 lần.

Rõ ràng là bạn có một cấu hình cố định (tôi sử dụng các lưỡi của HP khá giống nhau), vì vậy việc đổi các NIC cho Intels bây giờ là một lựa chọn dễ dàng nhưng tôi sẽ nói rằng tôi bắt đầu phát hiện ra một số vấn đề tương tự trên diễn đàn này và các nơi khác với NIC Broadcom cụ thể đó. Bản thân các trang SE có một số vấn đề với loại không nhất quán này và việc hoán đổi với các NIC của Intel hoàn toàn có ích.

Những gì tôi khuyên bạn nên chọn một lưỡi cắt và thêm bộ điều hợp dựa trên Intel vào một máy đó, rõ ràng bạn sẽ phải thêm một kết nối hoặc bất cứ điều gì IBM gọi cho họ để lấy tín hiệu ra nhưng thử cài đặt phần mềm tương tự nhưng với thiết bị khác NIC (có thể vô hiệu hóa Broadcom nếu bạn có thể). Kiểm tra điều này và xem bạn tiếp tục như thế nào, tôi biết những gì tôi đã mô tả cần một vài phần cứng bổ sung nhưng tôi tưởng tượng đại diện IBM của bạn sẽ vui vẻ cho bạn mượn chúng. Đó là cách duy nhất để biết chắc chắn. Vui lòng cho chúng tôi biết những gì bạn phát hiện ra, tôi thực sự quan tâm nếu có vấn đề với các NIC này, ngay cả khi đó là một trường hợp kỳ quặc. Tôi sẽ gặp Intel và Broadcom vào một tuần tới để thảo luận về một thứ hoàn toàn không liên quan nhưng tôi chắc chắn sẽ thảo luận với họ và cho bạn biết nếu tôi tìm thấy bất cứ điều gì quan tâm.


1

Câu hỏi về ngắt là cách chúng ảnh hưởng đến hiệu năng hệ thống tổng thể. Các ngắt có thể ưu tiên xử lý vùng đất của người dùng và hạt nhân và trong khi bạn có thể không thấy sử dụng CPU nhiều, có rất nhiều chuyển đổi ngữ cảnh xảy ra và đó là một hiệu suất lớn. Bạn có thể sử dụng vmstatvà kiểm tra systemcột, cstiêu đề cho các ngắt và chuyển đổi ngữ cảnh mỗi giây (các ngắt bao gồm đồng hồ để bạn phải cân nó trong đó), nó cũng đáng để kiểm tra.


1

Câu trả lời trực tiếp ngắn:

Nếu bạn bật bỏ phiếu, bạn sẽ giảm các chuyển đổi ngữ cảnh (thông thường là do xen kẽ) từ bất cứ thứ gì hiện tại (15kips trong trường hợp của bạn) xuống một số được xác định trước (thường là 1k đến 2k).

Nếu bạn hiện có lưu lượng truy cập trên số lượng được xác định trước thì bạn nên có thời gian phản hồi tốt hơn bằng cách bật bỏ phiếu. Các ngược lại cũng đúng. Tôi sẽ không nói điều này là "cần thiết" trừ khi các công tắc ngữ cảnh đang ảnh hưởng đến hiệu suất.


1

Để theo dõi: với các mô-đun NAT và conntrack không được tải cộng với bộ quy tắc iptables được thu nhỏ, chúng ta có được hiệu suất tuyệt vời. Bộ cân bằng tải IPVS đã thực hiện trên 900 Mbps / 150 kpps. Điều này là trong khi vẫn sử dụng các chipset bnx2 Broadcom tương tự.

Vì vậy, để kết luận: việc xử lý ngắt có vẻ ổn và mặc định cho Debian với kernel 2.6,38 / 3.0.x dường như có thể chấp nhận được.

Chắc chắn tôi thích sử dụng các Intel Intel để chúng tôi có thể sử dụng các gói Debian tiêu chuẩn. Chiến đấu với phần mềm bnx2 không miễn phí là một sự lãng phí rất lớn thời gian.


Chỉ cần cập nhật khác. Gần đây, hiệu suất đã xuống cấp một lần nữa mà không có lý do rõ ràng. Chúng tôi đã xem xét tất cả các tối ưu hóa trước đó nhưng không thành công. Các NIC của Intel vẫn không phải là một lựa chọn kinh tế (đầu tư $ 30- $ 40.000 vào các kết nối mới, bộ chuyển mạch 10 GB, v.v.). NHƯNG, chúng tôi đã tìm thấy một số lưỡi IBM HS22 mới hơn một chút vẫn sử dụng bnx2 crappy, nhưng với phần sụn mới hơn. Hiệu suất tốt hơn nhiều - chúng tôi đã phá vỡ 150.000 gói / giây rào cản.
Wim Kerkhoff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.