Получить идентификатор LWP из pthread_t в Solaris для использования с processor_bind
На солярисе, processor_bind
используется для установки сродства к потокам. Вам нужно знать LWPID целевого потока или использовать константу P_MYID
ссылаться на себя.
У меня есть функция, которая выглядит так:
void set_affinity(pthread_t thr, int cpu_number)
{
id_t lwpid = what_do_I_call_here(thr);
processor_bind(P_LWPID, lwpid, cpu_number, NULL);
}
В действительности в моей функции есть куча кроссплатформенных вещей, которые я выбрал для ясности.
Ключевым моментом является то, что я хотел бы установить сходство произвольного pthread_t, поэтому я не могу использовать P_MYID
,
Как я могу добиться этого с помощью processor_bind
или альтернативный интерфейс?
2 ответа
В связи с этим и из-за моей путаницы:
Lwpid - это то, что создано
pthread_create( &lwpid, NULL, some_func, NULL);
Данные потока доступны извне процессу, который не является pthread_create()
позвонить - через /proc
интерфейс
/proc/<pid>/lwp/<lwpid>/ lwpid == 1 is the main thread, 2 .. n are the lwpid in the above example.
Но это почти ничего не говорит о том, с каким потоком вы имеете дело, за исключением того, что это lwpid в приведенном выше примере.
/proc/pid/lwp/lwpid/lwpsinfo
может быть прочитан в структуру lwpsinfo, которая содержит еще немного информации, из которой вы можете определить, смотрите ли вы на нужный поток. увидеть /usr/include/sys/procfs.h
Или же man -s 4 proc
Ядро Solaris 11 имеет критическую оптимизацию потоков. Вы устанавливаете, какие потоки требуют особого внимания, а остальное делает ядро. Похоже, это то, что вы хотите. Пожалуйста, прочтите это краткое объяснение, чтобы увидеть, понял ли я, что вы хотите.
https://blogs.oracle.com/observatory/entry/critical_threads_optimization
Выше приведен альтернативный вариант. Это может не летать вообще для вас. Но это предпочтительный механизм, согласно Oracle.
Для Solaris 10 используйте pthread_t tid
LWP с idtype_t
из P_LWPID
в вашем звонке processor_bind
, Это работает в Solaris 8 -> 11. Это работает ТОЛЬКО для LWP в процессе. Мне не ясно, если это ваша модель.
НТН