免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2247 | 回复: 5
打印 上一主题 下一主题

[CPU及多核] 2.6.22 支持多核处理器的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-09 14:48 |只看该作者 |倒序浏览
请问下各位:

  目前使用的是E7400设备,使用的linux 版本为2.6.22编译kernel. 运行后查看cpuinfo,
  显示双核,但跑多种服务后显示cpu使用率一直在50%左右。最高双核加起来不高于60%,而且是瞬间值。
  因此怀疑一直使用了一个cpu,后来编写一个测试cpu运行的程序(死循环),发现最多只能 跑到50%。也就是单核在处理,
  请问是哪里问题?是否在kernel中有没有打开的开关?下边是显示的信息:
  1. [root@abcdef ~]# cat /proc/cpuinfo
  2. processor        : 0
  3. vendor_id        : GenuineIntel
  4. cpu family        : 6
  5. model                : 23
  6. model name        : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
  7. stepping        : 10
  8. cpu MHz                : 2793.076
  9. cache size        : 3072 KB
  10. physical id        : 0
  11. siblings        : 2
  12. core id                : 0
  13. cpu cores        : 2
  14. fdiv_bug        : no
  15. hlt_bug                : no
  16. f00f_bug        : no
  17. coma_bug        : no
  18. fpu                : yes
  19. fpu_exception        : yes
  20. cpuid level        : 13
  21. wp                : yes
  22. flags                : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
  23. bogomips        : 5588.05
  24. clflush size        : 64

  25. processor        : 1
  26. vendor_id        : GenuineIntel
  27. cpu family        : 6
  28. model                : 23
  29. model name        : Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz
  30. stepping        : 10
  31. cpu MHz                : 2793.076
  32. cache size        : 3072 KB
  33. physical id        : 0
  34. siblings        : 2
  35. core id                : 1
  36. cpu cores        : 2
  37. fdiv_bug        : no
  38. hlt_bug                : no
  39. f00f_bug        : no
  40. coma_bug        : no
  41. fpu                : yes
  42. fpu_exception        : yes
  43. cpuid level        : 13
  44. wp                : yes
  45. flags                : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
  46. bogomips        : 5585.17
  47. clflush size        : 64
复制代码
执行测试cpu程序后效果如下:

top - 14:39:56 up 27 min,  3 users,  load average: 0.26, 0.61, 0.54
Tasks:  56 total,   2 running,  54 sleeping,   0 stopped,   0 zombie
Cpu(s): 50.0%us,  0.0%sy,  0.0%ni, 49.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    340760k total,    28116k used,   312644k free,     1840k buffers
Swap:        0k total,        0k used,        0k free,    11360k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                              
1551 root      25   0  1440  224  184 R  100  0.1   0:15.67 tcpu                                  
  709 root      14  -5     0    0    0 S    0  0.0   0:00.03 kjournald                             
    1 root      15   0  1476  512  456 S    0  0.2   0:00.41 init                                 
    2 root      12  -5     0    0    0 S    0  0.0   0:00.00 kthreadd                              
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0                           
    4 root      39  19     0    0    0 S    0  0.0   0:00.00 ksoftirqd/0                           
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0                           
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1                           
    7 root      39  19     0    0    0 S    0  0.0   0:00.00 ksoftirqd/1                           
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1                           
    9 root      10  -5     0    0    0 S    0  0.0   0:00.02 events/0                              
   10 root      10  -5     0    0    0 S    0  0.0   0:00.92 events/1                              
   11 root      20  -5     0    0    0 S    0  0.0   0:00.00 khelper                              
   34 root      10  -5     0    0    0 S    0  0.0   0:00.00 kblockd/0                             
   35 root      10  -5     0    0    0 S    0  0.0   0:00.00 kblockd/

  我理解应当是Linux已经支持多核,但是cpu在处理上仍然是一个,是否kernel在处理上,编译的地方要打开一些选项?

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
2 [报告]
发表于 2012-11-09 15:51 |只看该作者
用两个进程试试
  1. #include <unistd.h>

  2. int main()
  3. {
  4.     int i;
  5.     pid_t pid;
  6.     pid = fork();
  7.     if (pid == 0) {
  8.         printf("this is child process\n");
  9.         while(1);
  10.     } else {
  11.         printf("this is father process\n");
  12.         while(1);
  13.     }
  14.     return 0;
  15. }
复制代码

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
3 [报告]
发表于 2012-11-09 16:06 |只看该作者
如果还不行,就用 sched_setaffinity 这个系统调用来强制将进程绑定到某个CPU核上。

论坛徽章:
0
4 [报告]
发表于 2012-11-12 09:47 |只看该作者
本帖最后由 nebula2005 于 2012-11-12 09:59 编辑

非常感谢:bensenq 兄,
  我后来使用同样的进程执行两次,的确cpu能到100%. 因此系统是支持的,
问题时就是kernel在报文处理方式上可能有问题, cpu负载最高50%左右。一直没找到原因。
我的问题就是代码在报文处理时候,双核的cpu负载总是在50%左右,如果使用函数调用方式绑定cpu,效果不好。

论坛徽章:
0
5 [报告]
发表于 2012-11-12 16:11 |只看该作者
一个进程在某一时间点只能在一个CPU上运行,如果跑两个进程或者更多的话才会充分利用多个CPU

论坛徽章:
0
6 [报告]
发表于 2012-11-13 10:25 |只看该作者
top ,输入1,看看多个CPU的负载情况,就知道了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP