MyTetra Share
Делитесь знаниями!
Как в Linux привязать процесс к CPU
Время создания: 25.04.2013 22:46
Раздел: root - Linux - tips
Запись: Yurons/mytetra/master/base/136691917298nlsmh42p/text.html на raw.github.com

 

Как в Linux привязать процесс к CPU и установить атрибуты планирования

[исправить ]

При необходимости увеличить производительность определенного процесса в системе,

можно жестко привязать его к определенному 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

 

 

как такое замутить в FreeBSD?

 

 

 

 

 

 

2 .3, grayich , 03:48, 14/03/2008 [^ ] [ответить ] [смотреть все ]

+ /

man rtprio  для приоритета

 

 

 

 

 

3 .9, Аноним , 00:52, 17/03/2008 [^ ] [ответить ] [смотреть все ]

+ /

неа, man cpuset DESCRIPTION The cpuset command can be used to assign proces... весь текст скрыт [показать ]

 

 

 

 

1 .2, eee , 00:27, 14/03/2008 [ответить ] [смотреть все ]  

+ /

Может такое подойдет для serial портов? Информация теряется, нехватает реал-тайма. Я уже rtlinux хотел ставить.

 

 

 

 

1 .4, i , 08:54, 14/03/2008 [ответить ] [смотреть все ]  

+ /

у меня от этих манипуляций некоторые процессы перешли в состояние uninterrapt sleep :(

 

 

 

 

1 .5, pavlinux , 13:35, 14/03/2008 [ответить ] [смотреть все ]  

+ /

bin bash DEV_IRQ ps -eL 124 grep IRQ 124 awk printf 1 ... весь текст скрыт [показать ]

 

 

 

 

 

2 .6, pavlinux , 13:52, 14/03/2008 [^ ] [ответить ] [смотреть все ]  

+ /

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

 

 

 

2 .7, pavlinux , 13:54, 14/03/2008 [^ ] [ответить ] [смотреть все ]  

+ /

Чуть не забыл, утиль irq-balance тоже не забываем.

 

 

 

2 .10, Rush , 08:59, 02/03/2010 [^ ] [ответить ] [смотреть все ]  

+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 я видел код планировщика, который стопудов по маске смотрел, а не по порядковому номеру. Возможно сейчас всё изменилось (но вряд ли).

 

 

 

 

 

3 .11, pavlinux , 14:09, 02/03/2010 [^ ] [ответить ] [смотреть все ]  

+ /

>Я, конечно, дико извиняюсь, но ИМХО должно быть что то вроде

 >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 ядре

 

 

 

 

 

4 .12, Rush , 15:46, 02/03/2010 [^ ] [ответить ] [смотреть все ]  

+ /

Вообще наши админы тоже затрахали с этими процессорами и ядрами - ну какая разница сколько там микросхем стоит  - ведь, когда объём памяти спрашивают, имеют ввиду совсем не количество планок :) Главное - ядра(чистыйизумруд) !

>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 ибо это маска, а не номер процессора/ядра :)

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

 

 

 

 

 

5 .13, pavlinux , 17:56, 02/03/2010 [^ ] [ответить ] [смотреть все ]  

+ /

>[оверквотинг удален]

 >ядра(чистыйизумруд) !

 >

 >>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

 

 

 

 

 

 
MyTetra Share v.0.59
Яндекс индекс цитирования