标签: perf

CPU缓存性能。存储未命中与加载未命中

我使用 perf 作为基本事件计数器。我正在开发一个遭受数据缓存存储未命中的程序。其中比例高达80%。

我知道缓存原则上是如何工作的。它会在各种未命中情况下从内存加载,并在需要时从缓存中删除数据。我不明白的是:存储未命中和加载未命中之间有什么区别。它与加载和存储有何不同。你怎么能储存错过呢?

performance caching cpu-cache perf

3
推荐指数
1
解决办法
1万
查看次数

Perf:在 perf stat 输出中 [<n percent>] 记录是什么意思?

perf stat -e <events> <command> 许多不同的事件通常会返回这样的输出

   127.352.815.472 r53003c                                                      [23,76%]
    65.712.112.871 r53019c                                                      [23,81%]
   178.027.463.861 r53010e                                                      [23,88%]
   162.854.142.303 r5302c2                                                      [24,05%]
   ...
Run Code Online (Sandbox Code Playgroud)

百分比记录是什么意思?

performancecounter perf

3
推荐指数
1
解决办法
1296
查看次数

如何解决perf中的"未计数"?

perf stat -d ./sample.out输出为:

Performance counter stats for './sample.out':

          0.586266 task-clock (msec)         #    0.007 CPUs utilized          
                 2 context-switches          #    0.003 M/sec                  
                 1 cpu-migrations            #    0.002 M/sec                  
               116 page-faults               #    0.198 M/sec                  
          7,35,790 cycles                    #    1.255 GHz                     [81.06%]
     <not counted> stalled-cycles-frontend 
   <not supported> stalled-cycles-backend  
     <not counted> instructions            
     <not counted> branches                
     <not counted> branch-misses           
   <not supported> L1-dcache-loads:HG      
     <not counted> L1-dcache-load-misses:HG
     <not counted> LLC-loads:HG            
   <not supported> LLC-load-misses:HG      

       0.088013919 seconds time elapsed
Run Code Online (Sandbox Code Playgroud)

我读了为什么会出现 .但我甚至得到了基本的指示器,如指令,分支机构等.任何人都可以建议如何让它工作?

有趣的是:

sudo perf stat sleep 3

给出输出:

Performance counter stats …
Run Code Online (Sandbox Code Playgroud)

linux performance x86 perf

3
推荐指数
1
解决办法
1470
查看次数

Google Compute Engine 中的 Linux 性能事件分析不起作用

我刚开始使用 Google Compute Engine。我想使用 Linux 性能工具对我的应用程序进行一些各种性能事件测量,并最终进行示例分析。我已在 Ubuntu 16.04 LTS VM 上安装了 linux perf 工具。然而,即使是像周期这样的基本事件也会显示为“不支持”。我猜测底层 KVM 管理程序没有启用虚拟 PMU 支持,尽管我相信 KVM 确实通过非默认标志设置支持这一点。有什么办法可以让它发挥作用吗?

# perf stat -e cycles -a sleep 10

Performance counter stats for 'system wide':

<not supported>      cycles                   

  10.000598339 seconds time elapsed
Run Code Online (Sandbox Code Playgroud)

profiling kvm perf code-profiling

3
推荐指数
1
解决办法
1443
查看次数

Linux perf 工具 - 如何同时分析多个进程?如何提取 CPU 周期的百分比?

我正在尝试在我的 CPU 上分析一组进程。为了非常精确,我想使用perf stat命令来查看我的进程使用了​​多少 CPU 周期。这与 top 不同,在那里我只看到快照中使用的 CPU 百分比。

不幸的是,我没有找到同时分析多个进程的方法。这可能吗?

作为第二个问题:是否可以不仅看到使用的 CPU 周期,还可以看到在同一时间间隔内使用的 CPU 周期总量(或百分比)?

linux command-line profiling perf

3
推荐指数
1
解决办法
2084
查看次数

是否可以使用 eBPF 或 perf 来计算在单个跟踪函数中花费的时间?

目前,我可以告诉trace-cmd(一个 ftrace 前端)使用 ftrace 的函数图基础设施来跟踪指定的工作负载。使用一些跟踪数据处理工具,我可以查看调用函数的频率以及每个函数调用的相应总持续时间。示例输出可能如下所示,其中我跟踪了我的工作负载生成的 ext4 函数调用:

# trace-cmd post-processing example output
# function name, frequency, total duration (us)
ext4_alloc_inode(),1,35.567
ext4_read_inode_bitmap(),1,12.076
ext4_init_io_end(),2,41.216
ext4_journal_check_start(),39,716.3
ext4_da_write_end(),10,102.661
ext4_da_get_block_prep(),9,257.46999999999997
ext4_block_write_begin(),2,88.069
ext4_bio_write_page(),1,33.016
Run Code Online (Sandbox Code Playgroud)

我已经看到了可以由、、等生成的令人难以置信的火焰图,这让我相信我应该能够实现与使用或 的输出类似的输出。但是,有一些障碍:eBPFsystemtapperftrace-cmdperfeBPF

  1. 我的工作负载最多可以运行 15 分钟,如果我使用perf. 作为参考,您可以查看在更短的时间内跟踪 bash 的示例输出
  2. 我不太熟悉,eBPF无法确定是否可以获得与我的trace-cmd后处理示例输出类似的数据/输出。

对于那些比我更熟悉eBPFperf比我更熟悉的人,我想知道:

  • 是否可以使用eBPFperf实现我的目标?
  • 如果是这样,为什么可能?

如果您感觉特别慷慨,将不胜感激能帮助我实现目标的示例代码/命令。

trace ftrace perf bpf ebpf

3
推荐指数
1
解决办法
1330
查看次数

perf 支持的最大采样频率

最大采样频率的值是如何由linux内核决定的?如果 perf 在同一台机器上执行,为什么这个值会改变?

使用 perf 时,我注意到 perf_event_max_sample_rate 的值发生了变化吗?为什么?这个值不应该保持不变吗?

linux perf

3
推荐指数
1
解决办法
882
查看次数

C++ 函数名对于 perf 来说太长了

根据perf. 不幸的perf是没有显示整个函数名称,只有以下内容:

std::__detail::_Map_base<piece, std::pair<piece const, int>, std::allocator<std::pair<piece const, int> >, std::__detail::_Select1st, std::equa
Run Code Online (Sandbox Code Playgroud)

std::equa我无法向右滚动之后。如何找出整个函数名称以知道它是哪个函数?我在父函数中使用该地图做了很多事情,所以它可能是多件事。

c++ std perf

3
推荐指数
1
解决办法
598
查看次数

Docker Alpine 和 perf 在 docker 容器中相处不融洽

第一件事:

  1. 高山版本 3.9.0
  2. 性能[来自:http: //dl-cdn.alpinelinux.org/alpine/edge/testing ] 4.18.13
  3. Docker 18.09.3 构建 774a1f4

我的 Dockerfile

FROM alpine:latest

# Set the working directory to /app
WORKDIR /app/

# Install any needed packages specified in requirements.txt
RUN yes | apk add vim
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a  /etc/apk/repositories
RUN apk add --update perf
Run Code Online (Sandbox Code Playgroud)

问题,这些是在容器内运行的命令:

/ # cat /proc/sys/kernel/perf_event_paranoid 
-1
/ # perf stat -d sleep 1
Error:
No permission to enable task-clock event.

You may not have permission to collect stats.

Consider …
Run Code Online (Sandbox Code Playgroud)

perf docker alpine-linux

3
推荐指数
1
解决办法
1392
查看次数

改变 perf_event_mlock_kb 的后果

我试图了解更改/proc/sys/kernel/perf_event_mlock_kb.

  • perf的手册页

    非特权用户可以 mlock(2) 的最大页面数。默认值为 516 (kB)。

  • 内核文档

    每 CPU 环形缓冲区的控制大小不计入 mlock 限制。默认值为 512 + 1 页

让我感到困惑的是,两个来源都使用两个不同的单位 - 页数和内存 Kb。同时,_kb名称的后缀暗示该文件定义了 Kb 的数量。

我的理解是否正确,该措辞意味着该数字应该可以通过页面大小来判断,如果我在具有两个 vCPU 的机器上将文件设置为 8046,那么 perf 将能够为事件缓冲区占用多达 16Mb 的内存?

linux performance linux-kernel perf

3
推荐指数
1
解决办法
600
查看次数