使用Trace-Event处理系统不能深度睡眠的问题

果真是系统开启了tuned服务,然后拉起了名字为tuned的线程.

查看一下tuned服务的配置文件:


  1. localhost:/home/jeff # tuned-adm active  
  2. Current active profile: sap-hana 
  3. localhost:/home/jeff # cat /usr/lib/tuned/sap-hana/tuned.conf  
  4. [main] 
  5. summary=Optimize for SAP NetWeaver, SAP HANA and HANA based products 
  6. [cpu] 
  7. force_latency = 70 

发现关于cpu这一项,设置强制延迟时间为70秒 force_latency = 70 ,这个是为了优化HANA数据库。

到底force_latency怎样起作用,经过一顿搜索,发现这个值是被设置进了/dev/cpu_dma_latency

使用lsof /dev/cpu_dma_latency, 发现tuned线程确实是在操作这个文件


  1. #lsof /dev/cpu_dma_latency 
  2. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME 
  3. tuned   18734 root    9w   CHR  10,60      0t0 11400 /dev/cpu_dma_latency 

而且Linux内核文档也说明了/dev/cpu_dma_latency文件,如果要对它进行写操作,要open之后写数据之后不close,如果释放掉了文件描述符它就又会恢复到默认值,这也印证了上面lsof /dev/cpu_dma_latency是有输出结果的.


  1. https://github.com/torvalds/linux/blob/v5.8/Documentation/trace/coresight/coresight-cpu-debug.rst 
  2. As specified in the PM QoS documentation the requested parameter  
  3. will stay in effect until the file descriptor is released. For example: 
  4. exec 3<> /dev/cpu_dma_latency; echo 0 >&3 
  5. … 
  6. Do some work… 
  7. … 
  8. exec 3<>- 

查看一下/dev/cpu_dma_latency文件的内容,确实是70,也就是(force_latency = 70)


  1. localhost:/home/jeff # cat /dev/cpu_dma_latency | hexdump -Cv  
  2. 00000000  46 00 00 00                                       |F…| 
  3. localhost:/home/jeff # echo $((0x46)) 
  4. 70 

此时查看一下系统中cpu各个睡眠态的描述和延迟时间值:


  1. # cd /sys/devices/system/cpu/cpu0/cpuidle/ 
  2. for state in * ; do 
  3. echo -e \ 
  4. "STATE: $state\t\ 
  5. DESC: $(cat $state/desc)\t\ 
  6. NAME: $(cat $state/name)\t\ 
  7. LATENCY: $(cat $state/latency)\t\ 
  8. RESIDENCY: $(cat $state/residency)" 
  9. done 

发现C3态的延迟时间是33微秒,C4的延时时间是133微秒,所以(force_latency = 70) ,

系统就只能睡眠到C3了 .(延迟时间就是从此睡眠态唤醒到运行态的时间)


  1. STATE: state0    DESC: CPUIDLE CORE POLL IDLE    NAME: POLL  LATENCY: 0  RESIDENCY: 0 
  2. STATE: state1    DESC: MWAIT 0x00    NAME: C1    LATENCY: 2  RESIDENCY: 2 
  3. STATE: state2    DESC: MWAIT 0x01    NAME: C1E   LATENCY: 10 RESIDENCY: 20 
  4. STATE: state3    DESC: MWAIT 0x10    NAME: C3    LATENCY: 33 RESIDENCY: 100 
  5. STATE: state4    DESC: MWAIT 0x20    NAME: C6    LATENCY: 133    RESIDENCY: 400 
  6. STATE: state5    DESC: MWAIT 0x32    NAME: C7s   LATENCY: 166    RESIDENCY: 500 

此时关闭tuned 服务, 再查看一下 /dev/cpu_dma_latency的值,变成了默认的2000秒

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章