CPUID на нескольких ядрах / NUMA - PullRequest
5 голосов
/ 20 декабря 2011

Я работаю над обнаружением процессора и общим кодом обнаружения среды для моей хобби ОС. Есть ли когда-нибудь случай, когда CPUID нужно вызывать несколько раз? То есть, если система имеет несколько ядер, должна ли ОС вызывать CPUID на каждом ядре? То же самое для NUMA.

Оба руководства по AMD и Intel CPUID неясны по этому вопросу. В вики osdev есть статья, в которой упоминается вызов CPUID Обнаружение топологии процессора , но, насколько мне известно, неясно, когда и сколько раз нужно вызывать CPUID.

1 Ответ

3 голосов
/ 25 декабря 2011

Поскольку прошла почти неделя, и никто не смог ответить на этот вопрос (возможно, из-за выходных), я все равно попытаюсь ответить на него.

Я думаю, что ответ - да. Возможно, вам потребуется позвонить CPUID на каждое ядро.Одна из причин этого заключается в том, что не все (даже x86) системы сегодня являются однородными.

Например, я читал на форуме по разгону (не могу найти ссылку), что можно смешивать две разных моделей процессоров на некоторых серверных платах с двумя сокетами.У человека была двухконтактная система 1366 с двумя разными скоростными процессорами.(и различные модели #)

Таким образом, в этом случае вызов CPUID будет зависеть от того, на каком процессоре был поток - поэтому вам нужно будет вызывать его один раз для каждого процессора, чтобы получить всю информацию.

В руководствах одной из моих серверных материнских плат также говорится, что вам разрешено смешивать процессоры разных моделей (с некоторыми ограничениями).И, конечно, можно смешивать два разных степпинга одной и той же модели процессора.


Одна только эта причина (гетерогенная топология) уже является причиной необходимости вызова CPUID накаждое ядро.

...