2013-11-17 2 views
0

Недавно я написал код [1] [2], который пытался использовать JNA для совершения вызовов до sched_setaffinity, пытаясь установить близость процесса к определенному ядру. Первым аргументом функции sched_setaffinity является идентификатор процесса.Процессы Java против потоков для привязки потоков

Вызов функции с pid как 0 (относится к самому процессу) работает нормально. Тем не менее, я хотел бы иметь возможность установить близость на основе идентификатора потока, а не в процессе. Можно ли мне это сделать?

  1. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ctest.c
  2. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ThreadAffinity.java

ответ

0

Существует функция называется pthread_setaffinity_np, который может установить сродство CPU маску нити нити на множество CPU, на который указывает cpuset.

cpu_set_t cpuset; 
CPU_ZERO(&cpuset); 
CPU_SET(core_id, &cpuset); 

pthread_t current_thread = pthread_self();  
pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset); 

Этот фрагмент кода может установить нить в ядро ​​(представленное core_id).

Насколько я знаю, поток Java не всегда соответствует потоку в ОС. Поэтому я не совсем уверен, поможет ли эта часть собственного кода.