The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Улучшение производительности Solari..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Улучшение производительности Solari..."  +/
Сообщение от auto_tips (ok), 18-Дек-09, 03:36 
Для улучшения производительности в многопроцессорных (в том числе Multithreading) системах с ОС Solaris можно использовать выделенные процессоры для обработки прерываний устройств ввода-вывода. Это позволяем снизить количество переключений контекста для процессоров, увеличить попадания в кэш, в конечном счете отдать больше ресурсов для обработки пользовательских задач.

Solaris 10:

Для того, чтобы привязать процессор к обработке прерываний устройства:

1.  Определяем процессор, на который попадает большинство системных прерываний по данному адаптеру (например по сетевому адаптеру nxge):

   # intrstat 2 1|egrep 'device|nxge'
   ..
   device | cpu92 %tim cpu93 %tim cpu94 %tim cpu95 %tim
   nxge#0 | 0 0.0 0 0.0 0 0.0 0 0.0
   device | cpu96 %tim cpu97 %tim cpu98 %tim cpu99 %tim
   nxge#0 | 20816 67.4 13877 33.6 0 0.0 0 0.0
   device | cpu100 %tim cpu101 %tim cpu102 %tim cpu103 %tim
   nxge#0 | 0 0.0 0 0.0 0 0.0 0 0.0
   ...

В нашем случае - это процессоры 96 и 97.

2.  Проверяем количество переключений контекста для этих процессоров (колонка csw в выводе команды mpstat):

   # mpstat 1 3 |egrep 'CPU|^ 96|^ 97'
   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys  wt idl
   96 0 0 3385 4021 3970 84 0 9 53 0 466 3 13 0 83
   97 0 0 1028 1295 1207 131 2 14 29 0 691 9 5 0 87

   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
   96 0 0 3032 3552 3510 71 0 7 45 0 429 4 12 0 84
   97 0 0 981 1201 1131 116 1 23 27 0 429 2 4 0 94

   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
   96 0 0 3049 3598 3547 78 0 9 34 0 645 12 12 0 77
   97 0 0 980 1226 1139 160 1 5 29 0 245 3 5 0 92

3.  Создаем процессорный set с процессорами 96 и 97

   # psrset -c 96 97
   created processor set 1
   processor 96: was not assigned, now 1
   processor 97: was not assigned, now 1

4. Проверяем переключений контекста:

   # mpstat -P 1 1 3
   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
   96 1 0 2195 2462 2434 41 1 4 66 0 325 6 8 0 86
   97 1 0 775 769 725 63 1 8 58 0 354 7 3 0 91

   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
   96 0 0 3103 3634 3634 0 0 0 34 0 0 0 11 0 89
   97 0 0 1032 1193 1192 0 0 0 16 0 0 0 3 0 97

   CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
   96 0 0 2941 3426 3425 0 0 0 44 0 0 0 12 0 88
   97 0 0 997 1172 1170 0 0 0 18 0 0 0 3 0 97


Solaris 9:
Т.к. утилиты intrstat в Solaris 9 нет, то ориентироваться можно только на вывод команды mpstat (колонка intr). Выбираем процессор или несколько процессоров с наибольшим количеством прерываний и переносим их в сэт.


Если процессоров не так много, или сервер состоит из системных плат, объединенных через общую шину (типа 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


URL: http://www.unixpin.com/wordpress/2009/11/13/cpu-interupt/
Обсуждается: http://www.opennet.ru/tips/info/2233.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Улучшение производительности Solaris на многопроцессорных си..."  +/
Сообщение от pavlinux (ok), 18-Дек-09, 03:36 
Мы круче, у Нас есть ядро и echo !!!

# mkdir /dev/cpuset
# mount -t cgroup -o cpuset cpuset /dev/cpuset
# cd /dev/cpuset
# mkdir TEST
# cd TEST
# echo 1 > cpuset.cpu_exclusive
# echo 0-1 > cpuset.cpus
# echo 1 > cpuset.mems
# echo `pidof Xorg` > tasks

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Улучшение производительности Solaris на многопроцессорных си..."  +/
Сообщение от Аноним (-), 22-Дек-09, 08:20 
Не объясните, что это означает?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Улучшение производительности Solaris на многопроцессорных си..."  +/
Сообщение от pavlinuxemail (ok), 23-Дек-09, 02:27 
Лень :)

http://www.bullopensource.org/cpuset/
http://www.bullopensource.org/cpuset/cpuset.html
http://www.bullopensource.org/cpuset/index_man.html
http://git.kernel.org/?p=linux/kernel/git/next/linux-next.gi...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Улучшение производительности Solaris на многопроцессорных си..."  +/
Сообщение от borbacuca (ok), 12-Окт-18, 14:23 
квинэссенция линуксизма-раздолбизма и все ссылки умерли - как это по-линуксовски
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру