Блокировка программного обеспечения
Блокировка программного обеспечения — это явление деградации производительности в многопроцессорных компьютерных системах, возникающее из-за простоев процессоров (ЦП) при ожидании доступа к критическим секциям на уровне ядра. Блокировка программного обеспечения является одной из основных причин ухудшения масштабируемости в многопроцессорных системах, определяя предел максимально полезного количества процессоров. Для снижения данного эффекта ядро системы должно проектироваться с максимально короткими критическими секциями путём разбиения каждой структуры данных на более мелкие подструктуры[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 2 3 4 5 Madnick 1968, с. 19
- ↑ 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=(справка на английском) - ↑ 1 2 3 4 Madnick 1968, с. 20
- ↑ Raynor 1976, с. 62
Литература
- Madnick, Stuart Elliot (англ.). MIT (1968). Дата обращения: 15 июня 2024. Архивировано 22 августа 2006 года.
- Madnick, Stuart Elliot — Curriculum Vitae (англ.). LECG (2006). Дата обращения: 15 июня 2024. Архивировано 28 сентября 2007 года.
- Multi-processor software lockout (англ.). Proceedings of the 1968 23rd ACM national conference (1968). Дата обращения: 15 июня 2024. Архивировано 10 августа 2011 года.
- Dubois, M.; Briggs, F. (ноябрь 1991). “The run-time efficiency of parallel asynchronous algorithms”. IEEE Transactions on Computers [англ.]. 40 (11): 1260—1266. DOI:10.1109/12.102830. Дата обращения 2024-06-15. Проверьте дату в
|date=(справка на английском);|access-date=требует|url=(справка) - Raynor, R. J.; Gwynn, J. M., Jr. (июль 1976). “Minimization of supervisor conflict for multiprocessor computer systems”. ACM SIGSIM Simulation Digest [англ.]. 7 (4): 61—69. DOI:10.1145/1013610.807300. Дата обращения 2024-06-15. Проверьте дату в
|date=(справка на английском);|access-date=требует|url=(справка)
- Rodgers, David P. (июнь 1985). “Improvements in multiprocessor system design”. ACM SIGARCH Computer Architecture News [англ.]. 13 (3): 225—231. ISSN 0163-5964. Дата обращения 2024-06-15. Проверьте дату в
|date=(справка на английском) - Towards a Scalable Kernel Architecture (англ.). Proceedings of the Autumn 1992 Openforum Technical Conference (ноябрь 1992). Дата обращения: 15 июня 2024.