benchmark

filebench

Filebench的安装与使用
filebench参数
filebench
filebench介绍
filesystem测试工具之filebench
filebench
filebench介绍英ppt
filebench的github
filebench的github的wiki

mobilebench

安卓上有app可以直接下载

dmesg

dmesg日志内容保存在文件: /var/log/dmesg

dmesg -L # color
dmesg -H # human timestamp
dmesg -T # readable timestamp
dmesg --follow # 持续观察输出
dmesg | tail -10 # 最后10行,也可以使用其它,如more,less,grep
-T	输出已读的时间戳
-u	控制输出用户空间的日志
-c	清除dmesg日志,但是日志保存的位置内容不会被删除
dmesg -h
man dmesg

    emerg: System is unusable.
    alert: Action must be taken immediately.
    crit: Critical conditions.
    err: Error conditions.
    warn: Warning conditions.
    notice: Normal but significant condition.
    info: Informational.
    debug: Debug-level messages.

使用dmesg -l info或者dmesg --level=info仅输出info级别的日志,这不包括更高级别的日志。
dmesg -l debug,notice同时输出多种级别的日志。
使用命令tail -f /var/log/dmesg来实时监控dmesg的日志输出。watch "dmesg | tail -20"

查看当前控制台的打印级别
cat /proc/sys/kernel/printk

#include 
#include 
#include 
#include //内核编译的配置信息
#include 
#include 
#define __LOG_BUF_LEN   (1 << CONFIG_LOG_BUF_SHIFT)//在2.6.28内核中为默认1<<17,这才是真正dmesg buffer的大小,网上其他都扯淡。
#define __LOG_PATH     "/log/dmesg.log"
#define LOG_SLEEP(x)   (sleep(x))
#define __LOG_SIZE     104857600//大于100M时删除文件
#define BUF_SIZE       256

long check_log_size(void) {
       struct stat f_stat;
       if( stat( __LOG_PATH, &f_stat ) == -1 ){
              return -1;
       }
       return (long)f_stat.st_size;
}
int main() {
       unsigned char buf[__LOG_BUF_LEN]={0,};
       unsigned char tmpbuf[BUF_SIZE]={0,};
       int ret = 0;
       FILE *fp =NULL;
       struct tm *ptr;
       time_t lt;

       daemon(0,0);//进入守护模式

       while(1){
             LOG_SLEEP(10);
              fp = fopen(__LOG_PATH,"a+");
              if(NULL == fp){
                    continue;
              }
              ret = klogctl(4,buf,__LOG_BUF_LEN);//获得dmesg信息
              if(0 >= ret){
                    perror("klogctl ");
                    fclose(fp);
                    continue;
              }
              lt = time(NULL);//获得时间
              ptr = (struct tm *)localtime(&lt);
             sprintf(tmpbuf,"      [LOG TIME:]      %s",asctime(ptr));
             fwrite(tmpbuf,strlen(tmpbuf),1,fp);
             fwrite(buf,strlen(buf),1,fp);

             fclose(fp);

             if(__LOG_SIZE < check_log_size()){
                    unlink(__LOG_PATH);//删除该文件
              }
             memset(tmpbuf,0,BUF_SIZE);
             memset(buf,0,__LOG_BUF_LEN);
       }
       return 0;
}

fio

https://github.com/axboe/fio
https://www.cnblogs.com/zero-gg/p/9296603.html
https://blog.csdn.net/don_chiang709/article/details/92628623
https://www.jianshu.com/p/9d823b353f22

CPU,硬盘,网络速度对比
在 CPU 的角度以具体的数据来量化 CPU、磁盘、网络的速度,对计算机各个组件不同的速度差异有个更直观的认识。

  1. CPU : 每个指令大概需要 0.38ns,以此作为对比的基本单位 1s
  2. 一级缓存:读取时间大约为 0.5ns,对比 CPU的时间大约是 1.3s
  3. CPU 分支预测错误: 耗时为 5ns,对比 CPU 的时间大约是 13s
  4. 二级缓存:读取时间大约为 7ns,对比 CPU 的时间大约是 18.2s(与一级缓存相差了一个数量级)
  5. 锁:互斥锁的加锁和解锁大约需要 25ns,对比 CPU 的时间大约是 65s(一分钟)。所以说,在并发编程中,锁是一个很耗时的操作
  6. 内存:每次内存寻址需要 100ns,对比 CPU 的时间大约是 260s(四分钟,又提升了一个数量级)。CPU 和内存之间的瓶颈被称为冯诺依曼瓶颈
  7. 一次 CPU 上下文切换:大约耗时为 1500ns,对比 CPU 的时间大约是 65 分钟(一个小时)。在上下文切换的时间内,CPU 没有做任何有用的计算,只是切换了两个不同进程的寄存器和内存状态。
  8. 在 1Gbps 的网络上传输 2k 的数据需要 20us,对比 CPU的时间大约是 14.4 个小时(理论值,实际中可能更久),可以看到网络上非常少的数据传输对于 CPU 来说已经很漫长了
  9. SSD 随机读取耗时为 150us,对比 CPU 的时间为 4.5 天。SSD 的速度已经比机械硬盘快很多了,但对于 CPU 来说速度就想乌龟一样。所以应该少写 I/O 设备读取的代码,把常用的数据放到内存中作为缓存。
  10. 从内存中读取1MB 的连续数据,耗时大约是 250us,对比 CPU 的时间是 7.5 天
  11. 同一个数据中心网络上跑一个来回需要 0.5ms,对比 CPU 的时间大约是 15 天(半个月)。
  12. 从 SSD 读取 1MB 的顺序数据,大约学院 1ms,对比 CPU 的时间大约是一个月
  13. 磁盘寻址时间是 10ms,对比CPU 的时间是 10 个月
  14. 从磁盘读取 1MB 的连续数据需要 20ms,对比 CPU 的时间是 20 个月。所以说IO 设备是计算机系统的瓶颈
  15. 从世界上不同城市的网络上走一个来回,平均需要 150ms,对比 CPU 的时间是 12.5 年。所以程序和架构都会尽量避免不同城市或者是跨国家的网络访问
  16. 虚拟机重启一次需要 4s 的时间,对比 CPU 的时间是 300 多年
  17. 物理服务器重启一次的时间是 5min,对比 CPU 的时间是 2万5千年。

你可能感兴趣的:(linux,linux)