LINUX.ORG.RU

Ответ на: комментарий от Boy_from_Jungle

у меня 4 ядраю хочу, чтобы задача исполнялась на ядре №1:

#include <sched.h>
int main(int argc, char *argv[])
{
    cpu_set_t  mask;
    CPU_ZERO(&mask);
    CPU_SET(1, &mask);
    CPU_SET(4, &mask);
    int result = sched_setaffinity(0, sizeof(mask), &mask);

    QCoreApplication a(argc, argv);
    ...
    return a.exec();
}
правильно сделал?

svetocopy
() автор топика
Ответ на: комментарий от Boy_from_Jungle

нет неправильно.

подправьте пожалуйста. и как сделать, чтобы другие процессы ОС не садились на «занятое» ядро?

А вообще зачем тебе такое?

хочу посадить на определенное ядро pcap для чтения пакетов + хочу посмотреть насколько отдельно взятый модуль программы грузит процессор.

svetocopy
() автор топика
Ответ на: комментарий от Boy_from_Jungle

вот и я тоже сижу думаю - зачем аффтару топика такое нужно, для каких целей

в таких случаях, когда хочется странного, надо спросить «зачем» - может и другое решение найдется...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

зачем аффтару топика такое нужно, для каких целей

Intel, например, утверждает, что это позволяет минимизировать миграцию потоков и снизить стоимость переключения контекста между процессорами.

Для всяких числодробилок может быть актуально.

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

как сделать, чтобы другие процессы ОС не садились на «занятое» ядро?

На свой страх и риск:

for i in /proc/[0-9]*; do taskset -a -p 0xFFFFFFFE $(echo $i | awk -F/ '{print $3}'); done

затем

taskset -a -p 0x01 pid_твоего_процесса
sjinks ★★★
()
Ответ на: комментарий от vel

+1 к предыдущему оратору.

cgcreate cpuset:/mycg
echo <cpunum> | sudo tee /sys/fs/cgroup/cpuset/mycg/cpuset.cpus
cgexec cpuset:/mycg <yourtask>

Вместо echo .. | tee можно использовать cgset

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

Написать свой диспетчер процессов.

Грузить систему с isolatecpus=X и биндить свой процесс на X руками достаточно близко.

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

это позволяет минимизировать миграцию потоков и снизить стоимость переключения контекста между процессорами.

а ядро тоже не дурак, оно об этом знает, см. kernel.sched_migration_cost_ns и прочие параметры шедулера.

Иногда есть профит от ручного раскидования тасков, но это всё редкие случаи.

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

Кагбе, диспетчер процессов — более гибкое решение, думается мне.

WDYM? Почему ты думаешь, что в случае с isolcpus его нет?

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

а ядро тоже не дурак, оно об этом знает, см. kernel.sched_migration_cost_ns и прочие параметры шедулера.

Ядро дурак, на самом деле. Нет возможности полностью вывести ядро из системы и крутить там свой софт.

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

Нет возможности полностью вывести ядро из системы и крутить там свой софт.

Это почти никому не надо, оттого и не реализовано. В ядре только то что нужно многим, остальное надо допиливать самому.

Если каждый бы тащил свой код в ядро то был бы ппц.

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

Это почти никому не надо, оттого и не реализовано. В ядре только то что нужно многим, остальное надо допиливать самому.

Это понятно, что всем только лолкоты нужны.

Если каждый бы тащил свой код в ядро то был бы ппц.

Ты его давно смотрел? ;)

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

Чтобы линукс свои грязные workqueue туда не бросал и т.п.

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

Он сотни раз в секунду мигрирует процессы с ядра на ядро, какая уж тут привязка. Сам Кон говорил, что аффинити для BFS — штука вовсе необязательная.

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

Он сотни раз в секунду мигрирует процессы с ядра на ядро

я не знаю что он там делает, но то что он процессы шедулит только на те ядра которые разрешены через setaffinity факт.

Сам Кон говорил, что аффинити для BFS — штука вовсе необязательная.

она ни для одного шедулера не обязательная.

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

аффинити для BFS — штука вовсе необязательная.

она ни для одного шедулера не обязательная.

Кто и где это сказал?

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

факт

Хмээ… есть пруфы? А то как-то подозрительно. Может, это в последних версиях поведение поменялось, раньше мне не удавалось такого добиться.

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

/me вздыхает облегченно

аргументы будут?

Аргументы в пользу чего - что я почувствовал облегчение? Нет, просто поверь на слово. В пользу того, что «опциональная» аффинность - это не аффинность вообще? Думаю, это очевидно.

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

+1 к предыдущему оратору.

А потом все остальные процессы снять с конкретного ядра/процессора. Всё равно же без обхода всех PID'ов не обойтись?

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

А потом все остальные процессы снять с конкретного ядра/процессора. Всё равно же без обхода всех PID'ов не обойтись?

Не очень понял вопрос, но список всех pid в /sys/fs/cgroup/<your_group>/tasks

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

Если смущает что они могут там ещё нафоркаться то можешь заморозить контейнер через freezer (такая cgroup) прежде чем убивать.

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

или ты имел в виду перебросить на другой проц? Тогда тупо поменять список доступных процов. Это, правда, займёт немного времени (доли секунды) т.к. изменения применяются когда они следующий раз получат квант времени.

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

или ты имел в виду перебросить на другой проц?

ТС хотел выделить одно ядро процессора исключительно под его программу и при этом снять с этого ядра все остальные задачи.

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

и при этом снять с этого ядра все остальные задачи.

Всё просто, остальные задачи загнать в другую группу и указать для неё другие ядра.

systemd, вероятно, умеет всё это из коробки.

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