Articles of 性能

Phabricator极其缓慢

我正在使用Phabricator进行代码评审,经过修改后,我已经按照自己的意愿设置了更多或更less的代码。 我只是有一个问题,我不能真正find解决办法。 浏览phabricator应用程序是顺利的,没有延误。 但是当我在“ 飞跃行动”中写评论(或者select任何其他行动),然后按下“ 小丑飞行 ” ( Clowncopterize)之后,它会一直持续下去。 右下angular的齿轮(繁忙指示器)持续旋转最多60秒。 我无法弄清楚这是什么原因。 我试图做一个顶端,我没有看到任何严重的: top – 11:40:36 up 9 min, 1 user, load average: 0.04, 0.10, 0.07 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem: […]

调用clock()时出现分段错误

我想了解使用下面的程序以编程方式caching的影响。 我正在与代码段错误。 我使用GDB(用-g -O0编译),发现它是分段错误 start = clock() (first occourance) 难道我做错了什么? 代码对我来说看起来很好。 有人能指出这个错误吗? #include <stdio.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #define MAX_SIZE (16*1024*1024) int main() { clock_t start, end; double cpu_time; int i = 0; int arr[MAX_SIZE]; /* CPU clock ticks count start */ start = clock(); /* Loop 1 */ for (i = 0; […]

是不可中断的睡眠我的Python程序的原因是真的很慢(如果是这样,我该如何解决这个问题?)?

我有以下select语句(使用sqlite3和pysqlite模块): self.cursor.execute("SELECT precursor_id FROM MSMS_precursor "+ "JOIN spectrum ON spectrum_id = spectrum_spectrum_id "+ "WHERE spectrum_id = spectrum_spectrum_id "+ "AND ROUND(ion_mz,9) = ? AND ROUND(scan_start_time,4) = ? "+ "AND msrun_msrun_id = ?", select_inputValues) 在Python中运行需要55秒。 直接在SQLite命令行上运行它只需要15ms。 现在,我注意到,在这个步骤中,Python程序进入了不间断的睡眠状态( 31283 ndeklein 18 0 126m 24m 3192 D 1.0 0.0 2:02.50 python ,顶级输出中的D),并从100%的CPU下降到1 % 中央处理器。 现在我在查询过程中注意到了,在运行查询时我也查看了顶部输出。 在这段时间内,top也显示它会进入不间断的睡眠状态,虽然它在R和D之间来回切换,只减慢到50%左右(根据D或R状态而变化)。 所以现在我认为这是减慢我的查询速度(请纠正我,如果不间断的睡眠与程序速度无关)。 如果这是真的,我怎样才能确保程序不会进入这种状态? 更新1: […]

如何测量TCP背压?

我正在试图调查与通过TCP套接字发布日志到中央服务器的代码的性能问题。 一个假设是,发行商正在经历套接字层面的背压。 有没有办法从操作系统获得背压指标? 我相信答案是针对操作系统的。 就我而言,我使用的是Ubuntu 14.04和默认的Canonical提供的3.13内核。 我想我可以通过缩放正在发布的消息量并测量等待套接字写入完成所花费的相对时间量来检测背压。 但似乎这是一个普遍的问题,find一个通用的方法来衡量它。 (但是,在我的Googlesearch中,我所发现的只是关于连接过程中阻塞的讨论以及关于背压如何工作的解释。)

如何确保数据到达存储器,绕过内存/caching/缓冲IO?

在Linux中,如何确保我的系统write()调用(和类似的write-IO调用/变体)到达非易失性存储,绕过内存/caching/缓冲IO?

如何在dtrace中查找参数

代码 dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }' dtrace: description 'syscall::read:entry ' matched 1 probe ^C bash /proc/1709/psinfo 1 loader /zp/space/f2 1 nscd /etc/user_attr 1 bash /export/home/mauroj/.bash_history 2 loader /zp/space/f3 2 nscd /etc/group 2 su /etc/default/su 8 su /devices/pseudo/sy@0:tty 9 bash /dev/pts/5 66 Xorg /devices/pseudo/conskbd@0:kbd 152 gnome-terminal /devices/pseudo/clone@0:ptm 254 dtrace代码fds[arg0].fi_pathname […]

哪些perf事件可以使用PEBS?

我想知道哪些事件可以在我的CPU(桑迪桥)上有精确的修饰符。 英特尔软件开发人员手册(表18-32。英特尔微体系结构代码名称Sandy Bridge的PEBS性能事件)仅包含以下事件: INST_RETIRED , UOPS_RETIRED , BR_INST_RETIRED , BR_MISP_RETIRED , MEM_UOPS_RETIRED , MEM_LOAD_UOPS_RETIRED , MEM_LOAD_UOPS_LLC_HIT_RETIRED 。 SandyBridge_core_V15.json列出了PEBS> 0的相同事件。 不过有一些使用perf 例子 ,在cycles事件中增加:p 。 我可以在我的机器上成功运行perf record -e cycles:p 。 也perf record -e cycles:p -vv — sleep 1打印precise_ip 1 。 那么这是否意味着CPU_CLK_UNHALTED事件实际上使用了PEBS? 是否有可能获得完整的事件列表,支持:p ?

在Linux上,access()比stat()更快吗?

我假设access()只是stat()的一个包装,但是我一直在用googlesearch, 发现了一些关于用更便宜的访问调用取代stat调用的轶事 。 假设你只是想检查一个文件是否存在,访问速度更快? 它是完全不同的文件系统?

什么是“高度非自愿的背景”开关意味着什么?

我用 C语言重写了一部分代码。使用getrusage(2) C APItesting资源使用情况。 在更改代码之前: user time (ms): 21503 system time (ms): 372 involuntary context switches: 20 改变之后: user time (ms): 25589 system time (ms): 80732 involuntary context switches: 821 我看到很多involuntary context switches都是在我重写的代码中完成的。 我的问题不是关于如何减less上下文切换。 但.. 当“非自愿的上下文切换”更多时会发生什么? 它会以什么方式影响系统? PS:没有任何东西正在写入磁盘上没有活动。 它只是多次ping服务器。 更新: 增加了系统和用户的时间。 程序是multithreading的。 两种情况下都会产生相同数量的线程(3k线程)。 只有C中的底层API正在被重写。

当perf stat没有提供线索时,我怎样才能解释一个较慢的执行?

我的程序测量执行500次函数所需的时间(这个时间约为14秒),并报告每次执行的平均时间。 由于精确的时间测量很重要,所以我非常小心地去除时间测量中所有可能的噪音源。 该程序在Ubuntu 14.04下运行,具有root权限, nice -n -20 ,在屏蔽的CPU上(使用-k on选项来cset shield )。 超线程被禁用。 内存只被分配一次,以避免由于malloc导致的上下文切换。 在计时开始之前执行一个大的memset和500预热function执行,试图在定时器启动之前获得类似的数据高速caching状态。 该程序是相当小的,所以我不担心指令caching。 时间是以clock_gettime(CLOCK_MONOTONIC)返回的两个值的差值来clock_gettime(CLOCK_MONOTONIC) 。 下面是从连续5次运行的报告时间(以毫秒为单位,但是测量的时间是这次的500次,所以它是大约14秒): 28.77 。 请注意,这里有三个非常一致的时序结果(#1,#3和#4)。 我正在寻求帮助来理解和消除exception值的来源。 以下是第一次和最后一次运行的性能perf stat报告: 第一次运行: 29176.113027 task-clock (msec) # 0.999 CPUs utilized 596 context-switches # 0.020 K/sec 0 cpu-migrations # 0.000 K/sec 5,061 page-faults # 0.173 K/sec 104,825,303,791 cycles # 3.593 GHz <not supported> stalled-cycles-frontend […]