2011-09-19 35 views
7

Chúng tôi đã viết LKM đang sử dụng các móc nối netfilter để chặn các gói IP. Vấn đề là trên tải trọng 1Gb/s, chúng ta thấy rằng móc chỉ tải một lõi CPU thông qua irq mềm. 15 lõi khác không hoạt động. Vì vậy, tôi đưa ra kết luận rằng móc không phải là đa luồng.Lưới lọc trên hệ thống đa lõi

Vì vậy, câu hỏi của tôi là: có cách nào tôi có thể phân phối móc xử lý trên nhiều lõi?

Trả lời

9

Phần mở rộng không phải là từ netfilter, là cách hạt nhân của bạn đang quản lý ngắt.

Theo mặc định phiên bản cũ của APIC cung cấp tất cả các ngắt cho CPU0.

Bạn có thể kiểm tra xem đây là vấn đề của bạn với:

cat /proc/interrupts 

Bạn có thể thấy nếu các ngắt của NIC (và nhớ rằng móc netfilter được thực hiện trên một RX hay TX SoftIRQ) đều được xử lý bởi một Core đơn.

Trong phiên bản mới hơn của hạt nhân, có một tùy chọn biên dịch (CONFIG_HOTPLUG_CPU), có cân bằng IRQ trên các lõi hiện có. Hoặc nếu bạn không thể cập nhật phiên bản hoặc biên dịch lại hạt nhân, bạn có thể cập nhật mối quan hệ SMP (với mặt nạ xử lý nhiều hơn một CPUid) để cố gắng cân bằng giữa các lõi khác nhau. Hoặc đi vào ACPI và cấu hình thích hợp (Ở đây tôi không thể giúp nhiều hơn).

Here bạn có thể tìm thấy tất cả về công cụ này (SMP affininty và xử lý IRQ thích hợp)

+0

Cảm ơn. Tôi đạt được rồi. –

6

Một vấn đề có thể là NIC của bạn chỉ có một ngắt. Một số NICS mới hơn có một số ngắt (cái gọi là NIC đa hóa) cho phép tải được lan truyền giữa nhiều luồng.

Đối với NIC một hàng đợi, có một số tính năng phần mềm khả dụng trong hạt nhân mới hơn mà bạn có thể định cấu hình để truyền tải. Xem ví dụ http://www.spinics.net/lists/linux-doc/msg02975.html để biết tổng quan về những gì có sẵn.

Các vấn đề liên quan