硬盘分为机械硬盘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硬盘读写速率相关推荐

  1. linux下测试磁盘的读写IO速度-简易方法

    linux下测试磁盘的读写IO速度-简易方法 参考资料: https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是 ...

  2. linux下测试磁盘的读写IO速度

    有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策. 下面是两种测试方法: (1)使用h ...

  3. Linux下测试SSD固态硬盘写入速度

    最近买了一个256GB的SSD固态硬盘,想测试一下写入速度,于是如下操作. 部分代码: 1 gettimeofday(&start, NULL); 2 int fd = open(" ...

  4. linux 下对SSD 进行读写测试

    1.列举 PCIE设备 lspci 2.mount ssd 设备 mkdir /ssd mount /dev/nvme0n1p1 /ssd 3.对SSD 进行写操作 cd /ssd dd if=/de ...

  5. linux 测试串口命令,Linux 下测试串口的命令microcom

    昨天应为要测试主板上的串口,查了一下,可以使用microcom 这条命令进行测试. 命令使用方法很简单: Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPE ...

  6. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  7. linux挂载固硬盘装,linux下安装新硬盘并挂载mount

    linux下安装新硬盘并加载使用手记 ================================================================================ ...

  8. linux下查看系统socket读写缓冲区

    一:linux下查看系统socket读写缓冲区大小配置: http://blog.csdn.net/herecles/article/details/8146017 1. tcp 收发缓冲区默认值 [ ...

  9. bios设置识别linux硬盘,linux下如何查看硬盘插在主板那个SATA接口上?梅捷主板SY-A77M3+ bios设置 咋设置啊...

    在上一篇文章中,小编为您详细介绍了关于<联想的主板是哪的?修改技嘉主板bios安装联想win7 64位>相关知识.本篇中小编将再为您讲解标题linux下如何查看硬盘插在主板那个SATA接口 ...

最新文章

  1. 惊艳!为艺术而生的算法
  2. 分隔百度百科中的名人信息与非名人信息
  3. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法
  4. 插座上的Linux充电器.不..Marvell Plug Computer
  5. [转]Dynamic and static Rectangle in WPF
  6. 自然语言处理之关键词提取TF-IDF
  7. 5G时代到来,那我们现在用的4G手机怎么办?
  8. JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法
  9. Linux基础命令---cat
  10. mysql 手机归属地_盒子 - 手机归属地 MySql 数据
  11. 播放器的html代码怎么写,制作HTML播放器代码及方法
  12. php redis setex如何获取,php-redis中文参考手册_Ping_echo_set_get_setex_psetex_...
  13. 涉密计算机外送维修,涉密计算机送修
  14. A* 第k短路详解 (详尽)
  15. word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估(转)
  16. 一款非常不错的微信系统垃圾清理工具:微信清理大师,操作简单,清除较快。
  17. access汇总含义_如何用access进行分类汇总?
  18. rock64 linux,挑战树莓派:PINE64 发布 Rock64 Media Board Computer 开发者主板
  19. KVM环境部署与使用(附导入qcow2镜像及修改qcow2镜像密码)
  20. ArcGIS数据采集和处理

热门文章

  1. Redis——Redis哨兵模式
  2. 我的爬虫入门作(一)
  3. Android App签名
  4. EAX、EBX、ECX、EDX
  5. 微信小程序超过屏幕高度后显示底部图标
  6. 机器学习葡萄酒质量_通过数据和机器学习制作出更好的啤酒和葡萄酒
  7. python如何爬有道翻译_Python网络爬虫(八) - 利用有道词典实现一个简单翻译程序...
  8. MAC系统下解决Teamviewer 是商业用途只能连5分钟的问题--修改Teamviewer的id
  9. 【解决方法(最详细)】WIN10系统使用Teamviewer远程连接时被检测出商业用途
  10. 获取闲鱼已售商品的价格等信息