Я пишу многопоточную Java-программу, которая интенсивно использует процессор и память. Цель программы — выполнить некоторый алгоритм на графе. Программа выполняется на машине NUMA под управлением Linux, и я хотел бы получить от нее максимально возможную производительность.
Для этого я делаю несколько копий графа на каждую NUMA-ноду, чтобы каждый поток мог обращаться к графу в локальной памяти.
Часть выделения локальной памяти уже выполняется путем установки привязки перед выделением каждой новой копии графа. Это делается с помощью jna, поэтому я предпочитаю оставаться с этой библиотекой и не добавлять код jni, если это возможно.
Мой вопрос: как я могу проверить, на каком ядре работает рабочий поток, чтобы выполнять чтение из локальной памяти?
Я понимаю, что привязка потока к ядру может измениться во время выполнения. Однако ядро пытается запустить поток на одном и том же NUMA-узле на всех временных интервалах. Поэтому проверка только в начале, на каком ядре работает поток, будет работать в большинстве случаев.
man 7 numa
может помочь в Linux. - person Aaron Altman   schedule 12.06.2014