入职Oracle 以后想着把之前写过的《编程之美》中控制CPU使用率曲线的程序再写一边, 可是总是由于入职须要学习的东西太多, 没有时间。

程序早就写好了。 最终有机会贴出来了。o(∩∩)o..

最早的时候我採用C实现的效果并不好。 当时也没有认真调试。 最初的时候採用C#实现的效果反而不错, 由于C#有非常多方便的类库能够获取CPU的占用率, 控制sleep时间等等。事实上在C中也非常easy实现。

整体的算法思想, 这里就不再反复了, 能够參考以下的链接 :

http://blog.csdn.net/watkinsong/article/details/6865775

http://blog.csdn.net/watkinsong/article/details/6867373

http://blog.csdn.net/watkinsong/article/details/6867473

http://blog.csdn.net/watkinsong/article/details/6867666

http://blog.csdn.net/watkinsong/article/details/6870748

http://blog.csdn.net/watkinsong/article/details/6871235

本次算法的实现, 全部的代码都托管到了github, 而且使用了makefile编译文件。

地址: https://github.com/weixsong/aventador

以下简单的给出代码和效果截图。 这里的效果实现比曾经的C#实现的那个sin曲线要好一些。

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <unistd.h> extern const double PI = 3.1415926; // setup the cpu set of this program to run on
int set_cpu(int id)
{
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(id, &mask);
if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
{
fprintf(stderr, "warning: could not set CPU affinity/n");
return 0;
}
return 1;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <unistd.h> #include "CPUtils.h" const int CPU_KERNEL_ID = 0x0003; const int SAMPLE_COUNT = 200;
const int TIME_SLICE = 200; // ms in second
const int TIME_TRANFORM = 1000; // change ms to us
long * busy_span; // init the busy span, this is used to control the cpu busy time for each sample point
int init_busySpan(int sample_count)
{
busy_span = (long *)malloc(sample_count * sizeof(long));
if(busy_span == NULL)
{
return -1;
}
double radian = 0.0;
double radianIncrement = 2.0 / (double)sample_count;
int amplitude = (int)(TIME_SLICE / 2); // amplitude of sin curves, it means half of the time slice because sin() has negative value int i;
for(i = 0; i < sample_count; i++)
{
busy_span[i] = (long)(amplitude + sin(radian * PI) * amplitude);
radian = radian + radianIncrement;
}
return 1;
} int main(void)
{
if(set_cpu(CPU_KERNEL_ID) == 0)
{
printf("cpu affinity set failed\n");
}
else
{
printf("cpu affinity set succeeded\n");
} printf("clock per second:%ld \n", CLOCKS_PER_SEC);
fflush(stdout); if(!(init_busySpan(SAMPLE_COUNT)))
{
printf("init error \n");
return 0;
} int i = 0;
long busy_time; // us
long sleep_time; // us
clock_t begin;
for(i = 0; ; i = (i + 1) % SAMPLE_COUNT)
{
busy_time = busy_span[i] * TIME_TRANFORM;
begin = clock();
while((clock() - begin) < busy_time)
{
// loop
}
sleep_time = (long)((TIME_SLICE - busy_span[i])) * TIME_TRANFORM;
usleep(sleep_time);
} return 1;
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0a2luc29uZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

生成CPU使用率 sin 曲线 控制cpu使用率 编程之美的更多相关文章

  1. Linux 控制CPU使用率

    曾经看过<编程之美>上提到说使 CPU的使用率固定在百分之多少.然后这次刚好要用到这个东西,下面是一个简单的实现.基于多线程: Linux 版本: #include <iostrea ...

  2. second blog编程之美------控制cpu曲线

    先贴程序: 以前看过这个算法, 不过没什么印象,大概记得它利用while循环来控制cpu利用率 #include int main(int argc,char*argv[]) {         wh ...

  3. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥

    http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...

  4. 第1章 游戏之乐——让CPU占用率曲线听你指挥

    让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...

  5. 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)

    [目录] 不考虑其他进程,cpu画正弦曲线 获取总体cpu利用率 获取多核处理器单个cpu利用率 考虑其他进程,cpu画正弦曲线 下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文 ...

  6. 让cpu占用率曲线听你指挥(多核处理器)

    编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html  [目录] 不考 ...

  7. Linux资源控制-CPU和内存

    主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的. Linux系统中有多 ...

  8. Linux资源控制-CPU和内存【转】

    转自:http://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进 ...

  9. Cgroups控制cpu,内存,io示例

    Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核. Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的 ...

随机推荐

  1. P1872 回文串计数(回文树)

    题目描述 小a虽然是一名理科生,但他常常称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名其妙的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛.然而,他很快发现这并不能满足他热爱背诵的心,但 ...

  2. Ehcache学习总结(3)--Ehcache 整合Spring 使用页面、对象缓存

    Ehcache 整合Spring 使用页面.对象缓存 Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式 ...

  3. 洛谷 P3152 正整数序列

    P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...

  4. bzoj2843极地旅行社题解

    题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出yes并修建.改动一个岛上帝企鹅的 ...

  5. URAL 1823. Ideal Gas(数学啊 )

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1823 1823. Ideal Gas Time limit: 0.5 second Me ...

  6. 动态网页爬取样例(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test" ...

  7. [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树

    链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...

  8. BZOJ5105: [CodePlus2017]晨跑

    [传送门:BZOJ5105] 简要题意: 给出a,b,c,求a,b,c的最小公倍数 题解: 直接搞(最近刷水题有点心态爆炸) 参考代码: #include<cstdio> #include ...

  9. Exception: Operation xx of contract xx specifies multiple request body parameters to be serialized without any wrapper elements.

    Operation 'CreateProductCodeStock' of contract 'IChileService' specifies multiple request body param ...

  10. POJ 1330 Nearest Common Ancestors 倍增算法的LCA

    POJ 1330 Nearest Common Ancestors 题意:最近公共祖先的裸题 思路:LCA和ST我们已经很熟悉了,但是这里的f[i][j]却有相似却又不同的含义.f[i][j]表示i节 ...