`
tcspecial
  • 浏览: 910358 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CPU Affinity

阅读更多

CPU亲和性是linux 2.6后出现的新功能,在多核环境下,能将进程或线程绑定到指定的CPU上,减少多进程或线程切换引起处理器的频繁迁移带来的性能损耗。

DPDK是Intel提供的高性能网络包采集库,能支持千兆万兆网卡数据采集,原因是其实现用到了CPU affinity,大内存管理,环形缓冲区等技术。将采集线程绑定不同的CPU上,避免线程在不同核上的切换,提高采集效率。

 

一. 测试

taskset 命令获取和设置cpu亲和性。

tasket -pc 0 1234  将pid为1234的进程绑定到cpu0上,top命令下输入1查看各cpu核心的内存占用情况

 

二. cpu affinity调度函数

1.1 进程调度

int sched_setaffinity(pid_t pid, size_t cpusetsize,  cpu_set_t *mask);

int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);

 

2.1 线程调度

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, onst cpu_set_t *cpuset);

int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

 

cpu_set_t 参数指定cpu掩码,通过下面几组函数设置:

CPU_ZERO(&cpuset) // 清空掩码

CPU_SET(1,&cpuset)  // 设置cpu1

 

三.测试

3.1 线程

#include <unistd.h> // sysconf
#include <stdio.h>

#define __USE_GNU // CPU_ZERO,CPU_SET使用需引入该宏
#include <pthread.h>

void *fun( void *arg );
void test_thread_affnity();

static int ncpus;

int main(int arg,char **argv)
{
	// 获取cpu核心数
	 ncpus = sysconf(_SC_NPROCESSORS_CONF);
	 printf("cpus:%d\n",ncpus);

	 // 测试线程绑定
	 test_thread_affnity();

	 pause();
	 return 0;
}


// 将耗时任务绑定至cpu0上
void *fun( void *arg )
{ 
	 int i = 1;

	 // attach to cpu0
	 cpu_set_t cpuset;
	 CPU_ZERO( &cpuset );
	 CPU_SET( 0%ncpus,&cpuset );

	 // set thread affinity
	 pthread_setaffinity_np( pthread_self(),sizeof(cpuset),&cpuset );

	 // 死循环
	 while(1)
	 {
	  if(i%10000000000 == 0)
	  {
		  printf("th-%u:I'm busying\n",pthread_self());
		  i = 0;
	  }

	  i++;
	 }

	return (void*)NULL;
}

void test_thread_affnity()
{
	 int i = 0;
	 pthread_t tid;
		
	 for( i=0;i<2;i++ )
	 {
		pthread_create( &tid,NULL,fun,NULL ); 
	 }
}

 

3.2 进程 

// 测试进程绑定
void test_process_affnity()
{
	pid_t pid = fork();

	if( pid == 0 )
	{
		cpu_set_t cpuset;
		CPU_ZERO(&cpuset);
		CPU_SET( 0%ncpus,&cpuset );

		// 将子进程绑定至cpu0
		sched_setaffinity( getpid(),sizeof(cpuset),&cpuset );

		waste_time();  // 干活中 ...
	}else
	{
		printf("father do nothing\n");
	} 
}

 

 

分享到:
评论

相关推荐

    cpu_rmap.rar_cpu affinity

    在嵌入式Linux系统中,CPU affinity是一种关键的性能优化技术,它允许我们控制进程或线程在哪个CPU核心上运行。"cpu_rmap.rar_cpu affinity"这个标题暗示了我们正在探讨一个与CPU亲和性相关的逆映射支持,可能是一个...

    安卓 进程/线程绑定cpu

    线程绑定到CPU的核心是通过修改线程的亲和性(CPU affinity)来实现的。在Java层,我们可以使用`android.os.Process`类中的`setThreadPriority()`方法结合`THREAD_PRIORITY_BACKGROUND`或`THREAD_PRIORITY_...

    pthread affinity

    在Linux系统中,`pthread`库提供了`pthread_attr_setaffinity_np`和`pthread_attr_getaffinity_np`这两个函数,用于设置和获取线程属性对象的CPU亲和性(CPU affinity)。 `pthread_attr_setaffinity_np`函数用于...

    获取多核CPU使用率,设置CPU亲和性

    CPU亲和性(CPU affinity)允许我们将进程或线程绑定到特定的CPU核心,以减少缓存的不一致性,提高效率。在C++中,可以使用` sched_setaffinity`函数,或者在Java中使用`Runtime.getRuntime().exec()`调用`taskset`...

    Windows下动态绑定进程的CPU亲和性的实例,内附实例,可以直接运行查看结果。

    在Windows操作系统中,CPU亲和性(CPU Affinity)是一种技术,它允许操作系统或应用程序将一个或多个进程或线程绑定到特定的CPU核心上,以优化性能或避免某些资源竞争。动态绑定进程的CPU亲和性则是在运行时根据需要...

    Linux下进程绑定多CPU运行

    这个主题涉及到多核处理器的使用、进程调度以及Linux内核的CPU亲和性(CPU affinity)设置。下面我们将详细探讨这个知识点。 一、多核处理器与并行计算 随着计算机硬件的发展,多核处理器已经成为主流,它允许单个...

    linux下调度器 多核 CPU绑定 schedule函数等等

    在多核CPU系统中,进程可以被绑定到特定的CPU核心上,这被称为CPU亲和性(CPU affinity)。这种绑定有助于减少缓存未命中,提高性能,特别是对于计算密集型任务。在Linux中,可以使用`sched_setaffinity`和`sched_...

    cpu核心管理工具processlassosetup64(还有其他功能)

    ProcessLasso可以通过调整游戏进程的CPU亲和力(CPU Affinity),确保游戏可以利用更多的处理器核心,从而提高游戏的运行效率和帧数。 CPU亲和力是操作系统中的一项特性,它决定了一个进程或线程可以运行在哪些CPU...

    linux下让进程运行在指定的cpu上.pdf

    在Linux操作系统中,为了优化系统性能,特别是在高负载的情况下,我们有时需要手动调整进程的CPU亲和性(CPU affinity),让特定的进程运行在指定的CPU核心上。这样做可以避免频繁的上下文切换,减少不必要的资源...

    percpu-km.rar_V2

    此外,percpu内存分配还涉及到一些底层的硬件特性,如CPU亲和性(CPU affinity)和内存局部性。通过合理地分配和管理percpu内存,Linux内核可以更好地利用多核处理器的并行处理能力,优化系统的响应速度和吞吐量。 ...

    DPDKL2fwd代码走读报告(代码流程分析).pdf

    该平台通过使用hugepage、uio、zero copy、cpu affinity等技术,实现了对传统Linux技术的优化,提高了数据处理性能。 DPDK的认识 DPDK主要应用于x86通用平台,转发处理网络数据包,定位在不需要专用网络处理器,但...

    设置任务的处理CPU号码

    然而,某些情况下,特别是对于计算密集型、高并发或者需要低延迟的应用,手动设置CPU亲和性(CPU Affinity)可以优化性能。 CPU亲和性允许我们指定一个进程或线程应该在哪个或哪些CPU核心上运行,避免不必要的跨...

    nginx的 CPU参数worker_processes和worker_cpu_affinity使用说明.rar

    在Nginx的配置中,`worker_processes`和`worker_cpu_affinity`是两个重要的参数,它们直接影响到Nginx服务器的性能和资源利用率。** **一、worker_processes** `worker_processes`参数用于设置Nginx工作进程的数量...

    【IT十八掌徐培成】计算机基础第01天-02.进制转换-cpu亲和力设置.zip

    CPU亲和力(CPU Affinity)是指将特定进程或线程绑定到一个或多个特定的CPU核心上,以优化性能或避免资源争抢。在多核处理器系统中,合理设置CPU亲和力可以减少任务调度带来的开销,提高高负载应用的效率,尤其是在...

    大规模容器实践之网路性能优化.pptx

    此外,文件讨论了CPU负载对容器的影响,以及CPU亲和性(CPU Affinity)如何调整以避免不必要的磁盘IO消耗CPU资源。监控是确保容器健康运行的关键,需要关注CPU利用率和磁盘IO对CPU的影响。 在内存管理方面,容器内...

    KVM性能优化最佳实践02.docx

    绑定 KVM 到指定的 CPU 上可以使用多种方法,例如使用 CPU affinity 或者使用 NUMA aware 的调度器。绑定 KVM 到指定的 CPU 上可以提高虚拟机的性能,因为这样可以减少 CPU 之间的数据交互,提高虚拟机的性能。 KVM...

    iperf-3.9-win64.zip

    -A, --affinity n/n,m set CPU affinity -B, --bind &lt;host&gt; bind to the interface associated with the address -V, --verbose more detailed output -J, --json output in JSON format --logfile f send ...

    vsphere-esxi-vcenter-server-501-resource-management-guide

    内存亲和性(CPU Affinity)允许将虚拟机绑定到特定的物理CPU核心,以减少跨核心通信,提高性能。同时,理解并适当配置内存资源是优化vSphere环境的关键。 总结来说,《vSphere ESXi & vCenter Server 5.01 资源管理...

    vSphere Resource Management (ESXi 5.5, vCenter Server 5.5)

    - **CPU亲和性(CPU Affinity)**:将虚拟机绑定到特定的物理CPU核心,以优化性能或隔离任务。 - **主机电源管理策略**:调整以平衡能效和性能,例如动态调整CPU频率。 **5. 内存虚拟化基础** - **虚拟机内存**:...

    vMX-getting started guide for Vmware

    文档中还提到,流量在vMX路由器中流动时,需要考虑到CPU亲和性(CPU Affinity)的概念,它允许管理员将特定的进程或线程绑定到特定的CPU核心上运行,以减少上下文切换的开销,提升系统的处理效率。 对于自动化vMX...

Global site tag (gtag.js) - Google Analytics