- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试记录程序的所有内存访问,在我看来,这似乎是不可能的。我一直在尝试查看我在多大程度上可以记录内存访问的大部分(如果不是全部)。因此,我希望对PEBS计数器进行编程,以便可以看到所收集的内存访问样本数量的变化。我想知道是否可以通过修改PEBS计数器的计数器重置值来做到这一点。 (通常为零,但我想将其设置为更高的值)
因此,我一直希望自己编写这些小便计数器。有没有人有过操纵PEBS柜台的经验?具体来说,我一直在寻找良好的资源来了解如何对其进行编程。我已经阅读了英特尔文档并理解了步骤。但是我想了解一些示例程序。我已经通过以下github回购:-
https://github.com/pyrovski/powertools
但是我不确定如何以及从哪里开始。我还需要寻找其他好资料吗?任何有关理解和开始编程的好的资源的建议都将非常有帮助。
最佳答案
请不要在单次运行中混合使用跟踪和时序测量。
最快地运行Spec和跟踪所有内存访问都是不可能的。一次运行用于计时,另一次(更长,更慢)进行内存访问跟踪。
在https://github.com/pyrovski/powertools中,收集事件的频率由pebs_init
的reset_val参数控制:
https://github.com/pyrovski/powertools/blob/0f66c5f3939a9b7b88ec73f140f1a0892cfba235/msr_pebs.c#L72
void
pebs_init(int nRecords, uint64_t *counter, uint64_t *reset_val ){
// 1. Set up the precise event buffering utilities.
// a. Place values in the
// i. precise event buffer base,
// ii. precise event index
// iii. precise event absolute maximum,
// iv. precise event interrupt threshold,
// v. and precise event counter reset fields
// of the DS buffer management area.
//
// 2. Enable PEBS. Set the Enable PEBS on PMC0 flag
// (bit 0) in IA32_PEBS_ENABLE_MSR.
//
// 3. Set up the IA32_PMC0 performance counter and
// IA32_PERFEVTSEL0 for an event listed in Table
// 18-10.
// IA32_DS_AREA points to 0x58 bytes of memory.
// (11 entries * 8 bytes each = 88 bytes.)
// Each PEBS record is 0xB0 byes long.
...
pds_area->pebs_counter0_reset = reset_val[0];
pds_area->pebs_counter1_reset = reset_val[1];
pds_area->pebs_counter2_reset = reset_val[2];
pds_area->pebs_counter3_reset = reset_val[3];
...
write_msr(0, PMC0, reset_val[0]);
write_msr(1, PMC1, reset_val[1]);
write_msr(2, PMC2, reset_val[2]);
write_msr(3, PMC3, reset_val[3]);
reset
部分设置为较小的绝对值,例如-50或-10。使用PEBS,这可能会起作用(并尝试
perf -e cycles:upp -c 10
-不要要求以如此高的频率分析内核,只有用户空间
:u
并要求
:pp
要求精确,并要求带有
-c 10
的-10计数器。perf已将所有PEBS机制都实现了MSR和用于缓冲区解析)。
perf
linux工具(perf_events)来找到可接受的内存请求与所有内存请求的比率。通过将
perf
和
:p
后缀添加到事件说明符
:pp
中,将PEBS与
record -e event:pp
一起使用。也可以尝试使用
pmu-tools ocperf.py来简化英特尔事件名称的编码。
关于performance - 关于如何对PEBS(基于精确事件的采样)计数器进行编程的良好资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44218275/
PEB存储了windows中一个进程的信息。当进程结束时它是否仍然存储它? 最佳答案 它是一个进程内数据结构。不再有进程 == 不再有 PEB。 CreateProcess 返回的进程句柄引用了一个内
我想了解哪些事件可以对我的 precise 修饰符CPU(沙桥)。 英特尔软件开发人员手册(表 18-32。PEBS 性能英特尔微体系结构代号 Sandy Bridge 的事件)包含仅以下事件:INS
我想从“notepad.exe”进程获取PEB。有人知道怎么做吗? 我尝试了 GetModuleHandle API,但它没有返回有效的指针(每次都返回零),因为我必须是该模块的调用者进程。 因此,我
64 位 Windows 似乎使用 rcx = r8 = &PEB 调用 exe 的入口点和 rdx = r9 = &entrypoint好像入口点被声明 entrypoint(PEB *peb, v
PEBS 是 Intel CPU 为采样性能监视器提供的采样机制。 是否可以使用 PEBS 来测量过程的 IPC? PEBS 如何确定采样时间? 最佳答案 看我对Do Core i3/5/7 CPUs
这个标志的目的是什么(从操作系统端)?除 isDebuggerPresent 外,哪些函数使用此标志? 非常感谢 最佳答案 实际上是一样的,但读取 PEB 不需要通过内核模式。 更明确地说,IsDeb
规范:Windows 7 x64,Visual C++ 目标:我正在尝试获取 Remote PEB来自示例程序(例如 calc.exe)。我找到了 proc ID,并打开了一个具有所有良好权限的进程句
我现在正尝试使用 perf 通过 PEBS 测量 L3_Miss(LLC Miss)。 命令如下:perf record -d -e cpu/event=0xd1,umask=0x20/ppu -c
您好,我正在尝试使用 WinDbg 查看 memory.dmp 内核转储文件,以诊断崩溃。当我打开崩溃文件并获取符号时,我收到消息 BugCheck A, {2, ff, 4e, fffff801a4
我试图获得我自己的 PEB 并获得我自己的模块地址。我写了这样一个简单的代码: PLIST_ENTRY myModule = (PLIST_ENTRY)pebLdr->InMemoryOrderMod
我正在使用 ctypes 并尝试使用 NtQueryInformationProcess 函数获取 PEB 地址。 返回值为0,表示函数成功完成。但 PROCESS_BASIC_INFORMATION
我正在尝试通过使用硬件性能计数器来生成 D-TLB 未命中的地址跟踪。 Intel 处理器具有“基于事件的精确采样”(PEBS),可以在每次采样时转储硬件寄存器内容。我需要使用这个寄存器转储来创建导致
我正在尝试获取我的应用程序中已加载模块的列表(与安全/shellcode 有关,因此请避免调用 WINAPI)。我正在遍历 PEB->Ldr 模块双向链表,但每次打印 DLL 的名称时,它只是打印当前
我已经阅读了大量有关此事的 SO 问题,但我没有找到以正确方式执行此操作的真正权威指南。 我的目标是枚举 [断开连接和事件] 用户控制台 session 并在每个 session 中启动一个进程。每个
我有一个 64 位进程需要读取 Wow64 进程的 32 位 PEB。 我可以通过 NtQueryInformationProcess 获取它,但我意识到 Wow64 进程有两个 PEB(64 位和
我一直在尝试使用 linux perf 工具来对程序中的内存访问进行采样。具体来说,我使用 perf mem 命令检测程序中的负载: perf mem -t load rec myprogram pe
到现在为止,我有这段代码(我知道它很丑,但这不是现在的重点) 我不知道如何发布以下系统并构建正确的结构来访问另一个进程的 PEB。 我想做以下事情: HANDLE pHandle = OpenProc
我正在使用 perf userland 工具进行基于事件的采样:目标是试图找出某些影响性能的事件(如分支未命中和缓存未命中)在我正在处理的更大系统上发生的位置。 现在,像 perf record -a
我正在尝试使用汇编程序获取当前进程的 PEB 地址。 cpp文件: #include //#include extern "C" int* __ptr64 Get_Ldr_Addr(); int
是否可以直接从 Linux 用户空间进程而不是使用内核接口(interface)使用 Haswell CPU 功能 PEBS(基于精确事件的采样)? 我已成功使用 RDPMC 指令从用户空间访问性能计
我是一名优秀的程序员,十分优秀!