微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

精细粒度的nanosleep在linux上的c ++程序中不能省电

我想在我的linux机器上的C ++线程中定期调用一个采样函数。 我想在非常短的时间内(最好是1毫秒)重新启动我的function,但是我发现在1毫秒的时间内消耗的功率非常高:系统以双倍的功率运行,周期是5毫秒。 保持低功耗是我想要的function的主要关注点。

特别,

void* loop_and_sample(void* arg) { while(1) { sample(); nanosleep((struct timespec[]){{0,1000000}},NULL); } }

采取2x的力量:

void* loop_and_sample(void* arg) { while(1) { sample(); nanosleep((struct timespec[]){{0,5000000}},NULL); } }

我已经确定,我的采样器在两个频率上的功耗差异可以忽略不计,额外的功耗来自睡眠呼叫。 也就是说,即使我在上面的两个片段中注释了sample()行,第二个仍然占用了一半的权力。 有关我如何能够减less睡眠呼叫所消耗的功率的任何想法?

让Java在循环之间hibernate,在Linux上用命令行指定的hibernate时间

睡在C ++less于一毫秒

在C ++,platform:windows中进行睡眠操作

持续唤醒和睡眠在Linux上最小的电力使用情况?

准确的时间睡在python

仅供参考,我在24核心Intel Xeon上运行Ubuntu 3.2.0,search我的/ boot / config频率显示如下:

cat /boot/config-3.2.0-48-generic | egrep 'HZ' CONfig_RCU_FAST_NO_HZ=y CONfig_NO_HZ=y # CONfig_HZ_100 is not set CONfig_HZ_250=y # CONfig_HZ_300 is not set # CONfig_HZ_1000 is not set CONfig_HZ=250 CONfig_MACHZ_WDT=m

但是,运行这个脚本: http : //www.advenage.com/topics/linux-timer-interrupt-frequency.PHP ,我发现我的内核定时器中断至less是4016赫兹(这是我想要的4倍频率在样品)。 谢谢你的帮助!

Linux C ++用户空间应用程序实时hibernatefunction(POSIX,RaspBerry Pi)

Bash:无限的睡眠(无限的阻挡)

强制Intel Core i7 cpu暂时hibernate?

为什么我所有的线程使用sleep()睡眠?

在同一行中打印,并在C中暂停

问题几乎可以肯定不是睡眠呼叫,但事实上,您的cpu无法快速上下电。 进入睡眠之后,cpu几乎肯定不会立即使用更少的电量,所以需要一些时间来完成。 当你长时间的睡眠时,cpu可以更好地降低功耗。

我不确定在这里有什么可以做的,尽管在更频繁的唤醒时,可能会降低cpu的频率,可能会帮助降低功耗。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐