Articles of 分析

测量时间:gettimeofday,TSC和时钟滴答声之间的差异

我正在为我的部分程序做一些性能分析。 我尝试用以下四种方法来衡量执行情况。 有趣的是,他们显示出不同的结果,我不完全了解他们的差异。 我的CPU是Intel(R)Core(TM)i7-4770。 系统是Ubuntu 14.04。 预先感谢任何解释。 方法1:使用gettimeofday()函数,结果以秒为单位 方法2:使用类似于https://stackoverflow.com/a/14019158/3721062的rdtsc指令 方法3和4使用英特尔的性能计数器监视器 (PCM)API 方法3:使用PCM的 uint64 getCycles(const CounterStateType & before, const CounterStateType &after) 其描述(我不太明白): Computes the number core clock cycles when signal on a specific core is running (not halted) Returns number of used cycles (halted cyles are not counted). The counter does not advance in the following […]

不能用linux perf来取样硬件caching事件

出于某种原因,我不能采样(性能perf record )硬件caching事件: # perf record -e L1-dcache-stores -a -c 100 — sleep 5 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.607 MB perf.data (~26517 samples) ] # perf script 但我可以数它们( perf stat ): # perf stat -e L1-dcache-stores -a — sleep 5 Performance counter […]

如何find使用shell脚本的两个文本文件之间的不寻常的行?

我有两个文本文件file1.txt&file2.txt file1.txt包含: a b c file2.txt包含: a b c d ef 输出应该是: d e f 我试图使用的命令是'diff file2.txt file1.txt'它只给出了通用行。

为什么相同的C程序有时快得多

那么,这将是一个没有细节的问题,因为我不知道如何更好地解释。 抱歉。 我有一个内存密集的C程序(很多指针)。 我有一个源,它是由我用gcc -O2编译的。 我在Ubuntu Linux上。 在程序的开始和结束时,有一个clock()函数来测量已用时间。 此外,我正在使用时间命令来检查时间。 问题是相同的程序有时比不更改任何东西快20%(或更慢)。 $ date; time ./cudd-example-8queens pon jun 20 00:49:05 CEST 2016 CPU TIME = 6.46 real 0m6.475s user 0m6.405s sys 0m0.067s $ date; time ./cudd-example-8queens pon jun 20 00:49:16 CEST 2016 CPU TIME = 8.03 real 0m8.051s user 0m7.995s sys 0m0.048s $ date; time ./cudd-example-8queens pon […]

在C程序中debugging慢函数(由gcc构build)

有这样的来源: void foo() { func1(); if(qqq) { func2(); }; func3(); func4(); for(…) { func5(); } } 我想获得这样的信息: void foo() { 5 ms; 2 times; func1(); 0 ms; 2 times; if(qqq) { 0 ms; 0 times; func2(); 0 ms; 2 times; }; 20 ms; 2 times; func3(); 5 s ; 2 times; func4(); 0 ms; 60 […]

oprofile不采样LLC_MISSEScaching事件

我试图使用oprofile来logging大型实时应用程序的caching未命中: $ sudo opcontrol –no-vmlinux –event=LLC_MISSES:100000 –session-dir=/var/tmp/oprofile -c=5 –start 但是当我看报告的时候,并没有提到caching漏洞。 它仅对CPU_CLK_UNHALTED进行采样: $ sudo opreport -l –session-dir=/var/tmp/oprofile CPU: Intel Architectural Perfmon, speed 1596 MHz (estimated) Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000 samples % image name app name symbol name 63243 92.2946 no-vmlinux no-vmlinux […]

如何衡量multithreading应用程序中的caching性能?

标题几乎总结了它。 我需要像每个线程caching命中/未命中的东西。 我如何获得这些信息? Cachegrind似乎没有工作,基于我的顺序程序给出了执行的X指令的计数和Y对于我的并行程序的事实,除了X = Y这一事实外,一切正常。 我认为Cachegrind不适用于线程? 任何其他工具,我可以使用? 谢谢。

如何为受控实验分析algorithm设置计算机?

我们从事经验性测量某些algorithm的运行时间(以检查其渐近行为)。 我试图提出一套规则来在实验前“清理”我们的目标计算机。 这在Agner Fog的层面上并不是真正的性能,但是我仍然希望从尽可能干净的机器开始(并尽可能保持不变的开销)。 我到目前为止: 禁用所有电源pipe理 禁用屏幕服务器(也许禁用X?) 禁用networking 以单用户模式启动[Kenneth Hoste] 不止一次运行实验(以平息偶然事件) 频率调整configuration为以最高频率运行[binarym] ? 显然,多次重复实验会给我一些统计的力量,但是我仍然希望尽可能在干净的机器上做这个。 在程序分析过程中,人们知道还有哪些其他的技巧来保持机器的不变? 这是一台Linux机器,如果“规则”是Linux特定的,那就没关系。

DSTAT作为Python API?

是否有可能,在Linux机器上,导入dstat并将其用作api来收集操作系统指标,然后计算它们的统计信息? 我已经下载了源代码,并试图收集一些指标,但程序似乎是针对命令行使用进行了优化。 有关如何使用Dstat或任何其他库来获得所需function的任何build议?

有没有一个Linux等效/港口freebsd hwpmc?

目前我使用valgrind。 但我看起来不影响程序的执行。