linux CPU 画正弦曲线 编程之美
2014-02-22 12:02
260 查看
捣鼓了一下,画成了这个熊样子,算是蒙混过关了吧。
思想:大致原理是参考编程之美这本书上的,cpu的使用率是一段时间内cpu繁忙的平均值,所以可以通过一段时间内cpu繁忙的时间和空间的时间来控制cpu的使用率。
linux下面用gettimeofday函数获得系统精确时间,如果系统支持,可以精确到us。
interval是取样间隔,算出第i个间隔里面对应cpu繁忙(busy)的时间和空闲(idle)的时间,也就是:
busy[i] = cpu应该的使用率 * interval,
idle[i] = interval - busy[i] 。
因为我的cpu是多核的,需要用shed_setaffinity();函数绑定到第一个cpu,上面也是该cpu上的曲线。
代码如下:
N是采样的个数,即interval的个数。
T 是周期,毫秒表示,10s画一个正弦曲线。
思想:大致原理是参考编程之美这本书上的,cpu的使用率是一段时间内cpu繁忙的平均值,所以可以通过一段时间内cpu繁忙的时间和空间的时间来控制cpu的使用率。
linux下面用gettimeofday函数获得系统精确时间,如果系统支持,可以精确到us。
interval是取样间隔,算出第i个间隔里面对应cpu繁忙(busy)的时间和空闲(idle)的时间,也就是:
busy[i] = cpu应该的使用率 * interval,
idle[i] = interval - busy[i] 。
因为我的cpu是多核的,需要用shed_setaffinity();函数绑定到第一个cpu,上面也是该cpu上的曲线。
代码如下:
N是采样的个数,即interval的个数。
T 是周期,毫秒表示,10s画一个正弦曲线。
#include <stdlib.h> #include <math.h> #include <sys/time.h> #include <stdbool.h> #include <unistd.h> #include <stdio.h> #include <sched.h> #define N 50 #define PI 3.1415926 int main(int argc, char * argv[]) { //绑定cpu0 unsigned long mask = 1; sched_setaffinity(0, sizeof(mask), &mask); int T = 10000; // 10s int i; double busy , idle ; double interval = (double)T / N ; //ms //算出每个interval的空闲时间和繁忙时间 for(i = 0; i < N; i ++) { busy[i] = ((sin(2 * PI * i / N)/2 + 0.5) * 50 + 25 )/100 * interval; idle[i] = interval - busy[i]; printf("%d %.2lf %.2lf\n", i, busy[i], idle[i]); } int j = 0; struct timeval start_timeval; struct timeval cur_timeval; while (true) { gettimeofday(&start_timeval, NULL); double last_ms = (double)start_timeval.tv_sec * 1000 + start_timeval.tv_usec/1000 ; while (true) { gettimeofday(&cur_timeval, NULL); double cur_ms = (double)cur_timeval.tv_sec * 1000 + cur_timeval.tv_usec/1000 ; if (cur_ms - last_ms >= busy[j]) break; } usleep(idle[j] * 1000); j = (j + 1) % N; } exit(1); }
相关文章推荐
- 《编程之美》读书笔记(一):让CPU占用率画直线和正弦曲线(Java实现)
- 让多核CPU占用率曲线听你指挥(Linux实现)——《编程之美》1.1继续学习
- 编程之美——CPU正弦曲线
- 实现Linux版本的 cpu 正弦曲线
- 《编程之美》(Java实现) :让CPU占用率画直线和正弦曲线(Java实现)
- 让多核CPU占用率曲线听你指挥(Linux实现)——《编程之美》1.1继续学习
- 让多核CPU占用率曲线听你指挥(Linux实现)——《编程之美》1.1继续学习
- linux 进程、内存、cpu等查看命令
- Linux cpuidle framework(1)_概述和软件架构
- arm-linux源码分析之cpu初始化
- Linux查看CPU和内存使用情况
- linux查看系统cpu和内存使用状况的方法
- Linux查看系统cpu个数、核心数、线程数
- linux 下查看cpu位数 内核等参数命令
- linux下的CPU平均负载
- linux中查看cpu内存等信息
- Linux下判断cpu物理个数、几核
- linux 下查看cpu位数 内核等参数命令(转)
- 在linux中关于cpu的函数
- linux 在 cpu/内存 使用率