Влияет ли spin_lock и spin_unlock на производительность ядра SMP на компьютере с одним процессором? - PullRequest
8 голосов
/ 29 октября 2009

На моем компьютере с Ubuntu образ ядра по умолчанию, который работает, собран для smp (CONFIG_SMP=y). Но у этой машины всего 1 процессор.

В однопроцессорном ядре, в отличие от ядра smp, spin_lock/unlock - нулевые функции. Так как же spin_lock() и spin_unlock() ведут себя в этой настройке?

Есть ли какое-либо влияние на производительность из-за такого специфического кода smp?

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Текущие ядра Linux содержат патч, который вы можете найти в Google с терминами «Альтернативы SMP». Короче говоря, во время загрузки, если ядро ​​обнаруживает, что оно работает на однопроцессорных компьютерах, функции спин-блокировки исправляются с помощью no-ops.

0 голосов
/ 01 июня 2011

Да (и, вероятно, нет).

Да: О. Вращением блокировки / разблокировки запускается фактический код блокировки и разблокировки, поскольку при компиляции компилятор не знает, собираетесь ли вы запускать его на машине с одним или несколькими процессорами. B. Хотя у вас есть один процессор, вы все равно можете использовать его, если используете потоки.

Вероятно, нет: Я предполагаю, что вы спрашиваете, потому что вы не используете потоки для части, которую нужно заблокировать, и у вас есть только один процессор. В этом случае спин-замок никогда не должен попадать в спин. Таким образом, потери производительности незначительны.

...