Как установить связность ядра ядра Java?

Я искал предыдущие сообщения по подобной теме, но не мог найти подходящий ответ, поэтому задал этот вопрос. Ваша помощь в ответе на него высоко ценится.

Мне известно установить привязку процесса к конкретному ядру процессора командой taskset в Linux. Но я хочу установить сходство потоков Java с конкретным ядром процессора, чтобы другие потоки, принадлежащие одному процессу, могли работать на всех остальных ядрах. Например, если у меня есть процесс, содержащий 10 потоков с 4-ядерной машиной, я хотел бы зарезервировать core-1 для потока и позволить оставшимся 9 потокам работать на оставшихся 3-сердечниках. Можно ли это сделать и как?

Спасибо Сэчин

Ответ 1

Скажите, что 2241 - это pid вашего java-процесса. Run:

jstack 2241

Это дает вам список тем. Найдите их там и обратите внимание на поле низа. Скажем nid = 0x8e9, который преобразуется в базу 10 как 2281. Затем запустите:

taskset -p -c 0 2281

Готово.

Ответ 2

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

В качестве альтернативы вы можете использовать JNI, но это будет полностью переборщить.

Ответ 3

Помните приложение Java, что ваш запуск фактически запущен в JVM, который в свою очередь работает в ОС. Для того, чтобы вы могли напрямую взаимодействовать с процессором, вам нужен низкоуровневый язык программирования (например, C).

Как было предложено в другом ответе, вы можете использовать JNI для взаимодействия с языком более низкого уровня (например, C), чтобы делать то, что вы хотите, но вам нужно делегировать concurrency (потоки, управляемые на этом нижнем уровне langaguge)..

Ответ 4

Вы можете сделать это в простой Java, используя JNA. Нет необходимости использовать набор задач. Просто помните, что сродство потоков бессмысленно, если вы ранее не изолировали ядро ​​ от потоков ядра/пользователя и аппаратных прерываний. Я связан с Coral Blocks, который разработал CoralThreads, который делает именно это.