2013-08-19 71 views
11

Tôi là người mới lái xe thiết bị Linux và muốn biết sự khác biệt chính xác giữa taskletworkqueue. Ngoài ra tôi đã nghi ngờ sau quá:Sự khác nhau giữa tasklet và workqueue

  1. nào kernel chồng làm ngắt, tasklet và sử dụng workqueue khi chạy trong quá trình ngắt bối cảnh /?
  2. Nhiệm vụ và nhiệm vụ ưu tiên nào sẽ chạy và chúng tôi có thể sửa đổi mức độ ưu tiên của nó?
  3. Nếu tôi triển khai danh sách hàng đợi công việc của mình, tôi có thể lên lịch/ưu tiên độc lập không?

Trả lời

13

Tasklets:

  • già (khoảng 2,3 Tôi tin)
  • có một, API đơn giản dễ hiểu
  • được thiết kế cho độ trễ thấp
  • không thể ngủ (chạy nguyên tử trong bối cảnh IRQ mềm và được đảm bảo không bao giờ chạy trên nhiều CPU của một bộ xử lý đã cho, cho một tác vụ cụ thể)

hàng đợi công việc:

  • là gần đây (giới thiệu trong 2.5)
  • có một API linh hoạt (nhiều lựa chọn/cờ được hỗ trợ)
  • được thiết kế cho cao độ trễ
  • có thể ngủ

Bottom line is: use tasklets cho các mức độ ưu tiên cao, các tác vụ nguyên tử độ trễ thấp vẫn phải thực thi bên ngoài ngữ cảnh IRQ cứng.

Bạn có thể kiểm soát mức độ ưu tiên với các tác vụ bằng cách sử dụng tasklet_hi_enable/tasklet_hi_schedule (thay vì các phiên bản không có số _hi tương ứng). Từ this IBM page:

Tiến độ bình thường có mức ưu tiên được thực hiện thông qua các softirq TASKLET_SOFTIRQ cấp, nơi ưu tiên cao là thông qua việc softirq HI_SOFTIRQ cấp.

...

Các tác vụ từ véc tơ ưu tiên cao được bảo dưỡng trước, theo sau là các vector trên véc tơ thông thường. Lưu ý rằng mỗi CPU duy trì các vectơ softirq thông thường và có mức ưu tiên cao của riêng nó.

Với hàng đợi công việc, khi tạo một, bạn sẽ sử dụng alloc_workqueue (create_workqueue bị phản đối) và can pass a flag để xin ưu tiên cao hơn:

WQ_HIGHPRI:

hạng mục công trình của một wq highpri là xếp hàng đợi đến hồ bơi highpri của gcwq mục tiêu.Hồ bơi chủ đề Highpri được phục vụ bởi các chủ đề công nhân với mức độ đẹp cao.

Lưu ý rằng các nhóm chủ đề bình thường và highpri không tương tác với mỗi khác. Mỗi người đều duy trì một nhóm công nhân riêng biệt và thực hiện việc quản lý đồng thời giữa các công nhân của mình.

Tôi không thể trả lời tất cả câu hỏi của bạn, nhưng tôi hy vọng điều này sẽ giúp ích.