我想制作一个读取DRAM计数器的内核模块,以获取从DRAM(https://software.intel.com/en-us/articles/monitoring-integrated-memory-controller-requests-in-the-2nd-3rd-and-4th-generation-intel)读取的数据数量。
在该页面上,他们说
“ BAR在总线0;设备0;功能0;偏移量048H上可用(在PCI配置空间中),而我想读取的UNC_IMC_DRAM_DATA_READS位于“ BAR + 0x5050”上。
这是否意味着我可以通过输入获得DRAM计数器的物理地址
sudo setpci 00:00:0 48.L
然后+ 0x5050获取UNC_IMC_DRAM_DATA_READS的地址?
实际上
sudo setpci 00:00:0 48.L
输出
fed10001
,然后我用busybox访问了0xfed15051。
sudo busybox devmem 0xfed15051
但是,最左边的两个位(在0x00123456中表示“ 00”)始终为零。
出了什么问题,如何通过总线,设备,功能和偏移正确获取物理地址。
谢谢:)
答案 0 :(得分:2)
低位是一个使能位,应从您使用的地址中排除。例如,请参见https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e3-1200v6-vol-2-datasheet.pdf(第3.12页,第57页)-在此处记录为MCHBAREN
标志。
本文档还提供了该技术说明中提到的相同寄存器的详细寄存器描述-从第7.43页第202页开始。
通常,对PCI寄存器的访问通常总是在32位(DWORD)边界上完成。您几乎永远找不到一个与32位字重叠的计数器。