測試unix/linux系統PV操作的效能樣本

來源:互聯網
上載者:User

 使用此程式可以粗略的測試linux系統下pv操作的效能。(System V 號誌)

如下:

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ipc.h>#include <sys/sem.h>#include <asm/errno.h>#include <errno.h>#definekey_tdoubleunion semun{intval;structsemid_ds *buf;ushort*array;}para;int SemP(int id, int off,int flag);int SemV(int id, int off);int main(int argc,char **argv){intsemid,oflags,nsems;intop_flag,id;charpath[256]="";key_tkeyvalue;inti,ret;intsemsem,looptime;if(argc != 6){printf("useage: ./semop pathname nsems op_flag semsem looptime\n");exit(0);}strcpy(path,argv[1]);nsems = atoi(argv[2]);op_flag = atoi(argv[3]);semsem = atoi(argv[4]);looptime = atoi(argv[5]);printf("You Input Args is:\n");printf("path:%s\t nsems:%d\t op_flag:%d\t semsem:%d\t looptime:%d\n",path,nsems,op_flag,semsem,looptime);oflags = 0666 | IPC_CREAT | IPC_EXCL;keyvalue = ftok(path, 'S');if(op_flag == 0){/* Create Sem */if((semid = semget(keyvalue,nsems,oflags))<0){fprintf(stderr,"semget create failed!errno is %d\n",errno);exit(0);}/* Init Sem Values */for(i=0;i<nsems;i++){para.val = 1;if((ret = semctl(semid,i,SETVAL,para))<0)printf("sem %d set value failed!\n",i);}printf("semop create ok!\nsemid is %d\n",semid);}/* PV opration */if(op_flag == 1){if((semid = semget(keyvalue,0,0666)) < 0){printf("semget read failed!errno is %d\n",errno);exit(-1);}for(i=0;i<looptime;i++){if(SemP(semid,semsem,1) < 0){printf("SemP failed!i=%d\n",i);exit(-1);}if(SemV(semid,semsem) < 0){printf("SemV failed!i=%d\n",i);exit(-1);}}}/* Del Sem */if(op_flag == 2){if((semid = semget(keyvalue,0,0666)) < 0){printf("semget read failed!errno is %d\n",errno);exit(-1);}if((semctl(semid,0,IPC_RMID,0))<0){printf("semop delete failed!semid is %d\n",semid);}elseprintf("semop delete ok!\nsemid is %d\n",semid);}return 0;}int SemP(int id, int off, int flag){intrtn,errno;struct sembufp_buf;p_buf.sem_num = off;p_buf.sem_op = -1;if (flag)p_buf.sem_flg = SEM_UNDO;while(1){rtn=semop(id, &p_buf, 1);if( rtn < 0 ){if( errno == EINTR ) continue;else return -1;}break;}return0;}int SemV(int id, int off){intrtn,errno;struct sembufp_buf;p_buf.sem_num = off;p_buf.sem_op = 1;p_buf.sem_flg = SEM_UNDO;while(1){rtn=semop(id, &p_buf, 1);if( rtn < 0 ){if( errno == EINTR ) continue;else return -1;}break;}return0;}

參數說明:

op_flag:0代表建立號誌,1代表進行PV操作,2代表刪除號誌。

執行過程:

首先建立號誌,其次進行PV操作測試,注意可以在命令執行的前面加上 time 指令,方便時間統計。使用完畢之後刪除號誌即可。

執行指令碼:

#bin/shtime ./semop /tmp 1 1 0 2000000 &time ./semop /tmp 1 1 1 2000000 &time ./semop /tmp 1 1 2 2000000 &time ./semop /tmp 1 1 3 2000000 &exit

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.