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千年。