sched_setaffinity
私は最近、プロセスのアフィニティを特定のコアに設定するために、 JNA を使用して呼び出しを行うコード [1][2] を書きました。関数の最初の引数はsched_setaffinity
プロセス ID です。
pid を 0 として関数を呼び出す (プロセス自体を参照する) と、正常に機能します。ただし、プロセスではなくスレッド ID ベースでアフィニティを設定できるようにしたいと考えています。それを行う方法はありますか?
sched_setaffinity
私は最近、プロセスのアフィニティを特定のコアに設定するために、 JNA を使用して呼び出しを行うコード [1][2] を書きました。関数の最初の引数はsched_setaffinity
プロセス ID です。
pid を 0 として関数を呼び出す (プロセス自体を参照する) と、正常に機能します。ただし、プロセスではなくスレッド ID ベースでアフィニティを設定できるようにしたいと考えています。それを行う方法はありますか?
スレッド thread の CPU アフィニティ マスクを cpuset が指す CPU セットに設定できるpthread_setaffinity_npという関数があります。
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 スレッドは OS のスレッドと常に一致するとは限りません。したがって、このネイティブ コードが役立つかどうかはよくわかりません。