Как установить связность ядра ядра 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, который делает именно это.