- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
Pardon me if this is not the right platform for my question.
I have intel Atom (silvermont) architecture and I am trying to read the msr. I do not have experience working with the performance counter at this level. I have a found the code that can read and write the perf_global_ctrl, perf_fixed_ctr_ctrl, fixed_ctr.
According to my understanding this code is for the general intel architecture with 3 Fixed performance counters and 4 GP counters. I have check in Intel Atom, I have 3 fixed counters and 2 GP counter (intel Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C)
I have also uploaded the code for the reference. I have tried to work with this code, { MSR_WRITE, 0x38f, 0x0f, 0x07 }, this statement does not works 0x38f is the address to a32_perf_fixed_ctr_ctrl, but other parameters are hard for me to change for my architecture without understanding them properly. Can you please help me explain this so I make them work on Intel Atom.
My ultimate goal is to extract the intruction_retired and cpu_clk_unhalted.core parameters to calculate the IPC parameter.
struct MsrInOut msr_start[] = {
{ MSR_WRITE, 0x38f, 0x00, 0x00 }, // ia32_perf_global_ctrl: disable 4 PMCs & 3 FFCs
{ MSR_WRITE, 0xc1, 0x00, 0x00 }, // ia32_pmc0: zero value (35-5)
{ MSR_WRITE, 0xc2, 0x00, 0x00 }, // ia32_pmc1: zero value (35-5)
{ MSR_WRITE, 0xc3, 0x00, 0x00 }, // ia32_pmc2: zero value (35-5)
{ MSR_WRITE, 0xc4, 0x00, 0x00 }, // ia32_pmc3: zero value (35-5)
{ MSR_WRITE, 0x309, 0x00, 0x00 }, // ia32_fixed_ctr0: zero value (35-17)
{ MSR_WRITE, 0x30a, 0x00, 0x00 }, // ia32_fixed_ctr1: zero value (35-17)
{ MSR_WRITE, 0x30b, 0x00, 0x00 }, // ia32_fixed_ctr2: zero value (35-17)
{ MSR_WRITE, 0x186, 0x004101c2, 0x00 }, // ia32_perfevtsel1, UOPS_RETIRED.ALL (19-28)
{ MSR_WRITE, 0x187, 0x0041010e, 0x00 }, // ia32_perfevtsel0, UOPS_ISSUED.ANY (19.22)
{ MSR_WRITE, 0x188, 0x01c1010e, 0x00 }, // ia32_perfevtsel2, UOPS_ISSUED.ANY-stalls (19-22)
{ MSR_WRITE, 0x189, 0x004101a2, 0x00 }, // ia32_perfevtsel3, RESOURCE_STALLS.ANY (19-27)
{ MSR_WRITE, 0x38d, 0x222, 0x00 }, // ia32_perf_fixed_ctr_ctrl: ensure 3 FFCs enabled
{ MSR_WRITE, 0x38f, 0x0f, 0x07 }, // ia32_perf_global_ctrl: enable 4 PMCs & 3 FFCs
{ MSR_STOP, 0x00, 0x00 }
};
struct MsrInOut msr_stop[] = {
{ MSR_WRITE, 0x38f, 0x00, 0x00 }, // ia32_perf_global_ctrl: disable 4 PMCs & 3 FFCs
{ MSR_WRITE, 0x38d, 0x00, 0x00 }, // ia32_perf_fixed_ctr_ctrl: clean up FFC ctrls
{ MSR_READ, 0xc1, 0x00 }, // ia32_pmc0: read value (35-5)
{ MSR_READ, 0xc2, 0x00 }, // ia32_pmc1: read value (35-5)
{ MSR_READ, 0xc3, 0x00 }, // ia32_pmc2: read value (35-5)
{ MSR_READ, 0xc4, 0x00 }, // ia32_pmc3: read value (35-5)
{ MSR_READ, 0x309, 0x00 }, // ia32_fixed_ctr0: read value (35-17)
{ MSR_READ, 0x30a, 0x00 }, // ia32_fixed_ctr1: read value (35-17)
{ MSR_READ, 0x30b, 0x00 }, // ia32_fixed_ctr2: read value (35-17)
{ MSR_STOP, 0x00, 0x00 }
};
struct MsrInOut {
unsigned int op; // MsrOperation
unsigned int ecx; // msr identifier
union {
struct {
unsigned int eax; // low double word
unsigned int edx; // high double word
};
unsigned long long value; // quad word
};
};
Appreciate your help,
Link Copied
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page