Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146582
  • 博文数量: 177
  • 博客积分: 761
  • 博客等级: 上士
  • 技术积分: 1518
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-04 22:37
文章分类

全部博文(177)

文章存档

2017年(1)

2016年(3)

2015年(33)

2014年(48)

2013年(60)

2012年(32)

分类: LINUX

2014-10-04 16:55:03

    最近一个项目需要相当高的执行效率。
    该项目的工作就是要比另一个网络位置相同的设备,拥有更快的处理速度。在用尽一切办法之后,发现成功率(比另一个设备更快的比例)只能达到70%~80%。
    最后想到提高进程在本机的执行速度,因为目前服务器都是8核CPU。所以指定进程运行于最空闲的CPU,拥有最高的执行优先级。结果效率相当明显,成功率达到了100%。
    以下是指定CPU及优先级的方法:

一、进程使用指定的CPU

  1. /***************************************************************
  2. *function name: Lfun_setcpuno *
  3. *return: *
  4. * 0 : success. *
  5. * -1 : parameter cpuno error. *
  6. * -2 : set affinity error. *
  7. *parameter: cpu number *
  8. *developer: zhonghaohua *
  9. *date: 2012-8-22 *
  10. ***************************************************************/
  11. //#include <unistd.h>
  12. //#define __USE_GNU
  13. //#include <sched.h>
  14. int Lfun_setcpuno(unsigned int cpuno)
  15. {
  16.     unsigned int cpucnt = sysconf(_SC_NPROCESSORS_CONF);
  17.     if(cpuno >= cpucnt)
  18.         return -1;

  19.     cpu_set_t mask;
  20.     CPU_ZERO (&mask);
  21.     CPU_SET (cpuno, &mask);

  22.     if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
  23.         return -2;

  24.     return 0;
  25. }

二、指定优先级

  1. setpriority(PRIO_PROCESS, 0, -20);
注意:root用户才有权提高优先级。

end.
阅读(4399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~