The OpenNET Project / Index page

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



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

"Раздел полезных советов: Как в Linux привязать процесс к CPU и установить атрибуты планирования"  +/
Сообщение от auto_tips (??), 14-Мрт-08, 00:04 
При необходимости увеличить производительность определенного процесса в системе,
можно жестко привязать его к определенному CPU (CPU affinity), исключив
ситуацию мигрирования между процессорами, а также изменить для него алгоритм работы
планировщика задач и увеличить приоритет.

Привязка к CPU осуществляется командой taskset, а изменение параметров  real-time
планирования командой chrt. Обе команды можно использовать каскадно, вызывая
одну в качестве аргумента другой.

Например:

   taskset -c 2-3 chrt -f 1 <command>

привяжет выполнение команды к CPU со 2 по 3 ("-c 2-3", можно перечислять
процессоры через запятую, например, "-c 2,3"), а также задействует политику
планирования SCHED_FIFO ("-f") и установит приоритет 1 уровня.

Политики планирования (описание - man sched_setscheduler):
   -b SCHED_BATCH
   -f SCHED_FIFO
   -o SCHED_OTHER
   -r SCHED_RR

Изменение параметров для уже запущенного процесса производится при помощи опции "-p".
Например, изменение параметров процесса с PID 123:
   taskset -c 2-3 -p 123
   chrt -f 1 -p 123


URL: http://www.redhatmagazine.com/2008/03/12/tips-and-tricks-how.../
Обсуждается: http://www.opennet.ru/tips/info/1620.shtml

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

Оглавление

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

1. Сообщение от weec (??), 14-Мрт-08, 00:04   +/
как такое замутить в FreeBSD?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #3

2. Сообщение от eee (??), 14-Мрт-08, 00:27   +/
Может такое подойдет для serial портов? Информация теряется, нехватает реал-тайма.
Я уже rtlinux хотел ставить.

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

3. Сообщение от grayich (??), 14-Мрт-08, 03:48   +/
man rtprio  для приоритета
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #9

4. Сообщение от i (??), 14-Мрт-08, 08:54   +/
у меня от этих манипуляций некоторые процессы перешли в состояние uninterrapt sleep :(
Ответить | Правка | Наверх | Cообщить модератору

5. Сообщение от pavlinuxemail (ok), 14-Мрт-08, 13:35   +/
#!/bin/bash

#########

DEV_IRQ=`ps -eL | grep IRQ | awk '{printf $1" "$2" "}'`

for i in $DEV_IRQ
   do
     chrt -r -p 99 $i;
done

##########

SOFT_IRQ=`ps -eL | grep softirq | awk '{printf $1" "$2" "}'`

for i in $SOFT_IRQ
   do
     chrt -r -p 99 $i
done

##########

NET_SOFT_IRQ=`ps -A | grep softirq-net | awk '{print $1}'`

for i in $NET_SOFT_IRQ
   do
     chrt -f -p 99 $i
done

########

unset CPU_1_CORE_1 CPU_1_CORE_2 CPU_2_CORE_1 CPU_2_CORE_2


PROC=/proc/irq

CPU_1_CORE_1=1
CPU_1_CORE_2=2
CPU_2_CORE_1=3
CPU_2_CORE_2=4

VIDEO=`find $PROC -name nvidia | cut -b 11-13`;
ETH0=`find $PROC  -name eth0 | cut -b 11-13`;
SCSI=`find $PROC -name aic79xx | cut -b 11-13`;
ATA=`find $PROC -name libata | cut -b 11-13`;
AUDIO=`find $PROC -name "NVidia CK804" | cut -b 11-13`;

echo $CPU_1_CORE_1 > /proc/irq/$VIDEO/smp_affinity;
echo $CPU_1_CORE_2 > /proc/irq/$ETH0/smp_affinity;
echo $CPU_1_CORE_1 > /proc/irq/$SCSI/smp_affinity;
echo $CPU_2_CORE_1 > /proc/irq/$AUDIO/smp_affinity;

for i in $ATA
   do
     echo $CPU_2_CORE_2 > /proc/irq/$i/smp_affinity;
done

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #6, #7, #10

6. Сообщение от pavlinuxemail (ok), 14-Мрт-08, 13:52   +/
1. Установить патчик http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6...
2. Смотреть мануал на своб материнку, чипсет, и т.п. на предмет кто на каком CPU работает.
(этот пример для вот этой матери - http://tyan.com/product_board_detail.aspx?pid=151)
3. User-space приложения лучше не chrt_аймить, ну если надо, то не более -f  -p 2 `pidof foo`, смотреть на nice level, демоны не связанные с железом тоже не надо, artsd - можно.



Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

7. Сообщение от pavlinuxemail (ok), 14-Мрт-08, 13:54   +/
Чуть не забыл, утиль irq-balance тоже не забываем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

9. Сообщение от Аноним (-), 17-Мрт-08, 00:52   +/
неа, man cpuset

DESCRIPTION
     The cpuset command can be used to assign processor sets to processes, run
     commands constrained to a given set or list of processors, and query
     information about processor binding, sets, and available processors in
     the system.

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

10. Сообщение от Rush (??), 02-Мрт-10, 08:59   +1 +/
>CPU_1_CORE_1=1
>CPU_1_CORE_2=2
>CPU_2_CORE_1=3
>CPU_2_CORE_2=4

Я, конечно, дико извиняюсь, но ИМХО должно быть что то вроде
CPU_1_CORE_1=1
CPU_1_CORE_2=2
CPU_2_CORE_1=4
CPU_2_CORE_2=8

Соответственно, чтобы привязать прерывания, например, к 1-му процессору (невзирая на ядро)
CPU_1=3
и, соответственно
CPU2=12

Я ещё раз прошу прощения, информация чисто только что практически выдумана мной, ибо тысячу лет назад, на заре появления SMP я видел код планировщика, который стопудов по маске смотрел, а не по порядковому номеру. Возможно сейчас всё изменилось (но вряд ли).

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5 Ответы: #11

11. Сообщение от pavlinux (ok), 02-Мрт-10, 14:09   +/
>Я, конечно, дико извиняюсь, но ИМХО должно быть что то вроде
>CPU_1_CORE_1=1
>CPU_1_CORE_2=2
>CPU_2_CORE_1=4
>CPU_2_CORE_2=8
>
>Соответственно, чтобы привязать прерывания, например, к 1-му процессору (невзирая на ядро)
>CPU_1=3
>и, соответственно
>CPU2=12

Я взирал на ядра :)

У меня например, на 2-х процессорной матери стоят двух ядерные процы...

2 сетевушки, EHCI_USB и OHCI_USB, 1 сетевуха конектится на 1 проц, 2 на второй,
тоже самое  с USB, так почему бы не разогнать прерывания от USB и Ethernet по разным
ядрам...

CPU_1_CORE_1 = eth0
CPU_1_CORE_2 = uhci_usb
CPU_2_CORE_1 = eth1
CPU_2_CORE_2 = ehci_usb

P.S. Клаву и часы лучше оставить на 0 ядре

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #12

12. Сообщение от Rush (??), 02-Мрт-10, 15:46   +/
Вообще наши админы тоже затрахали с этими процессорами и ядрами - ну какая разница сколько там микросхем стоит  - ведь, когда объём памяти спрашивают, имеют ввиду совсем не количество планок :) Главное - ядра(чистыйизумруд) !

>CPU_1_CORE_1=1
>CPU_1_CORE_2=2
>CPU_2_CORE_1=3
>CPU_2_CORE_2=4
>Я взирал на ядра :)

Ядра(чистыйизумруд), и это бесспорно, но я имел ввиду ошибку в скрипте: не 1,2,3,4 а 1,2,4,8 ибо это маска, а не номер процессора/ядра :)

П.С.: читать "изумруд" как "кремний" :)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #13

13. Сообщение от pavlinux (ok), 02-Мрт-10, 17:56   +/
>[оверквотинг удален]
>ядра(чистыйизумруд) !
>
>>CPU_1_CORE_1=1
>>CPU_1_CORE_2=2
>>CPU_2_CORE_1=3
>>CPU_2_CORE_2=4
>>Я взирал на ядра :)
>
>Ядра(чистыйизумруд), и это бесспорно, но я имел ввиду ошибку в скрипте: не
>1,2,3,4 а 1,2,4,8 ибо это маска, а не номер процессора/ядра :)

А,... ну да, я их вечно пустаю с утилью taskset

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

14. Сообщение от Иванemail (??), 10-Сен-20, 11:05   +/
Спасибо
Теперь понятно как в Linux привязать процесс к конкретному CPU
Но мне еще важно чтобы этот процесс использовал это CPU монопольно то есть чтобы все остальные процессы использовали другие CPU.
Не подскажете как это сделать ?
Ответить | Правка | Наверх | Cообщить модератору


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

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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