生成CPU使用率 sin 曲线 控制cpu使用率 编程之美
入职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使用率 编程之美的更多相关文章
- Linux 控制CPU使用率
曾经看过<编程之美>上提到说使 CPU的使用率固定在百分之多少.然后这次刚好要用到这个东西,下面是一个简单的实现.基于多线程: Linux 版本: #include <iostrea ...
- second blog编程之美------控制cpu曲线
先贴程序: 以前看过这个算法, 不过没什么印象,大概记得它利用while循环来控制cpu利用率 #include int main(int argc,char*argv[]) { wh ...
- 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...
- 第1章 游戏之乐——让CPU占用率曲线听你指挥
让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...
- 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)
[目录] 不考虑其他进程,cpu画正弦曲线 获取总体cpu利用率 获取多核处理器单个cpu利用率 考虑其他进程,cpu画正弦曲线 下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文 ...
- 让cpu占用率曲线听你指挥(多核处理器)
编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html [目录] 不考 ...
- Linux资源控制-CPU和内存
主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的. Linux系统中有多 ...
- Linux资源控制-CPU和内存【转】
转自:http://www.cnblogs.com/wang_yb/p/3942208.html 主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进 ...
- Cgroups控制cpu,内存,io示例
Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核. Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的 ...
随机推荐
- P1872 回文串计数(回文树)
题目描述 小a虽然是一名理科生,但他常常称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名其妙的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛.然而,他很快发现这并不能满足他热爱背诵的心,但 ...
- Ehcache学习总结(3)--Ehcache 整合Spring 使用页面、对象缓存
Ehcache 整合Spring 使用页面.对象缓存 Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式 ...
- 洛谷 P3152 正整数序列
P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...
- bzoj2843极地旅行社题解
题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出yes并修建.改动一个岛上帝企鹅的 ...
- URAL 1823. Ideal Gas(数学啊 )
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1823 1823. Ideal Gas Time limit: 0.5 second Me ...
- 动态网页爬取样例(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test" ...
- [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树
链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...
- BZOJ5105: [CodePlus2017]晨跑
[传送门:BZOJ5105] 简要题意: 给出a,b,c,求a,b,c的最小公倍数 题解: 直接搞(最近刷水题有点心态爆炸) 参考代码: #include<cstdio> #include ...
- 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 ...
- POJ 1330 Nearest Common Ancestors 倍增算法的LCA
POJ 1330 Nearest Common Ancestors 题意:最近公共祖先的裸题 思路:LCA和ST我们已经很熟悉了,但是这里的f[i][j]却有相似却又不同的含义.f[i][j]表示i节 ...