Tasklets:
- są stare (około 2,3 wierzę)
- mieć prosty, prostego API
- przeznaczone są do niskiej latencji
- nie mogą spać (run atomicznie w miękkim kontekście IRQ i gwarantuje się, że nigdy nie będzie działać na więcej niż jednym procesorze danego procesora, dla danego zadania)
kolejek zadań:
- są niedawno (wprowadzono 2,5)
- posiada elastyczne API (więcej opcji/flagi oparte)
- są zaprojektowane dla wyższej opóźnienia
- może spać
Dolna linia to: użyj zadań do zadań atomowych o niskim opóźnieniu, które nadal muszą być wykonywane poza twardym kontekstem IRQ.
Możesz kontrolować pewien poziom priorytetu za pomocą zadań przy użyciu tasklet_hi_enable
/tasklet_hi_schedule
(zamiast ich odpowiednich wersji nr _hi
). Z this IBM page:
Harmonogram normalnym priorytecie jest wykonywana przez softirq TASKLET_SOFTIRQ poziomu, w którym priorytet jest przez softirq HI_SOFTIRQ poziomu.
...
Tasklets z wysokim priorytecie wektora obsługiwane są najpierw, a następnie tych, na wektora normalnego. Zauważ, że każdy procesor utrzymuje swoje własne wektory softirq o normalnym i wysokim priorytecie.
Z kolejek roboczych, przy tworzeniu jednego, będziesz korzystać alloc_workqueue
(create_workqueue
jest przestarzałe) i can pass a flag prosić o wyższym priorytecie:
WQ_HIGHPRI:
przedmioty dziełem WQ highpri są w kolejce do puli wątków highpri z docelowy gcwq.Pule wątków Highpri są obsługiwane przez wątki robocze z podniesionym, ładnym poziomem.
Należy pamiętać, że pule wątków normalnych i o wysokiej wartości nie wchodzą w interakcje z każdym innym innym. Każdy z nich utrzymuje oddzielną pulę pracowników i wdraża zarządzanie współbieżnością wśród swoich pracowników.
Nie mogę odpowiedzieć na wszystkie pytania, ale mam nadzieję, że i tak to pomoże.