LINUX.ORG.RU
ФорумAdmin

Балансировка нагрузки на ядрах CPU. Как осуществить ?


0

0

Доброго времени аптайма.

Есть : система с 4-х ядерным CPU Phenom 9600 под управлением ASPLinux 14

[root@user ~]#uname -a Linux user 2.6.27.25-78.2.56.0.140asp.i686 #1 SMP Tue Jul 7 16:58:15 EDT 2009 i6 86 athlon i386 GNU/Linux

Проц четырехядерный, но загружено только 1 ядро,а три остальные ядра простаивают, что не есть хорошо - не для того брались 4 ядра, чтобы КПД от трех из них стремился к нулю.

Необходимо :

Реализовать привязку процессов к ядрам.

Например : «привязать gcc и „его дочерние процессы“ к четвертому ядру». Ну и другие программы в этом духе

Пробывал привязать через taskset запуск программы на 3-м ядре таким образом,

taskset 03 /bin/programm

но ничего путнего не вышло : atop как показывал раньше нагрузку в 0-1% на cpu001, cpu002 и cpu003 так и показывает (при ожидаемых 30-40 % на cpu002), а сама программа выполняется на первом ядре

Вопрос :

Реально ли привязать taskset'ом программу со всеми ее дочерними пидами к определенному ядру CPU и как это сделать ?

Каким еще образом можно решить поставленную задачу ?



Последнее исправление: dedmazai (всего исправлений: 1)

>Проц четырехядерный, но загружено только 1 ядро,а три остальные ядра простаивают

запустите еще задачи, планировщик раскидает их на другие ядра

«привязать gcc и „его дочерние процессы“ к четвертому ядру»


это бред, запускайте make -j4
будут использоваться все ядра, одновременно будет запускаться 4 процесса сборки

taskset


schedtool -a <mask>

ps: при наличии BFS патча в ядре, кванты времени для процессов будут поровну раскидываться между всеми ядрами.

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

pps: если процесс не умеет openmp/smp сам по себе (как например 7z, pbzip2 , pigz) то он и будет работать на одном ядре, загружая его на максимум, заставить такой процесс использовать несколько ядер сразу у вас не выйдет, by design

ppps: для балансировки системной нагрузки используйте irqbalance

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

А как Grand Central Dispatcher? Или это выдумки капиталистов? :)

true_admin ★★★★★
()
Ответ на: комментарий от Sylvia

ppps: для балансировки системной нагрузки используйте irqbalance

лучше не используйте, прибейте намертво через smp_affinity

ventilator ★★★
()
Ответ на: комментарий от true_admin

Не нужно. На самом деле на десктопных задачах с прерываниями ничего делать и не нужно. Но irqbalance лучше не юзать.

ventilator ★★★
()
Ответ на: комментарий от ventilator

Не, я не про десктопные задачи а вообще. Я видел когда-то давно тесты когда раскидывали прерывания разных сетевух по разным процам на гигабитных линках.

Вот интересно актуально ли это сейчас и чьи прерывания нужно раскидывать.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

на роутерах нужно раскидывать, но тоже вручную прибивать намертво - так производительность наибольшая. Новые сетевухи умеют сейчас MSI-X и автоматом раскидывают на все ядра, однако прибить руками все равно лучше - больше попаданий в кеш.

ventilator ★★★
()
Ответ на: комментарий от ventilator

честно говоря не сталкивался еще с задачами где много прерываний генерят не сетевухи, а что либо еще.

ventilator ★★★
()

Я использую виджет, после ребута просто выставляю частоту. +еще разогнать немножко можно

sudo-s
()
Ответ на: комментарий от Sylvia

>ps: при наличии BFS патча в ядре, кванты времени для процессов будут

поровну раскидываться между всеми ядрами.


Равно как и в случае CFS.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

cfs нечасто перекидывает процесс на другое ядро,
BFS делает это более ровно, так что процесс нагружающий одно ядро на 100%
в случае CFS по данным top , htop или аналогичного монитора будет загружать одно ядро полностью, в то время как на втором (и далее) нагрузка будет 0,
в случае BFS top/htop покажет что процесс был равномерно размазан по всем ядрам, и нагрузка составит 50% на первом и 50% на втором ядре (2 ядерн)

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>cfs нечасто перекидывает процесс на другое ядро,

будет загружать одно ядро полностью, в то время как на втором (и далее) нагрузка будет 0,

Если так,то он тогда вообще не перекидывает.Процесс тупо работает на одном ядре , и все.

процесс был равномерно размазан по всем ядрам, и нагрузка составит 50% на первом и 50% на втором ядре (2 ядерн)

Что значит размазан ? Это значит что его быстро туда-сюда дергают?
Но какой в этом смысл , только лишняя трата ресурсов
Другое дело процесс распараллелен, тогда можно раскидать потоки на разные ядра, а если нет , то ни один планировчик ничего с ним не сможет сделать , лишь перекинуть с одного ядра на другое





over9000
()
Ответ на: комментарий от Sylvia

А вот тогда такой вопрос по BFQ, если он у Вас стоит. Если компьютер
не загружен и исполняется программа вида main(){ while(1); }, то как
часто она перескакивает с одного процессора на другой? А если не пере-
скакивает, то на каком она оседает? И есть ли какие-нибудь изменения
с прерываниями, они приходят в основном на один CPU (cat /proc/interrupts) ?

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

BFS

Q это планировщик IO


htop -d 1 (обновление через 0.1 с) показывает смену процессом ядра при каждом обновлении
ksysguard строит вот такой график

http://s56.radikal.ru/i153/1002/9b/92b33e9f6493.png

irqbalance не используется, все оседает на первом ядре


~ :$cat /proc/interrupts
CPU0 CPU1
0: 1489 0 IO-APIC-edge timer
1: 394417 0 IO-APIC-edge i8042
4: 1 0 IO-APIC-edge
7: 1 0 IO-APIC-edge
8: 57 0 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 4 0 IO-APIC-edge i8042
14: 1788815 0 IO-APIC-edge pata_amd
15: 0 0 IO-APIC-edge pata_amd
16: 5313040 0 IO-APIC-fasteoi EMU10K1
17: 2 0 IO-APIC-fasteoi ohci1394
18: 673135 0 IO-APIC-fasteoi nvidia
19: 485674 0 IO-APIC-fasteoi ohci1394, saa7130[0]
20: 4918582 0 IO-APIC-fasteoi ehci_hcd:usb2
21: 3492270 0 IO-APIC-fasteoi ohci_hcd:usb1
23: 1288 0 IO-APIC-fasteoi HDA Intel
27: 2411205 0 PCI-MSI-edge ahci
28: 3781762 0 PCI-MSI-edge eth0
NMI: 0 0 Non-maskable interrupts
LOC: 109065296 109584015 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
PND: 0 0 Performance pending work
RES: 12856945 14128649 Rescheduling interrupts
CAL: 453408 468482 Function call interrupts
TLB: 676009 624999 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 782 782 Machine check polls
ERR: 2
MIS: 0

Sylvia ★★★★★
()
Ответ на: комментарий от true_admin

у меня по производительности те же выводы, с BFS она немного ниже,
но зато выше общая отзывчивость системы, и что самое смешное, что нет фризов во время дискового IO, некоторые для этого ставят BFQ, а мне вот BFS помогает )

контроллер nvidia nforce mcp73 , драйвер ahci

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

Фризов или лагов?

У меня нет irqbalance, но интеррапты хэндлятся двумя ядрамя где-то 0.5/0.5. Что я делаю не так?


$ cat /proc/interrupts 
           CPU0       CPU1       
  0:        359        134   IO-APIC-edge      timer
  1:      29006      29255   IO-APIC-edge      i8042
  2:          0          0    XT-PIC-XT        cascade
  8:         62         62   IO-APIC-edge      rtc0
 10:          0          0    XT-PIC-XT        ohci1394
 12:    4515993    4516006   IO-APIC-edge      i8042
 14:         53         52   IO-APIC-edge      ide0
 15:          0          0   IO-APIC-edge      ide1
 16:         13         15   IO-APIC-fasteoi   uhci_hcd:usb3, yenta
 18:         28         26   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb7
 19:          0          0   IO-APIC-fasteoi   uhci_hcd:usb6
 21:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 22:     413869     415265   IO-APIC-fasteoi   HDA Intel
 23:          1          1   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb5
 27:     226260     226013   PCI-MSI-edge      ahci
 28:          0          0   PCI-MSI-edge      iwlagn
 29:     396866     395484   PCI-MSI-edge      i915@pci:0000:00:02.0
 30:    3214459    3212904   PCI-MSI-edge      eth0
NMI:          0          0   Non-maskable interrupts
LOC:   89553870   88175587   Local timer interrupts
SPU:          0          0   Spurious interrupts
CNT:          0          0   Performance counter interrupts
PND:          0          0   Performance pending work
RES:     133936     133531   Rescheduling interrupts
CAL:        632        958   Function call interrupts
TLB:      92018      70915   TLB shootdowns
TRM:          0          2   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:        276        276   Machine check polls
ERR:          0
MIS:          0
anonymous
()
Ответ на: комментарий от Sylvia

>BFS

Q это планировщик IO


Да, я знаю. Описался

htop -d 1 (обновление через 0.1 с) показывает смену процессом ядра при

каждом обновлении


ksysguard строит вот такой график


http://s56.radikal.ru/i153/1002/9b/92b33e9f6493.png



Вот это не очень хорошо. Смена процессора означает полную инвалидацию
кеша => потеря производительности. Т.е. BFS оптимальнее далеко не во
всех случаях.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

Хотя - я не посмотрел обсуждение выше - если разговор идет об отзывчивости, то, конечно, другое дело.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

я еще признаюсь что у меня BFS настроена не совсем по рекомендации Коливаса, он рекомендует:
1) PREEMPT
2) 1000 HZ
3) CONFIG_NO_HZ=n


у меня 3 пункт не соблюдается, т.к. мне показалось что с dynamic ticks отзывчивость выше (проверяла на Lineage II Server, там лаги хорошо чувствуются если что-то не так)

может быть на «эталонном» BFS картина будет чуть иначе, вообще конфиг ядра конфигу рознь, одним планировщиком тут не ограничивается

Sylvia ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.