<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Memory Bandwidth Monitoring in Software Tuning, Performance Optimization &amp; Platform Monitoring</title>
    <link>https://community.intel.com/t5/Software-Tuning-Performance/Memory-Bandwidth-Monitoring/m-p/1132480#M6431</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am trying to record the number of number of memory accesses for each core on an Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz using its MBM capability. The function I am using is listed below. I followed the steps in Intel's software developer manual vol 3 section 17.18 but I do not get any output. I tried all three events (0x01, 0x02, and 0x03) listed in table 17-18 but none worked. Does anyone know what I am doing wrong here?&lt;/P&gt;&lt;P&gt;void InitRMID (aff_counters_t *cntrs)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; int i, cpus_nr;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 pqr_assoc_msr, qm_evtsel;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 rmid, maxrmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 event;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; prfcnt_t *handle;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; L3CMTGetCapabilities(&amp;amp;cntrs-&amp;gt;L3Cap);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; printf("MaxRMID: %d and UpscalingFactor: %d\n", cntrs-&amp;gt;L3Cap.MaxRMID, cntrs-&amp;gt;L3Cap.UpscalingFactor);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; maxrmid = cntrs-&amp;gt;L3Cap.MaxRMID;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; cpus_nr = cntrs-&amp;gt;cpus_nr;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;\\ cpus, given from command line, should correspond to those of socket 0.&lt;BR /&gt;\\&amp;nbsp;RMID are associated to cpus like following: [MaxRMID-cpu0], [(MaxRMID-1)-cpu1]&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; rmid = maxrmid;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for(i = 0; i &amp;lt; cpus_nr; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle = &amp;amp;cntrs-&amp;gt;prfcnt&lt;I&gt;;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Association between core and RMID (Filling IA32_PQR_ASSOC register)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_rdmsr(handle-&amp;gt;msr_fd, IA32_PQR_ASSOC, &amp;amp;pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("pqr_assoc_msr before: %d\n",pqr_assoc_msr );&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pqr_assoc_msr &amp;amp;= 0xfffffffffffffc00;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((rmid &amp;gt; 0x4ff) || (rmid &amp;gt; maxrmid))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("rmid value exceeds the limits\n");&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit(-1);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmid &amp;amp;= 0x00000000000004ff;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pqr_assoc_msr |= rmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("pqr_assoc_msr after: %d\n",pqr_assoc_msr );&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("Associating CPU: %d with RMID: %lld and pqr_assoc_msr: %#18llx\n", handle-&amp;gt;cpu, rmid, pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_wrmsr(handle-&amp;gt;msr_fd, IA32_PQR_ASSOC, pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Select event in IA32_QM_EVTSEL (Filling RMID and EvtID)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; event = (rmid&amp;lt;&amp;lt;32);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qm_evtsel = event | 0x0000000000000002;&amp;nbsp; &amp;nbsp; \\Selecting the event 0x02&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("qm_evtsel value: %#18llx\n", qm_evtsel);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_wrmsr(handle-&amp;gt;msr_fd, IA32_QM_EVTSEL, qm_evtsel);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --rmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 23 Jul 2019 16:59:43 GMT</pubDate>
    <dc:creator>Kundan__Shivam</dc:creator>
    <dc:date>2019-07-23T16:59:43Z</dc:date>
    <item>
      <title>Memory Bandwidth Monitoring</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Memory-Bandwidth-Monitoring/m-p/1132480#M6431</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am trying to record the number of number of memory accesses for each core on an Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz using its MBM capability. The function I am using is listed below. I followed the steps in Intel's software developer manual vol 3 section 17.18 but I do not get any output. I tried all three events (0x01, 0x02, and 0x03) listed in table 17-18 but none worked. Does anyone know what I am doing wrong here?&lt;/P&gt;&lt;P&gt;void InitRMID (aff_counters_t *cntrs)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; int i, cpus_nr;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 pqr_assoc_msr, qm_evtsel;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 rmid, maxrmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; __u64 event;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; prfcnt_t *handle;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; L3CMTGetCapabilities(&amp;amp;cntrs-&amp;gt;L3Cap);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; printf("MaxRMID: %d and UpscalingFactor: %d\n", cntrs-&amp;gt;L3Cap.MaxRMID, cntrs-&amp;gt;L3Cap.UpscalingFactor);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; maxrmid = cntrs-&amp;gt;L3Cap.MaxRMID;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; cpus_nr = cntrs-&amp;gt;cpus_nr;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;\\ cpus, given from command line, should correspond to those of socket 0.&lt;BR /&gt;\\&amp;nbsp;RMID are associated to cpus like following: [MaxRMID-cpu0], [(MaxRMID-1)-cpu1]&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; rmid = maxrmid;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for(i = 0; i &amp;lt; cpus_nr; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle = &amp;amp;cntrs-&amp;gt;prfcnt&lt;I&gt;;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Association between core and RMID (Filling IA32_PQR_ASSOC register)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_rdmsr(handle-&amp;gt;msr_fd, IA32_PQR_ASSOC, &amp;amp;pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("pqr_assoc_msr before: %d\n",pqr_assoc_msr );&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pqr_assoc_msr &amp;amp;= 0xfffffffffffffc00;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((rmid &amp;gt; 0x4ff) || (rmid &amp;gt; maxrmid))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("rmid value exceeds the limits\n");&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit(-1);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmid &amp;amp;= 0x00000000000004ff;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pqr_assoc_msr |= rmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("pqr_assoc_msr after: %d\n",pqr_assoc_msr );&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("Associating CPU: %d with RMID: %lld and pqr_assoc_msr: %#18llx\n", handle-&amp;gt;cpu, rmid, pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_wrmsr(handle-&amp;gt;msr_fd, IA32_PQR_ASSOC, pqr_assoc_msr);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Select event in IA32_QM_EVTSEL (Filling RMID and EvtID)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; event = (rmid&amp;lt;&amp;lt;32);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qm_evtsel = event | 0x0000000000000002;&amp;nbsp; &amp;nbsp; \\Selecting the event 0x02&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf("qm_evtsel value: %#18llx\n", qm_evtsel);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prfcnt_wrmsr(handle-&amp;gt;msr_fd, IA32_QM_EVTSEL, qm_evtsel);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --rmid;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2019 16:59:43 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Memory-Bandwidth-Monitoring/m-p/1132480#M6431</guid>
      <dc:creator>Kundan__Shivam</dc:creator>
      <dc:date>2019-07-23T16:59:43Z</dc:date>
    </item>
  </channel>
</rss>

