Linux kernel 在AMD中使用perf_event_open对内存负载进行计数和采样

Linux kernel 在AMD中使用perf_event_open对内存负载进行计数和采样,linux-kernel,cpu-architecture,performancecounter,perf,amd-processor,Linux Kernel,Cpu Architecture,Performancecounter,Perf,Amd Processor,我想对在AMD机器上运行代码块时发生的内存加载操作进行计数和采样。我知道以下代码可用于计算英特尔计算机上代码块中发生的内存加载 int main(int argc, char **argv) { struct perf_event_attr pe; long long count; int fd; memset(&pe, 0, sizeof(struct perf_event_attr)); pe.type = PERF_TYPE_RAW;

我想对在AMD机器上运行代码块时发生的内存加载操作进行计数和采样。我知道以下代码可用于计算英特尔计算机上代码块中发生的内存加载

int
main(int argc, char **argv)
{
    struct perf_event_attr pe;
    long long count;
    int fd;

    memset(&pe, 0, sizeof(struct perf_event_attr));
    pe.type = PERF_TYPE_RAW;
    pe.size = sizeof(struct perf_event_attr);
    /* event number of MEM_UOPS_RETIRED.ALL_LOADS 
    event is 81d0 */
    pe.config = 0x81d0; 
    pe.disabled = 1;
    pe.exclude_kernel = 1;
    pe.exclude_hv = 1;

    fd = perf_event_open(&pe, 0, -1, -1, 0);
    if (fd == -1) {
       fprintf(stderr, "Error opening %llx\n", pe.config);
       exit(EXIT_FAILURE);
    }
    ioctl(fd, PERF_EVENT_IOC_RESET, 0);
    ioctl(fd, PERF_EVENT_IOC_ENABLE, 0);

    // code chunk to be profiled is here

    ioctl(fd, PERF_EVENT_IOC_DISABLE, 0);
    read(fd, &count, sizeof(long long));

    printf("Number of load operations: %lld\n", count);

    close(fd);
}
然而,我不知道如何从AMD机器上获得相同事件的计数。我已经阅读了AMD在13.2和13.3节中关于性能计数器和IBS的文件。然而,在上面的代码中没有提到可以传递给pe.config的内存加载的任何硬件事件号

那么,如何使用perf_event_open对AMD机器中的内存加载操作进行计数或采样


PS:我使用的AMD处理器是AMD EPYC 7551 32 Core。

您指的是哪种特定的AMD处理器体系结构?请将其编辑到您的问题中,不要仅作为评论。@Zulan实际上我使用的AMD处理器型号是AMD EPYC 7551 32 Core