Linux下测试SSD硬盘读写速率
硬盘分为机械硬盘HDD和固态硬盘SSD两种。现在固态硬盘已经是大势所趋咯。SSD用的接口是NVME。在NVME协议下面还有一层PCIe协议。HDD硬盘接口有SATA,SATA接口常用的工作模式有AHCI。SATA硬盘接口最大速率是600MBytes/s。接下来我通过C代码测试SSD的读写性能。
代码采用的是直接IO方式,这个测的速率不加直接IO的四倍。
test_ssd.c
#define _GNU_SOURCE
#include<stdio.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
//#include <unistd.h> /* add r/w include is error */void print_usage(char *file)
{printf("Usage:\n");printf("%s <filename> <cnt> <ONCE_SIZE> <r/w>\n", file);
}int main(int argc, char **argv)
{time_t Time_Start,Time_End;double run_time = 0;char* realbuff = NULL;int fd,i,cnt,block_size,szie;int pagesize,error,flags;if( argc!=5){print_usage(argv[0]);return(-1);}if('r' == argv[4][0]){printf("running read operations....\n");flags = 0;}else if('w' == argv[4][0]){printf("running write operations....\n");flags = 1; }else{printf("r/w error\n");return -1;}fd = open(argv[1], O_CREAT | O_RDWR| O_DIRECT);if(fd <0){printf("open is fail\n");return-1;}pagesize=getpagesize();cnt = strtoul (argv[2], NULL, 0);szie = strtoul (argv[3], NULL, 0);block_size = (1024*1024*szie);realbuff = malloc(block_size+pagesize);if(realbuff ==NULL){printf("malloc realbuff is fail\n");return -1;}char *alignedbuff = (char*)((((unsigned int ) realbuff+pagesize-1)/pagesize)*pagesize);memset(alignedbuff,argv[1][1],block_size);if(1 == flags){Time_Start = clock();for(i=0;i<cnt;i++){error = write(fd, alignedbuff, block_size); if(error <=0){perror("error:");printf("write is fail\n");free(realbuff);return -1;}}//printf("%d %s %s\n",__LINE__,__FUNCTION__,__FILE__);Time_End = clock(); run_time = (double)(Time_End-Time_Start)/CLOCKS_PER_SEC;printf( "write %d M cost times:%f s\n",(szie*cnt),run_time);}else{Time_Start = clock();for(i=0;i<cnt;i++){error = read(fd, alignedbuff, block_size); if(error <=0){perror("error:");printf("write is fail\n");free(realbuff);return -1;}}Time_End = clock(); run_time = (double)(Time_End-Time_Start)/CLOCKS_PER_SEC;printf( "read %d M cost times:%f s\n",(szie*cnt),run_time);}free(realbuff);close(fd);return 0;
}
代码中红色部分需要注意,不能添加这个头文件,不然会出现读写错误,可能是这个头文件下面的write和系统调用不一样。没有去追究原因。测试结果如下:
将clock()函数更改为如下:
#include <sys/time.h>
long get_ms()
{
struct timeval t;
long tick;
gettimeofday(&t,0);
tick=(long)(t.tv_sec)*1000+(long)(t.tv_usec)/1000;
return tick;
}
By Design :Linux_Google
Linux下测试SSD硬盘读写速率相关推荐
- linux下测试磁盘的读写IO速度-简易方法
linux下测试磁盘的读写IO速度-简易方法 参考资料: https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是 ...
- linux下测试磁盘的读写IO速度
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策. 下面是两种测试方法: (1)使用h ...
- Linux下测试SSD固态硬盘写入速度
最近买了一个256GB的SSD固态硬盘,想测试一下写入速度,于是如下操作. 部分代码: 1 gettimeofday(&start, NULL); 2 int fd = open(" ...
- linux 下对SSD 进行读写测试
1.列举 PCIE设备 lspci 2.mount ssd 设备 mkdir /ssd mount /dev/nvme0n1p1 /ssd 3.对SSD 进行写操作 cd /ssd dd if=/de ...
- linux 测试串口命令,Linux 下测试串口的命令microcom
昨天应为要测试主板上的串口,查了一下,可以使用microcom 这条命令进行测试. 命令使用方法很简单: Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPE ...
- linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...
linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...
- linux挂载固硬盘装,linux下安装新硬盘并挂载mount
linux下安装新硬盘并加载使用手记 ================================================================================ ...
- linux下查看系统socket读写缓冲区
一:linux下查看系统socket读写缓冲区大小配置: http://blog.csdn.net/herecles/article/details/8146017 1. tcp 收发缓冲区默认值 [ ...
- bios设置识别linux硬盘,linux下如何查看硬盘插在主板那个SATA接口上?梅捷主板SY-A77M3+ bios设置 咋设置啊...
在上一篇文章中,小编为您详细介绍了关于<联想的主板是哪的?修改技嘉主板bios安装联想win7 64位>相关知识.本篇中小编将再为您讲解标题linux下如何查看硬盘插在主板那个SATA接口 ...
最新文章
- 惊艳!为艺术而生的算法
- 分隔百度百科中的名人信息与非名人信息
- 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法
- 插座上的Linux充电器.不..Marvell Plug Computer
- [转]Dynamic and static Rectangle in WPF
- 自然语言处理之关键词提取TF-IDF
- 5G时代到来,那我们现在用的4G手机怎么办?
- JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法
- Linux基础命令---cat
- mysql 手机归属地_盒子 - 手机归属地 MySql 数据
- 播放器的html代码怎么写,制作HTML播放器代码及方法
- php redis setex如何获取,php-redis中文参考手册_Ping_echo_set_get_setex_psetex_...
- 涉密计算机外送维修,涉密计算机送修
- A* 第k短路详解 (详尽)
- word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估(转)
- 一款非常不错的微信系统垃圾清理工具:微信清理大师,操作简单,清除较快。
- access汇总含义_如何用access进行分类汇总?
- rock64 linux,挑战树莓派:PINE64 发布 Rock64 Media Board Computer 开发者主板
- KVM环境部署与使用(附导入qcow2镜像及修改qcow2镜像密码)
- ArcGIS数据采集和处理
热门文章
- Redis——Redis哨兵模式
- 我的爬虫入门作(一)
- Android App签名
- EAX、EBX、ECX、EDX
- 微信小程序超过屏幕高度后显示底部图标
- 机器学习葡萄酒质量_通过数据和机器学习制作出更好的啤酒和葡萄酒
- python如何爬有道翻译_Python网络爬虫(八) - 利用有道词典实现一个简单翻译程序...
- MAC系统下解决Teamviewer 是商业用途只能连5分钟的问题--修改Teamviewer的id
- 【解决方法(最详细)】WIN10系统使用Teamviewer远程连接时被检测出商业用途
- 获取闲鱼已售商品的价格等信息