因为最近在看multiprocessing 所以想看看多进程在多cpu机器上的利用率.然后早上写了个脚本在i5(4核),起了4个进程,发现只有一颗cpu跑的比较高,然后觉得不是很舒服.
开始还不知道就在晚上找是不是有什么方法可以指定某个cpu去执行一个进程,后来发现python有个第三方的库http://pypi.python.org/pypi/affinity/0.1.0,可以做这件事.看了下代码基本都是调用了系统的affinity mask的API.
我就在windows上装了试了下,貌似还真有点用.
看了下代码,一共也就3个方法,用起来很方便.
_get_handle_for_pid(pid, ro=True)
通过一个pid获取进程
get_process_affinity_mask(pid)
通过pid获取这个进程当前的affinity mask ,返回一个长整形('2l',就是在用2这个cpu)
set_process_affinity_mask(pid, value)
绑定pid这个进程到value所指的这个cpu上去(set_process_affinity_mask(3516, 1),就是用1这个cpu去执行pid为3516这个进程)
>>>import multiprocessing, time, signal
>>>import affinity
#我用multiprocessing创建了个进程
>>>p = multiprocessing.Process(target=time.sleep, args=(1000,))
>>>p.start()
>>>pid=p.pid
>>>print pid
5604
#先看了下5604这个进程用的是那个cpu
>>>affinity.get_process_affinity_mask(pid)
3L
#将5604这个进程用2这个cpu跑
>>>affinity.set_process_affinity_mask(pid, 2L)
3L
>>>affinity.get_process_affinity_mask(pid)
2L
还有就是我发现在linux上多进程和多线程系统内核调度的还是很平均的所以一般不会用到这些,只是今天好奇就看了下.
by:pako
email:zealzpc@gmail.com
分享到:
相关推荐
在多核处理器系统中,线程亲和性允许开发者指定某个线程应该运行在哪个特定的处理器核心上,从而提高性能、减少上下文切换带来的开销,并在某些情况下解决竞争条件。这个开源项目“Java-Thread-Affinity”提供了在...
特别是在处理密集型计算或者需要高效利用硬件资源的任务时,将特定的线程或进程绑定到特定的CPU核心上,可以有效提升效率,减少上下文切换带来的开销。本项目通过一个Gradle项目展示了如何实现这一功能,并提供了`...
Java线程亲和性(Thread Affinity)是操作系统层面的一个概念,它允许我们将特定的线程绑定到CPU的特定核心上,以优化性能和减少线程间的上下文切换。在高并发、低延迟的系统中,如金融交易、实时数据分析等场景,...
Python的线程在多核情况下,由于GIL的存在,运行效率会比单核情况下还低,这个时候,可以通过设置运行Python代码的进程所在的CPU以提高线程的性能,达到和单核处理器时一致的性能。该代码从 ...
在Windows操作系统中,CPU亲和性(CPU Affinity)是一种技术,它允许操作系统或应用程序将一个或多个进程或线程绑定到特定的CPU核心上,以优化性能或避免某些资源竞争。动态绑定进程的CPU亲和性则是在运行时根据需要...
taskset命令可以让某个程序运行在某个(或)某些CPU上。使用taskset命令可以查看进程的CPU亲和力,例如: ``` taskset -p 14795 ``` 这将显示进程14795的CPU亲和力。可以使用-cp选项来打印CPU列表,例如: ``` ...
在Linux中,可以使用`sched_setaffinity`函数来设置进程或线程的亲和性,该函数允许我们指定一个CPU掩码,决定进程或线程可以运行在哪些CPU核心上。而在Windows中,可以使用`SetThreadAffinityMask`函数来达到同样的...
1. 性能优化:对于计算密集型任务,绑定进程到特定核心可以减少上下文切换带来的开销,提高效率。 2. 负载均衡:在多进程或多线程环境中,合理分配每个进程或线程的CPU亲和性可以帮助平衡系统负载,避免某个核心过载...
lua-affinity 是一个 linux 上用于控制CPU亲缘性的Lua模块。 更多细节,请查看sample.lua。 API: mask,err=affinity.getaffinity(pid) 获取pid相关的进程的亲缘性掩码. mask,err=affinity.setaffinity(pid,...
通过观察`/proc/interrupts`文件中的统计信息,可以看到中断44在不同的CPU上分发的情况,证明了亲和性设置的改变确实影响了中断处理的CPU。 调整中断亲和性有多种好处,包括: 1. **性能优化**:将中断分配给负载...
Php-affinity 通过设置cpu亲和性,可以将进程绑定到一个cpu核心上。一般在如下场景我们可能会希望修改进程的cpu亲和性: 频繁的并行运算 线程可伸缩性测试(通过增加cpu核心数量模拟线性扩展) 运行时间敏感的,...
CPU-Control software will handle the CPU-affinity for multicore-systems CPU-Control software will handle the CPU-affinity for multicore-systems. Instead of running each process on both CPUs you can ...
在本文中,我们将深入探讨如何在 Laravel 框架中实现 Affinity Integration,这是一个将 Laravel 应用程序与外部服务(如 CRM 或营销自动化工具)进行集成的重要实践。"Affinity Integration"通常指的是将不同系统...
纳米固体电亲和与热稳定的相关性,孙长庆,Yong Shi,Correlation between the thermal stability and electro-affinity of a nanosolid has been explored from the perspective of surface and interface bonding....
在嵌入式Linux系统中,CPU affinity是一种关键的性能优化技术,它允许我们控制进程或线程在哪个CPU核心上运行。"cpu_rmap.rar_cpu affinity"这个标题暗示了我们正在探讨一个与CPU亲和性相关的逆映射支持,可能是一个...
因此,采用线程绑定技术,即将线程固定在某个核心上执行,成为了一种提高多核平台应用性能的有效手段。 #### 2. 进程绑定到核的实现方法 ##### 2.1 通过编译器实现OpenMP线程绑定核 不同编译器提供了不同的方法来...
在 Linux 系统中,可以通过设置 /proc/irq/<irq_number>/smp_affinity 文件来绑定硬件中断到不同的 CPU 上。例如,要将 IRQ 号为 12 的中断绑定到 CPU 1 上,可以使用以下命令: ``` echo 2 > /proc/irq/12/smp_...
进化亲和力传播(EAP)是一种进化聚类方法,它试图对在多个时间点收集的数据进行聚类,同时考虑到潜在的动态并保持时间平滑性。EAP的主要独特功能是:EAP自动确定每个时间步长的群集数。通过依赖因素图中引入的某些...
在Linux操作系统中,为了优化系统性能,特别是在高负载的情况下,我们有时需要手动调整进程的CPU亲和性(CPU affinity),让特定的进程运行在指定的CPU核心上。这样做可以避免频繁的上下文切换,减少不必要的资源...
绑定软中断到指定的CPU可以确保软中断始终在同一个CPU上执行,从而提高系统的性能和稳定性。 如何绑定软中断到指定的CPU? 可以使用以下命令将软中断绑定到指定的CPU: echo "00000002" > /proc/irq/122/smp_...