在linux上用C++获取CPU的使用率等信息

近期的工作中需要使用到CPU的使用率信息来在CPU的闲时做一些大计算量的工作,例如缩略图的计算,视频文件海报的生成等。怎么得到CPU的使用率信息成了需要解决的一个问题。

得到CPU的使用率最直接的方法就是调用Top命令,然后对Top的输出字符串进行解析,把相应的CPU使用率得出来。但是这里要使用system(), execv()的系统函数来直接调用命令行,这是我所不推荐的。不推荐的原因可以参考这篇文章Why system() is evil, 具体的就不展开了。

所以我们还是采用在代码里直接读取/proc/stat文件并解析里面相应的数据从而得到CPU的使用率。对于/proc/stat文件里所有的数据的解释,我们可以参考Linux Kernel的文档,在Proc里,参考1.8 Miscellaneous kernel statistics in /proc/stat。这里需要注意的有两点:

  1. 文件中所有数据的单位是USER_HZ,这个单位的意思原文是这样说的(typically hundredths of a second),其实就是1/100秒。

  2. 文件中所有的数据代表的意思是从系统启动到现在,各个不同的执行环境一共使用的USER_HZ数。所以这就决定了,只采样一次是没有办法知道相应的CPU使用率的,所以得至少采样2次,取它们的差值除以采样的间隔时间才能得到每秒CPU的使用率。

具体的核心代码如下:

  CPUStat firstStat;
  CPUStat secondeStat;

  if( readCPUStat(firstStat) == -1) {
    return 0;
  }

  sleep(1);

  if( readCPUStat(secondeStat) == -1) {
    return 0;
  }

  unsigned long long totalDiff = secondeStat.getTotal() - firstStat.getTotal();
  unsigned long long idleDiff = secondeStat.idle - firstStat.idle;

  return ((totalDiff - idleDiff) * 1000 / totalDiff  + 5 ) / 10;

注意这里对最后的百分比信息做了四舍五入。

所有的代码可以在我的代码库里找到CPU Usage

Read More

怎么在Jekyll自定义更多的社交媒体的图标

在Github开了博客,看了好多的主题,决定还是从最清爽的Jekyll Now开始,后面会慢慢的把内容丰富起来。

第一次只是做把新浪微博的图标链接加到脚注栏里和加了Google Analytics的东西,由于Google Analytics是已经支持的,需要做的仅仅是到Google的网站上去注册相应的一个项目,就可以监控本网站的访问流量了。

下面主要记录一下怎么添加的新浪微博的图标链接,因为在Google上也没有搜索到相应的信息,还是研究源代码管用,已经成功的完成了。其它的社交网站的图标也类似。

1 准备图标 weibo 这个图标我已经修改好了,注意图标大小一定是40*40的,否者会很难看,最好是支持透明背景的,要不也不好看。

2 生成图标的base64的data 这里列了一些可以做这个事情的网站:

b64.io

AskApache's Base64 encoder/decoder

duri.me

3 修改sass/svg-icons.scss 文件

在最后加上&号并把新的图片的base64的数据粘贴过去就可以了

4 修改_config.yml 文件

在footer-links下面添加一项 weibo,相应的值填上你在微博的子域名

5 修改_includes/svg-icons.html 文件

在最后加上一行,里面相应的字符换成weibo

Read More