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