Блокировка программного обеспечения

Блокировка программного обеспечения — это явление деградации производительности в многопроцессорных компьютерных системах, возникающее из-за простоев процессоров (ЦП) при ожидании доступа к критическим секциям на уровне ядра. Блокировка программного обеспечения является одной из основных причин ухудшения масштабируемости в многопроцессорных системах, определяя предел максимально полезного количества процессоров. Для снижения данного эффекта ядро системы должно проектироваться с максимально короткими критическими секциями путём разбиения каждой структуры данных на более мелкие подструктуры[1][2].

Критические секции уровня ядра

В большинстве многопроцессорных систем каждый процессор осуществляет собственное планирование и контроль, отсутствует выделенный «супервайзер»-процессор[1], а структуры данных ядра глобально разделяются между процессорами; участки кода, обращающиеся к этим общим структурам, считаются критическими секциями. Такой принцип организации применяется для повышения масштабируемости, надёжности и модульности[1]. Примеры подобных структур данных ядра: очередь готовности и канал связи.

Конфликт возникает, когда более одного процессора одновременно пытаются обратиться к одному и тому же ресурсу (участку памяти). Чтобы избежать гонок данных и неконсистентности, только одному процессору (ЦП) разрешается в данный момент времени доступ к определённой структуре данных (участку памяти), в то время как остальные процессоры, пытающиеся получить доступ одновременно, оказываются заблокированными (locked-out) и находятся в состоянии ожидания[1][2].

Можно выделить три сценария, когда такая вынужденная блокировка либо неизбежна, либо оправдана, либо невыгодна. Простои необходимы при доступе к очереди готовности для низкоуровневых операций планирования. Они не обязательны, но удобны при выполнении критических секций для синхронизации и IPC, поскольку занимают меньше времени, чем переключение контекста (запуск другого процесса ради избежания простоя). Наоборот, простаивать из-за критических секций управления устройствами (встречающихся только в монолитных ядрах) — неэффективно, тогда как в микроядрах характерны только два первых из описанных случаев.

В многопроцессорной системе основная часть конфликтов возникает именно из-за критических секций уровня ядра; вызванные этим простои существенно влияют на производительность. Число таких простоев увеличивает среднее количество простаивающих процессоров, что снижает масштабируемость и относительную эффективность.

Аналитические исследования

Принимая в качестве параметров среднее время пребывания процессора в критических секциях уровня ядра (L, длительность состояния блокировки) и среднее время вне критических секций (E)[1] отношение L/E играет ключевую роль в оценке блокировки программного обеспечения.

Типичные значения L/E лежат в диапазоне 0,01–0,1.[3], Например, в системе с L/E = 0,05 при 15 процессорах в среднем 1 процессор всегда будет простаивать[3]; при 21 процессоре — 2,8 простаивают[4]; при 40 процессорах — 19 простаивают; при 41 процессоре — 20 простаивают[3]. Следовательно, увеличение количества процессоров свыше 40 нецелесообразно. Для каждого значения L/E существует свой порог максимально эффективного числа процессоров.

Снижение влияния блокировки программного обеспечения

Для снижения деградации производительности, связанной с блокировкой программного обеспечения, до приемлемого уровня (L/E от 0,05 до 0,1), ядро и/или операционная система должны проектироваться соответствующим образом. Наиболее эффективное решение заключается в разбиении каждой структуры данных ядра на меньшие независимые подструктуры с более коротким временем обработки. Это позволяет нескольким процессорам одновременно обращаться к изначальной структуре данных.

Во многих однопроцессорных системах с иерархическими доменами защиты до 50 % времени может тратиться на выполнение операций в режиме «супервизора». Если такие системы просто переделать под многозадачность путём установки блокировки при каждом доступе к «состоянию супервизора», отношение L/E легко превысит 1[3], что приведёт к производительности, сопоставимой с однопроцессорной системой вне зависимости от числа процессоров.

Примечания

  1. 1 2 3 4 5 Madnick 1968, с. 19
  2. 1 2 Saltzer, Jerome (июнь 1966). Traffic control in a multiplexed computer system (PDF) (PhD) [англ.]. MIT Project MAC MAC-TR-30. Архивировано из оригинала (PDF) 2014-07-10. Дата обращения 2024-06-15. Проверьте дату в |date= (справка на английском)
  3. 1 2 3 4 Madnick 1968, с. 20
  4. Raynor 1976, с. 62

Литература