Articles of 性能

如何屏蔽从Linux调度程序的CPU(防止调度到该CPU的线程)?

有可能使用sched_setaffinity将一个线程固定到一个cpu,提高性能(在某些情况下) 从Linux手册页: 限制进程在单个CPU上运行也可以避免由于某个进程在一个CPU上停止执行而发生高速caching失效而导致的性能开销,然后重新开始在不同的CPU上执行 此外,如果我希望获得更实时的响应,我可以将该线程的调度策略更改为SCHED_FIFO ,并将优先级更改为某个较高的值(最高为sched_get_priority_max ),这意味着所讨论的线程应始终sched_get_priority_max其他线程线程运行在它的CPU上,当它准备好了。 但是,此时,实时线程刚刚被抢占的cpu上运行的线程可能已经驱逐了实时线程的一级caching条目。 我的问题如下: 是否有可能阻止调度程序调度任何线程到给定的CPU? (例如:要么从调度程序完全隐藏CPU,要么以其他方式) 有一些线程,必须能够在该CPU上运行? (例如:内核线程/中断线程) 如果我需要在该CPU上运行内核线程,那么使用什么是合理的最大优先级值,这样我就不会饿死内核线程?

是python自动并行IO和CPU或内存绑定部分?

这是前一个的后续问题。 考虑一下这个代码,它比上一个问题中的代码要less一些 (但是比我的代码要简单得多) import sys data=[] for line in open(sys.argv[1]): data.append(line[-1]) print data[-1] 现在,我期待更长的运行时间(我的基准文件是65150224行),可能要长得多。 事实并非如此,与以前一样,在2分钟内运行! 它是data.append()非常轻量级? 我不这么认为,于是我写了这个假代码来testing它: data=[] counter=0 string="a\n" for counter in xrange(65150224): data.append(string[-1]) print data[-1] 这运行在1.5到3分钟(运行间有很大的差异) 为什么我不能在以前的课程中学习3.5到5分钟? 显然,data.append()与IO并行发生。 这是个好消息! 但是它是如何工作的? 它是一个logging的function? 是否有我的代码的要求,我应该尽可能使其工作(除了负载平衡IO和内存/ CPU活动)? 还是只是简单的缓冲/caching行动? 再次,我标记了“linux”这个问题,因为我只对linux特定的答案感兴趣。 如果您认为值得这样做,那么可以随意给予操作系统不可知论者,甚至是其他操作系统的答案。

为什么我的Python应用程序停滞在“系统”/内核CPU时间

首先我不确定是否应该把这个作为一个Ubuntu问题或这里。 但我猜测这是一个Python问题,而不是一个OS问题。 我的Python应用程序运行在64位核心AMD服务器上的Ubuntu之上。 它通过ctypes呼叫一个.so来从networking上的5 GigE摄像机中提取图像,然后处理它们。 我在我的应用程序中看到频繁的暂停,导致相机的帧被外部相机库丢弃。 为了进行debugging,我使用了stream行的psutil Python包,每隔0.2秒在一个单独的线程中注销CPU统计信息。 我在那个线程中睡了0.2秒,当这个睡眠时间更长的时候,我也看到相机的镜头被丢弃了。 我已经看到了长达17秒的停顿! 我的大多数处理是在OpenCV或Numpy(都释放GIL)或在应用程序的一部分multiprocessing.Pool与59进程(这是为了解决Python的GIL)。 我的debugging日志logging在暂停发生时,在我的进程的很multithreading上显示了非常高的“系统”(即内核)CPU时间。 例如。 我看到的CPU时间如下(通常每0.2秒),然后突然一个大的跳跃('进程'的数字在CPU利用率,即1个CPU完全使用将1,Linux top显示123%将1.2): Process user | Process system | OS system % | OS idle % 19.9 | 10.5 | 6 | 74 5.6 | 2.3 | 4 | 87 6.8 | 1.7 | 11 | 75 4.6 | 5.5 | 43 | […]

使用htaccess文件会降低网站性能(特别是固态硬盘)的使用量?

Apache文档说( http://httpd.apache.org/docs/2.4/howto/htaccess.html ), “如果你可以访问httpd主服务器的configuration文件,你应该完全避免使用.htaccess文件。使用.htaccess文件会降低你的Apache http服务器。你可以包含在.htaccess文件中的任何指令在目录块中设置得更好,因为它具有相同的效果和更好的性能。“ 但是,这让我不知道影响的规模。 我有一个共享主机devise的架构,唯一的select是使用htaccess文件。 我正在转向数字海洋,在那里我可以做我喜欢的事情。 我需要判断是否坚持使用htaccess文件,或者从那里移动东西到集中的configuration文件并closures它们。 可能有100个小型低使用地点(当地企业)。 如果服务一个页面的性能下降大约在50ms以下,或者有一些其他的小问题,比如减less5%左右的并发访问次数,那么我不在乎。 如果效果足够大,人们可能会感觉到不同,那么我就足够花时间去改变事物了。 但是我没有发现任何事情给我一个指示,我可以期待什么次数的命中。 任何人都可以启发我吗? 编辑:我不寻找像确切的数字。 但是肯定有一个比我更能干的人做了一些基准testing,或者根据经验知道在特定情况下可能会有什么差别。

clock_gettime()足够亚微秒时间吗?

在我们的应用程序的Linux版本中,我需要一个embedded式分析器的高分辨率定时器。 我们的分析器测量范围与个别function一样小,所以它需要一个精度高于25纳秒的定时器。 以前我们的实现使用内联汇编和rdtsc操作直接从CPU查询高频定时器,但是这是有问题的 ,需要频繁的重新校准。 所以我尝试使用clock_gettime函数来查询CLOCK_PROCESS_CPUTIME_ID。 文档声称这给了我纳秒的时间,但我发现clock_gettime()的单个调用的开销超过250ns。 这使得无法将事件的时间长度设置为100ns,并且定时器function如此高的开销严重拖慢了应用程序的性能,扭曲了configuration文件的价值。 (我们每秒有成千上万的性能分析节点。) 有没有办法调用clock_gettime()开销小于¼μs? 还是有一些其他的方式,我可以可靠地获得时间戳计数器<25ns的开销? 或者我坚持使用rdtsc ? 下面是我用来clock_gettime()的代码。 // calls gettimeofday() to return wall-clock time in seconds: extern double Get_FloatTime(); enum { TESTRUNS = 1024*1024*4 }; // time the high-frequency timer against the wall clock { double fa = Get_FloatTime(); timespec spec; clock_getres( CLOCK_PROCESS_CPUTIME_ID, &spec ); printf("CLOCK_PROCESS_CPUTIME_ID resolution: %ld sec […]

multithreadingrandom_r比单线程版本慢

以下程序基本上与此处所述的程序相同。 当我使用两个线程(NTHREADS == 2)运行和编译程序时,我得到以下运行时间: real 0m14.120s user 0m25.570s sys 0m0.050s 当它只用一个线程(NTHREADS == 1)运行时,即使只使用一个内核,运行时间也会显着提高。 real 0m4.705s user 0m4.660s sys 0m0.010s 我的系统是双核的,我知道random_r是线程安全的,我很确定它是非阻塞的。 当同样的程序在没有random_r的情况下运行并且余弦和正弦的计算被用作replace时,双线程版本运行的时间大约是预期的1/2。 #include <pthread.h> #include <stdlib.h> #include <stdio.h> #define NTHREADS 2 #define PRNG_BUFSZ 8 #define ITERATIONS 1000000000 void* thread_run(void* arg) { int r1, i, totalIterations = ITERATIONS / NTHREADS; for (i = 0; i < totalIterations; […]

像Perfmon一样的Linux?

在窗口中有perfmon来监视系统的各种性能方面(称为计数器 )。 有没有像Linux一样的perfmon? 特别是在感兴趣的… CPU使用率(总/每进程/内核) 内存使用情况(总内存/每进程内核) …有没有可能将这些信息存储在文件中供将来分析?

在Linux的单个文件夹中的20万个图像,性能问题与否?

我有一个单一的文件夹(Linux服务器)超过20万图像的PHP / MySQL网站。 我不认为,我永远不需要在文件浏览器中看到他们,而是在他们的个人网页上查看网站。 他们只是显示在网站上的产品页面。 文件系统是ext3 。 所以将它们保存在单个文件夹中是明智的吗? 它可以减缓网站的性能?

如何使用linux`perf`工具来生成“Off-CPU”configuration文件

Brendan D. Gregg(DTrace书籍的作者)有一个有趣的分析变体: “离线CPU”分析 (和离CPU火焰图 ; 幻灯片2013,P112-137 ),看看线程或应用程序被阻塞不是由CPU执行的,而是等待I / O,页面error handling程序或由于CPU资源不足而被取消预定): 这一次揭示了哪些代码path被阻塞,并在closuresCPU时等待,以及确切的时间。 这与传统的概要分析不同,后者通常以给定的时间间隔对线程的活动进行采样,并且(通常)只在线程正在CPU上执行时检查线程。 他还可以将“非CPU”configuration文件数据和“On-CPU”configuration文件组合在一起: http : //www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html Gregg给出的例子是使用dtrace ,这在Linux操作系统中通常是不可用的。 但是也有一些类似的工具(ktap,systemtap,perf),而且我认为perf具有最广泛的安装基础。 通常通过执行生成的CPU上的configuration文件(这些function在CPU上更频繁地执行)。 如何将Gregg的Off-CPU示例转换为Linux中的perf分析工具? PS:在LISA13,p124的幻灯片中,有一个关于off-CPU火焰图的systemtap变体的链接:“ Yichun Zhang创build了这些,并且一直在Linux上使用SystemTap来收集configuration文件数据,参见:• http:// agentzh .org / misc / slides / off-cpu-flame-graphs.pdf “ ”(CloudFlare Beer Meeting于2013年8月23日)

在Linux上的性能分析

什么是在* nix上分析C / C ++应用程序的最佳工具? (我希望能够分析一个混合了(阻塞)文件IO,networkingepoll和fork()/ execv()的服务器,但是一般的帮助和更多的常规工具也是值得赞赏的。) 你能在一个概述中看到RAM,CPU,networking和磁盘的大系统图,并钻入它吗? 在内核列表上有很多关于perf timechart ,但是我还没有发现Ubuntu上的任何东西。