2014-01-28 2 views
4

Я могу читать/записывать регистр MSR, но я не знаю, как указать, какой MSR должен быть запущен.Как я могу прочитать регистр конкретного ядра (счетчик производительности)?

Например, я хочу записывать пропуски тайного кэша L2 для каждого ядра соответственно, поэтому мне нужно указать идентификатор ядра для каждого ядра.

Я знаю smp_call_function(), чтобы вызывать код на всех ядрах. Если я добавлю insn, который записывает идентификатор ядра, этот код запускается и использует smp_call_function(), он должен работать. Но если я только хочу узнать про 1-й личный кеш-память ядра 1, мне придется оставить все ядра, записывая номер, который не является опрятным для меня.

Есть ли лучшее решение для этого?

Мои коды для чтения/записи операции MSR:

mov $0x0001010E, %eax    # Write selector value to EAX 
    xor %edx, %edx      # Zero EDX 
    mov $0x187, %ecx      # Write logical register id to ECX (IA32_PERFEVTSEL1) 
    wrmsr 

    mov $0xc2, %ecx      # Address of MSR IA32_PMC1 
    rdmsr        # Read value into EAX:EDX (EAX contains low-order bytes) 

ответ

3

smp_call_function_single Используйте для запуска кода на конкретном процессоре.

+0

Большое вам спасибо! Я думаю, это должно сработать! :) – Mike

Смежные вопросы