Які обробники нижніх половин необхідно використовувати

Рішення про те, який з механізмів обробки нижніх половин слід використовувати, є важливим У сучасних ядрах серії 26 є три варіанти вибору: відкладені переривання (softirq), тасклети (tasklet) і черги відкладених дій (work queue) Тасклети побудовані на основі відкладених переривань, і тому

8 назв я для механізмів обробки і нижніх х половин, очевидно, вибіраютс я и з міркувань ї конспірації, щоб збивати з пантелику молодих і недосвідчених розробників ядра

ці два механізми схожі Механізм черг дій повністю від них відрізняється, він побудований на базі потоків простору ядра

Завдяки своїй реалізації, відкладені переривання забезпечують найбільший паралелізм Це вимагає від обробників відкладених переривань застосування додаткових заходів для того, щоб гарантувати безпечний доступ до спільно використовуваних даних, так як два або більше примірників одного і того ж відкладеного переривання можуть виконуватися паралельно на різних процесорах Якщо код вже дуже добре распараллелен для багатопоточного виконання, як, наприклад, мережева підсистема, яка використовує дані, повязані з процесорами, то використання відкладених переривань-це хороший вибір Вони, звичайно, представляють собою найбільш швидкий механізм для критичних до часу або частоті виконання завдань Тасклети має більший сенс використовувати для коду, який не дуже добре распараллелен для багатопоточності Вони мають більш простий інтерфейс, і оскільки тасклети одного типу не можуть виконуватися паралельно, то їх легко програмувати Тасклети – це фактично відкладені переривання, які не можуть виконуватися паралельно Розробники драйверів завжди повинні використовувати тасклети, а не відкладені переривання, крім, звичайно, випадків, коли вони готові звязуватися з такими речами, як змінні, повязані з процесорами (рег-CPU data), або іншими хитрощами, щоб гарантувати безпечне паралельне виконання відкладених переривань на різних процесорах

Якщо відкладені операції вимагають виконання в контексті процесу, то з трьох можливих варіантів залишається єдиний вибір – це черги дій Якщо виконання в контексті процесу не є обовязковим, зокрема, якщо немає необхідності переходити в стан очікування (sleep), то використання відкладених переривань або тасклетов, швидше за все, підійде більше Черги дій вносять найбільші накладні витрати, так як вони використовують потоки ядра і, відповідно, перемикання контексту Не можна сказати, що вони не ефективні, але в світлі тих тисяч переривань в секунду, що мережева підсистема може забезпечити, використання інших механізмів може мати більший сенс Хоча для більшості ситуацій черг дій також буває достатньо

У плані простоти використання пальму першості отримують черги дій Використання чергиevents, яка існує за замовчуванням, – це просто дитяча гра Далі йдуть тасклети, які теж мають простий інтерфейс Останніми стоять відкладені переривання, які повинні бути визначені статично

У табл 73 наведено порівняння різних механізмів обробки нижніх половин

Таблиця 73 Порівняння механізмів обробки нижніх половин

Механізм обробки нижніх половин Контекст виконання Серіалізация

Відкладені переривання (softirq) Переривання

Тасклети (tasklet) Переривання

Черги відкладених дій Процес

(work queue)

Відсутня

По відношенню до тасклету такого ж типу

Відсутня (планується на виконання як контекст процесу)

Якщо коротко, то розробники звичайних драйверів мають всього два варіанти вибору Чи необхідно використовувати можливості планувальника, щоб виконувати відкладені дії, тобто необхідно Чи переходити в стан очікування з якоїсь причини Якщо так, то єдиний варіант – черги відкладених дій В іншому випадку переважно використовувати тасклети Тільки якщо важлива масштабованість, то варто звернутися до відкладених переривань

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*