OS X (10.8.4) で最初のドライバーを実装しています。私のドライバーは、毎秒各プロセッサで MSR (0x198) を読み取り、その値を system.log に出力する必要があります。
IOWorkLoop と IOTimerEventSource を使用して毎秒目を覚まし、MSR 値を出力する関数を呼び出していますが、すべてのプロセッサで関数を呼び出す方法に関するガイド/ドキュメントが見つかりません。
この場合、どのメカニズムを使用することをお勧めしますか?
OS X (10.8.4) で最初のドライバーを実装しています。私のドライバーは、毎秒各プロセッサで MSR (0x198) を読み取り、その値を system.log に出力する必要があります。
IOWorkLoop と IOTimerEventSource を使用して毎秒目を覚まし、MSR 値を出力する関数を呼び出していますが、すべてのプロセッサで関数を呼び出す方法に関するガイド/ドキュメントが見つかりません。
この場合、どのメカニズムを使用することをお勧めしますか?
解決策を見つけました:
void mp_rendezvous_no_intrs(void (*action_func)(void *), void *arg)
これにより、すべてのコアで引数argを指定して関数action_funcが実行されます。
この関数のソース コードは、 http ://www.opensource.apple.com/source/xnu/xnu-1456.1.26/osfmk/i386/mp.c にあります。