Linux A

Вы не поверите, но тулза про которую я спрашивал в прошлом посте называется GNOME System Monitor и делает ровно что надо: и цифрами и графиком и чаще раза в секунду и вообще. В GNOME-based системах должна быть просто с раздачи. Разные CPU можно красить в разные цвета, я просто поленился это делать для 24-х, да и цветов всяко не хватит.

Ей бы еще окошко с interrupt rate и вообще была бы лафа.

P.S. Подозревавшуюся проблему с affinity отловил, она там есть.

Comments

ну да, недавно как раз жаловались что шедулер в линухе говно, не может нормально все ядра грузить

Там (у меня) нет никакого шедулера. Ну почти. Все остальное трепыхание может сожрать ну может 5% CPU. Одного. Из 24 (и это не HT). Ну может 10.

А в остальном - есть N тредов, где N почти точно равно числу процессоров. И они занимаются своими деламы: выгребают данные, загребают данные, сливают данные, считают данные.
12 потоков (т.е. 12 CPU) общаются с 4-мя видеокартами (2 потоков на карту не хватает, к сожалению), а остальные - считают.

Но происходит драка за CPU1 (в терминах этой картинки), отчего все заметно портится.

Мопед не мой, автору мопеда я написал.

Там (у меня) нет никакого шедулера.

это ты DOSу будешь рассказывать, что шедулера нет.

Но происходит драка за CPU1 (в терминах этой картинки), отчего все заметно портится.

да, вот такое вот говно, шедулер в линухе. все в первые ядра валит

Не-а.

Тред инициализации данных, который исполняется как получится, валится в CPU18 обычно.

А все треды, которые мне интересны - имеют явно поставленную affinity mask, они просто не могут между горшками бегать. И не бегают.

А как это у вас получилось сделать thread-per-cpu?
У меня sched_setaffinity не работает, всё как попало валит.

Это не у меня, но да, sched_setaffinity()

Если я правильно прочитал исходник, то sched_setaffinity(), запускаем thread, повторяем

вот у меня sched_setaffinity() не работает (return value=-1), а pthread_setaffinity_np() работает

Ага, интересно. А в errno что? И какая версия ядра/glibc?

Это может объяснять, отчего какой-то приблудный тред приблудил на CPUO (CPU1 - если в терминах картинки). Т.е. со всеми остальными все хорошо, а на CPU0 какая-то хрень у меня. Автор вареза удивляется и все отрицает.... :)

Вообще, в мане написано, что sched_setaffinity() это `set and get a _process's_ CPU affinity mask'. Errno говорить, что `No such process', что верно. А вот pthread_setaffinity_np() для thread-а возвращает 0

Обсуждаемый (не мой) варез делает так (упрощая) для запуска треда, который будет из N-го GPU выгребать данные.

for(i ... GPUCount)
{
CPU_ZERO(&tmpmask);
CPU_SET(GPUMapping[i], &tmpmask);
sched_setaffinity(0, sizeof(tmpmask), &tmpmask);
pthread_create(....);
}

И все более-менее работает, за исключением непонятной мне жизни на core 0.

а попробуйте так

pthread_t thread;
for(i ... GPUCount)
{
CPU_ZERO(&tmpmask);
CPU_SET(GPUMapping[i], &tmpmask);

pthread_create(&thread, ...);
pthread_setaffinity_np(thread, sizeof(tmpmask), &tmpmask);
}

Если у меня дома воспроизведется та же хрень с core0, то попробую. Если не воспроизведется, то тоже попробую, но очень не сразу, к этому "суперкомпьютеру" не наездишься.

Только этот рисовальщик еще сам ресурсы неплохо поджирает, хотя на мощных компьютерах этим можно пренебречь. Сравнивал с htop.

на фоне ~2400% CPU (по top) которое жрет другой процесс - похрен.

ну когда флопсов много то это не критично, отрисовку же ещё на себя должен брать видеопроцессор

это что у тебя за тачка такая?

Это не у меня, это попросили повоспитывать немножко.

Скромный сервер, 1 юнит, два процессора AMD 6176

А откуда в 1 юните 4 видеокарты? И у тебя получается (ну цифирь на графике) 10 ядер фигней маются?

1) Две двухядерных. Влезают.

2) Я немножко опоздал со скриншотом, там пик по "простаивающим" ядрам был 3 секунды назад, как видно.

а для чего используется такая система? ( у меня из-за специфики работы в мысли лезут только научные расчёты или что-то из этой серии - перебор паролей и прочие вычислительные задачи, которые великоваты для "простых" систем)

Именно научные расчеты.

А на каком это линуксе? Дэбиан?

Убунта.