zoukankan      html  css  js  c++  java
  • CPU亲和力

      1、taskset:retrieve or set a processes's CPU affinity

      1)CPU亲和力是一种调度特性,它将一个进程“绑定”到某个CPU集合上。当然,调度程序也支持天然的CPU亲和力,这意味着进程通常不会在CPU之间频繁迁移。

      CPU亲和力可用位掩码表示,如0x3表示CPU 0和CPU 1。缺省时进程的掩码位全为1。

      fork出来的子进程继承父进程的CPU亲和力掩码,调用execve之后进程保留原本的掩码。

      2)选项:-p:指定PID;-c:指定CPU集合,如0,5,7,9-11

      3)示例:

      设置PID为14035的进程的亲和力掩码:taskset -p 03 14035

      查看PID为14035的进程的CPU亲和力掩码:taskset -p 14035

      以指定亲和力掩码启动sshd命令:taskset 03 sshd -b 1024

      查看某个watchdog进程运行在哪个CPU上:

    $ ps aux|grep watchdog | grep -v grep
    root         6  0.0  0.0      0     0 ?        S    Jul03   0:01 [watchdog/0]
    ... ...
    root        50  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/11]
    root        54  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/12]
    root        58  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/13]
    root        62  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/14]
    root        66  0.0  0.0      0     0 ?        S    Jul03   0:01 [watchdog/15]
    $ taskset -c -p 50
    pid 50's current affinity list: 11

      4)使用CPU亲和力的几个原因:绑定到一个特定CPU有利于提高CPU缓存的命中率;可根据需要给进程专门指定一个或多个CPU;改变进程的亲和力掩码,测试复杂应用程序在不同硬件条件下的表现等。

      2、sched_setaffinity和sched_getaffinity

    // 设置和获取进/线程的CPU亲和力掩码。这两个系统调用是Linux特有的
    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);
    
    // 如果使用的是POSIX线程的API,则用以下两个函数
    int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);
    int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

      四个操作亲和力掩码(cpu_set_t,CPU集合)的宏:CPU_ZERO:清空集合;CPU_CLR:把一个CPU从集合中移除;CPU_SET:把一个CPU加入到集合;CPU_ISSET:测试一个CPU是否在集合中。

      常量CPU_SETSIZE指出CPU集合中最多能存放的最大CPU数加1。

      获取CPU个数:int num = sysconf(_SC_NPROCESSORS_CONF);

    不断学习中。。。

  • 相关阅读:
    MyBatis初学者配置
    hibernate错题解析
    Hibernate二级缓存配置
    Open Session In View
    Hibernate延迟加载Lazy
    ThreadLocal
    HQL基础查询语句
    Hibernate中saveOrUpdate()和merge()的区别
    springmvc的类型转换
    springmvc的初始化参数绑定
  • 原文地址:https://www.cnblogs.com/hanerfan/p/3585632.html
Copyright © 2011-2022 走看看