Смотри также
Когда навалом процессоров… Часть 1
Когда навалом процессоров… Часть 2
Когда навалом процессоров… Часть 3

Если процессоров не так прямо уж и много, или сервер состоит из системных плат, объединенных через общую шину (типа sf4800, sf6900, e25k итд) — то можно пойти другим путем — привязать процессы к процессорному сэту и запретить прерывания для этого сэта. Тем самым повышаем попадания в кэш, уменьшится трафик между системными платами, можно выделить как бы гарантированный квант процессорных ресурсов приложению.
Итак, пусть у нас средняя железка, 24 процессора. Создадим
процессорный сэт из процессоров 0-7

# psrset -c 0-7
created processor set 1
processor 0: was not assigned, now 1
processor 1: was not assigned, now 1
processor 2: was not assigned, now 1
..

Проверяем:
# mpstat 2 5
...
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
...
21 308 0 17969 1410 1132 955 304 391 380 0 1340 67 29 3 1
22 364 0 18396 469 1 1541 472 583 612 0 2056 80 10 10 0
23 301 0 11905 375 1 1121 376 464 342 0 2969 86 8 5 0
0 0 0 221 499 396 0 0 0 14 0 0 0 1 0 99
1 0 0 1 5 1 0 0 0 0 0 0 0 0 0 100
2 0 0 1 5 1 0 0 0 0 0 0 0 0 0 100

...

Ищем процесс, который мы собираемся отдать в процессорный сэт:
# ps -ef | grep lsnr
oracle 1811 1 0 Apr 12 ? 74:55 /oracle/dbase10g/bin/tnslsnr listener -inherit

Привязываем процесс (и подпроцессы, которые он порождает в сэт)
# psrset -b 1811

Запрещаем прерывания на этот сэт
# psrset -f 1

Проверяем:
# mpstat 2 5
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
...
22 470 0 10802 557 218 708 342 282 109 0 1982 89 9 2 0
23 132 0 12200 1501 1260 610 262 264 166 0 1120 86 12 2 0
0 0 0 1 6 1 0 0 0 0 0 0 0 0 0 100
1 0 0 1 6 1 0 0 0 0 0 0 0 0 0 100
2 0 0 1 6 1 0 0 0 0 0 0 0 0 0 100

Убеждаемся, что прерывания на процессорах из сэта заметно уменьшились (столбец intr).
Ну и в любой момент процессорный сэт можно удалить:
# psrset -d 1

6 комментариев на запись “Когда навалом процессоров… Часть 2”

  1. Аноним пишет:

    Уважаемый, а всё же — почему «сэт»? Почему вы тогда не пишете «процэссор» и «сэрвер»? В исходных вариантах этих слов тоже стоит буква «e», а не «a».

    С уважением, Граммар Наци.

  2. ikorolev пишет:

    К содержанию претензии есть?

  3. Игорь пишет:

    Очень полезно, спасибо! А про то где «э» а где «е» не по-семантики темы

  4. FausT пишет:

    Подскажите а выделять в сеты нужно именно процессоры или процессорные ядра, просто у меня железка с 2-мя процами по 4 ядра в каждом с гипер тридингом.

  5. ikorolev пишет:

    в сеты организуются виртуальные процессора, в общем — то, что выводит солярис по команде mpstat:
    # mpstat 2 5
    CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl

    21 308 0 17969 1410 1132 955 304 391 380 0 1340 67 29 3 1
    22 364 0 18396 469 1 1541 472 583 612 0 2056 80 10 10 0
    23 301 0 11905 375 1 1121 376 464 342 0 2969 86 8 5 0

    А как они распределены, созданы или организованы физически — не важно, важно — как их видит соляра.

  6. FausT пишет:

    Ок, спасибо, возможно в скором времени пригодится.