linux下ssd电子盘速度检测

简介: <p>代码:</p><p></p><pre code_snippet_id="661125" snippet_file_name="blog_20150507_1_1358568" name="code" class="cpp">#include<stdio.h>#include<sys/time.h>#include <fcntl.h>#incl

代码:

#include<stdio.h>
#include<sys/time.h>
#include <fcntl.h>
#include <pthread.h>  


unsigned char pbuffer[1024*1024*8];//共用缓冲
void testssd1(int *ch )//写测试
{
    int i=0;
    int fd;
        if(*ch==0)
               fd = open("/ssd1/test.dat", O_RDWR|O_CREAT);
	if(*ch==1)
		fd = open("/ssd2/test.dat", O_RDWR|O_CREAT);
	if(*ch==2)
		fd = open("/ssd3/test.dat", O_RDWR|O_CREAT);
	if(*ch==3)
		fd = open("/ssd4/test.dat", O_RDWR|O_CREAT);
	if(*ch==4)
		fd = open("/ssd5/test.dat", O_RDWR|O_CREAT);
	if(*ch==5)
		fd = open("/ssd6/test.dat", O_RDWR|O_CREAT);
	if(*ch==6)
		fd = open("/ssd7/test.dat", O_RDWR|O_CREAT);
	if(*ch==7)
		fd = open("/ssd8/test.dat", O_RDWR|O_CREAT);


    if(fd<0)
    {
        printf("%d open error!\n",*ch);
        return ;
    }

    for(i=0;i<32;i++)
        write(fd,pbuffer,1024*1024*8);//每次8M,共计256MB

    close(fd);
    printf("SSD%d test over!\n",*ch);
    return ;
}


void testssd2(int *ch )//读测试
{
    int i=0;
    int fd;
        if(*ch==0)
               fd = open("/ssd1/test.dat", O_RDWR|O_CREAT);
    if(*ch==1)
        fd = open("/ssd2/test.dat", O_RDWR|O_CREAT);
    if(*ch==2)
        fd = open("/ssd3/test.dat", O_RDWR|O_CREAT);
    if(*ch==3)
        fd = open("/ssd4/test.dat", O_RDWR|O_CREAT);
    if(*ch==4)
        fd = open("/ssd5/test.dat", O_RDWR|O_CREAT);
    if(*ch==5)
        fd = open("/ssd6/test.dat", O_RDWR|O_CREAT);
    if(*ch==6)
        fd = open("/ssd7/test.dat", O_RDWR|O_CREAT);
    if(*ch==7)
        fd = open("/ssd8/test.dat", O_RDWR|O_CREAT);


    if(fd<0)
    {
        printf("%d open error!\n",*ch);
        return ;
    }

    for(i=0;i<32;i++)
        read(fd,pbuffer,1024*1024*8);

    close(fd);
    printf("SSD%d test over!\n",*ch);
    return ;
}


int main()
{
    printf("this is SSD Speed test begin!\n\n");
    pthread_t _id[8];  
    int ret,i,ch[8];
    struct  timeval  start;
    struct  timeval  end;
        float speed;


    for(i=0;i<1024*1024*8;i++)//初始化缓冲区
        pbuffer[i] = i&0xff;

    gettimeofday(&start,NULL);//开始计时------------
    for(i=0;i<8;i++)
    {
            ch[i] = i;//启动8个线程
	    ret=pthread_create(_id+i,NULL,(void *)testssd1,ch+i);  
	    if(ret!=0)  
	    {  
		printf("Create pthread error!\n");  
		return -1;  
	    }  
     }
    pthread_join(_id[0],NULL);  //等待各自到线程结束
    pthread_join(_id[1],NULL);  
    pthread_join(_id[2],NULL);  
    pthread_join(_id[3],NULL);  
    pthread_join(_id[4],NULL);  
    pthread_join(_id[5],NULL);  
    pthread_join(_id[6],NULL);  
    pthread_join(_id[7],NULL);  


    gettimeofday(&end, NULL);//停止计时-------------
    speed  = 1.0*(end.tv_sec-start.tv_sec)+(end.tv_usec-start.tv_usec)/1000000.0;//时间
    printf("ssd write speed:%6.5fMB/S(%6.5fsec)\n",256.0*8/speed,speed);         //速度

    printf("this is SSD Speed test  over!\n\n");
    return 0;
}

写测试运行结果:

# ./test
#  gcc ssd_test.c -o test  -lpthread
# ./test
SSD Speed test begin!

SSD4 test over!
SSD0 test over!
SSD6 test over!
SSD1 test over!
SSD5 test over!
SSD7 test over!
SSD2 test over!
SSD3 test over!
ssd write speed:1563.73594MB/S(1.30968sec)
SSD Speed test  over!

读测试运行结果:

# ./test

SSD Speed test begin!

SSD1 test over!
SSD7 test over!
SSD3 test over!
SSD2 test over!
SSD4 test over!
SSD5 test over!
SSD6 test over!
SSD0 test over!
ssd read speed:2315.16042MB/S(0.34623sec)
SSD Speed test  over!






相关文章
|
6月前
|
安全 Linux 编译器
内存泄漏检测组件的分析与实现(linux c)-mtrace工具使用
内存泄漏产生原因 在堆上使用malloc/remalloc/calloc分配了内存空间,但是没有使用free释放对应的空间。
163 0
|
6月前
|
监控 Linux 编译器
多线程死锁检测的分析与实现(linux c)-有向图的应用
在日常的软件开发中,多线程是不可避免的,使用多线程中的一大问题就是线程对锁的不合理使用造成的死锁,死锁一旦发生,将导致多线程程序响应时间长,吞吐量下降甚至宕机崩溃,那么如何检测出一个多线程程序中是否存在死锁呢?在提出解决方案之前,先对死锁产生的原因以及产生的现象做一个分析。最后在用有向环来检测多线程中是否存在死锁的问题。
103 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 用于检测和标记坏扇区(bad blocks)mbadblocks命令使用教程
【Shell 命令集合 磁盘维护 】Linux 用于检测和标记坏扇区(bad blocks)mbadblocks命令使用教程
91 0
|
29天前
|
存储 监控 固态存储
|
2月前
|
Linux 编译器 C语言
Linux内核对GCC版本的检测
Linux内核对GCC版本的检测
|
3月前
|
监控 Shell Linux
在Linux中,如何使用shell脚本检测磁盘使用率?
在Linux中,如何使用shell脚本检测磁盘使用率?
|
3月前
|
监控 Linux
在Linux中,如何检测并修复/dev/hda5?
在Linux中,如何检测并修复/dev/hda5?
|
3月前
|
存储 固态存储 Linux
在Linux中,什么是SSD和HDD,作用分别是什么?
在Linux中,什么是SSD和HDD,作用分别是什么?
|
3月前
|
JSON 监控 安全
在Linux中,如何使用Suricata进行实时网络威胁检测?
在Linux中,如何使用Suricata进行实时网络威胁检测?
|
3月前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?