Конфлікт при захопленні блокування імасштабіруемость

Термін Конфлікт при захопленні блокування (Lock contention, або просто contention) використовується для опису блокування, яка в даний момент захоплена і на звільнення якої очікують інші потоки Блокування із високим рівнем конфліктів (Highly contended) – це ті, на звільнення яких завжди очікує багато потоків Так як завдання блокувань – це сериализация доступу до ресурсу, то не викличе великого подиву той факт, що блокування знижують продуктивність системи Блокування з високим рівнем конфліктів може стати вузьким місцем у системі, швидко зменшуючи продуктивність Звичайно, блокування необхідні для того, щоб запобігти розвал системи, тому вирішення проблеми високого рівня конфліктів при блокировках також має забезпечувати необхідний захист від станів конкуренції за ресурси

Масштабованість (Scalability) – це міра того, наскільки система може бути розширена У разі операційних систем, коли говорять про масштабованості, мають на увазі більшу кількість процесів, більша кількість процесорів, більший обсяг памяті Про маштабіруємостью можна говорити в додатку практично до будь-якого компоненту компютера, який можна охарактеризувати кількісним параметром В ідеалі подвоєння кількості процесорів повинно призводити до подвоєння процесорної продуктивності системи Однак на практиці, звичайно, такого не буває ніколи

Масштабованість операційної системи Linux на більшу кількість процесорів зросла вражаючим чином з того часу, коли підтримка багатопроцесорної обробки була вбудована в ядра серії 20 У ті дні, коли підтримка многопроцессорности в операційній системі Linux тільки зявилася, лише одне завдання могло виконуватися в режимі ядра в будь-який момент часу У ядрах серії

22 це обмеження було зняте, так як механізми блокувань стали більш дрібноструктурні У серії 24 і вище блокування стали ще більш дрібноструктурні Сьогодні в ядрах серії 26 блокування мають дуже дрібну гранулярность, а масштабованість виходить дуже гарною

Структурність (Гранулярность, granularity) блокування-це опис обсягів тих даних, які захищаються блокуванням, наприклад всі структури даних однієї підсистеми З іншого боку, блокування на рівні дуже дрібних структурних одиниць (fine grained), використовується для захисту дуже маленького обсягу даних, наприклад одного поля структури У реальних ситуаціях більшість блокувань потрапляють між цими крайнощами, вони використовуються не для захисту цілої підсистеми, але й не для захисту одного поля, а можливо для захисту окремого екземпляра структури Більшість блокувань починали використовуватися на рівні великих структурних одиниць (cource graine), а потім їх стали розділяти на більш дрібні структурні рівні, як тільки конфлікти при захопленні цих блокувань ставали проблемою

Один із прикладів перекладу блокувань на дрібніший структурний рівень – це блокування черг виконання планувальника (runqueue), які розглянуті в розділі 4, Планування виконання процесів. У ядрах серії 24 і більш ранніх планувальник мав всього одну чергу виконання (згадаймо, що черга

виконання-це список готових до виконання процесів) У серії 26 був запропонований О (1)-планіровтцік, в якому для кожного процесора використовується своя чергу пиполненія, кожна чергу має свою блокування Відповідні блокування розвинулися з однієї глобальної блокування в кілька окремих блокувань для кожної черги, а використання блокувань розвинулося з глобального блокування у використання блокувань на окремих процесорах Ця оптимізація дуже істотна, оскільки на великих машинах блокування черги виконання має дуже високий рівень конфліктів при захопленні, що призводить до сериализации планування виконання процесів Іншими словами, код планувальника виконував тільки один процесор системи в будь-який момент часу, а інші процесори – чекали

Загалом таке підвищення масштабованості – це дуже хороша річ, яка дозволяє підвищити продуктивність операційної системи Linux на великих і більш потужних системах Надмірне захоплення зростанням масштабованості може привести до зниження продуктивності на невеликих багатопроцесорних і однопроцесорних машинах, тому що для невеликих машин не потрібні такі дрібноструктурні блокування, а їм доводиться мати справу з більшою складністю і з великими накладними витратами Розглянемо звязаний список Первісна схема блокування забезпечує одну блокування на весь список З часом ця одна блокування може стати вузьким місцем на дуже великий многопроцессорной машині, на якій дуже часто звертаються до повязаного списку Для вирішення проблеми одна блокування може бути розбита на велику кількість блокувань – одна блокування на один елемент списку Для кожного елемента списку, який необхідно прочитати або записати, необхідно захоплювати унікальну блокування цього елементу Тепер конфлікт при захопленні блокування буде тільки у випадку, коли кілька процесорів звертаються до одного елементу списку Що робити, якщо все одно є високий рівень конфліктів Може бути, необхідно використовувати блокування для кожного поля елемента списку (Відповідь: НІ) Якщо серйозно, навіть коли дуже дрібно структуровані блокування добре працюють на дуже великих SMP-машинах, то як вони будуть працювати на двопроцесорних машинах Накладні витрати, повязані з додатковими блокуваннями, будуть марними, якщо на двухпроцессорной машині немає істотних конфліктів при роботі з блокуваннями

Проте масштабованість-це важливий фактор Важливо із самого початку розробляти схему блокувань для забезпечення гарної масштабованості Блокування на рівні великих структурних одиниць можуть стати вузьким місцем навіть на машинах з невеликою кількістю процесорів Між крупноструктурних і дрібноструктурні блокуваннями дуже тонка грань Занадто крупноструктурних блокування призводять до великого рівня конфліктів, а надто дрібноструктурні – до даремним накладних витрат, якщо рівень конфліктів при захопленні блокувань не надто високий Обидва варіанти еквівалентні поганий продуктивності

Необхідно починати з простого і переходити до складного тільки при необхідності Простота – це ключовий момент

Джерело: Лав, Роберт Розробка ядра 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>

*

*