Spin-lock ускорили в 5.7 раза и снизили энергопотребление в 5.4 раза

Optimizing a Spin-Lock

Spin-lock ускорили в 5.7 раза и снизили энергопотребление в 5.4 раза

Автор шаг за шагом оптимизирует spin-lock: от наивного exchange-цикла до версии с ослабленным memory ordering, test-and-test-and-set и экспоненциальной задержкой. На четырёх потоках время падает с 246 нс до 43 нс, а энергопотребление — с 64.92 Дж до 11.92 Дж. В статье разобраны причины деградации: миграция cache line, промахи предсказателя ветвлений и лишние locked-инструкции. В большинстве случаев std::mutex остаётся разумным выбором, а spin-lock оправдан только на закреплённых ядрах и после измерений.

Spin-lock — это блокировка, которая никогда не спит. Вместо того чтобы уступать планировщику, поток остаётся на CPU и крутится в цикле. Никаких syscall. Никаких переключений контекста.

Ещё за этот день

2026-09-14