diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000000000000000000000000000000000..3a977e6bef372b8396083f07e7f59222f5381fff_LmNsYW5nLWZvcm1hdA== --- /dev/null +++ b/.clang-format @@ -0,0 +1,4 @@ +--- +# We'll use defaults from the LLVM style, but with 4 columns indentation. +BasedOnStyle: LLVM +IndentWidth: 4 diff --git a/diskperf.c b/diskperf.c index bb738b62c81ca773d258c1dd68ee90c8483bf8ac_ZGlza3BlcmYuYw==..3a977e6bef372b8396083f07e7f59222f5381fff_ZGlza3BlcmYuYw== 100644 --- a/diskperf.c +++ b/diskperf.c @@ -8,7 +8,7 @@ ** ** AUTHORS: ** -** JFP. - Pi�ronne JF (jf.pieronne@laposte.net) +** JFP. - Piéronne JF (jf.pieronne@laposte.net) ** ** CREATION DATE: 9-Nov-1995 ** @@ -37,6 +37,6 @@ ** **-- */ -/* +/* compilation : vax : cc/decc diskperf @@ -41,6 +41,6 @@ compilation : vax : cc/decc diskperf - cc/vaxc diskperf + cc/vaxc diskperf axp : cc/prefix=all diskperf -*/ @@ -49,6 +49,6 @@ **/ #ifndef __NEW_STARLET -# define __NEW_STARLET +#define __NEW_STARLET #endif @@ -53,9 +53,5 @@ #endif -#include <stdio.h> -#include <unixio.h> -#include <stdlib.h> -#include <unixlib.h> -#include <string.h> -#include <gen64def.h> +#include <climsgdef.h> +#include <dcdef.h> #include <descrip.h> @@ -61,3 +57,2 @@ #include <descrip.h> -#include <dcdef.h> #include <dvidef.h> @@ -63,5 +58,5 @@ #include <dvidef.h> -#include <starlet.h> -#include <ssdef.h> -#include <stsdef.h> +#include <fibdef.h> +#include <gen64def.h> +#include <iledef.h> #include <iodef.h> @@ -67,3 +62,6 @@ #include <iodef.h> +#include <iosbdef.h> +#include <lib$routines.h> +#include <libwaitdef.h> #include <rms.h> #include <rmsdef.h> @@ -68,9 +66,11 @@ #include <rms.h> #include <rmsdef.h> -#include <fibdef.h> -#include <climsgdef.h> -#include <lib$routines.h> -#include <libwaitdef.h> -#include <iosbdef.h> -#include <iledef.h> +#include <ssdef.h> +#include <starlet.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stsdef.h> +#include <unixio.h> +#include <unixlib.h> @@ -76,9 +76,9 @@ -#define K_DisksCard 10 -#define K_MaxSimQIO 200 +#define K_DisksCard 10 +#define K_MaxSimQIO 200 /* VMS pre 6.0 */ #ifndef IO$M_NOVCACHE #define IO$M_NOVCACHE 0x20000 #endif @@ -79,7 +79,11 @@ /* VMS pre 6.0 */ #ifndef IO$M_NOVCACHE #define IO$M_NOVCACHE 0x20000 #endif +#ifdef IN_VSCODE +# define _align(n) +#endif + typedef struct { @@ -85,8 +89,8 @@ typedef struct { - int _IOCount; - int _ReadIOCount; - int _WriteIOCount; - int _elapsed[2]; - unsigned int _cpu; + int _IOCount; + int _ReadIOCount; + int _WriteIOCount; + int _elapsed[2]; + unsigned int _cpu; } Stat_s; @@ -91,7 +95,7 @@ } Stat_s; -static enum _tt {KReadOnly = 0, KWriteOnly = 1, KReadWrite = 2} TypeTest; -static enum _ts {KDuration = 0, KIOCount = 1, KSize = 2} TypeStop; +static enum _tt { KReadOnly = 0, KWriteOnly = 1, KReadWrite = 2 } TypeTest; +static enum _ts { KDuration = 0, KIOCount = 1, KSize = 2 } TypeStop; volatile static long ReadCount; volatile static long WriteCount; static long CacheHitPercent; @@ -126,10 +130,11 @@ static char FileName[K_DisksCard][256]; static FIBDEF Fib[K_DisksCard]; -static _align (PAGE) char IOBuffer[K_MaxSimQIO][512*127]; /* buffer size 127 blocks maximum */ +static _align(PAGE) char IOBuffer[K_MaxSimQIO][512 * 127]; /* buffer size 127 + blocks maximum */ static void IOCompletionAST(int); /* * -- DCL callback interface */ @@ -130,12 +135,12 @@ static void IOCompletionAST(int); /* * -- DCL callback interface */ -extern int cli$get_value(struct dsc$descriptor_s*, struct dsc$descriptor_s*, - short*); -extern int cli$present(struct dsc$descriptor_s*); +extern int cli$get_value(struct dsc$descriptor_s *, struct dsc$descriptor_s *, + short *); +extern int cli$present(struct dsc$descriptor_s *); /* * -- RTL string routines */ @@ -139,5 +144,5 @@ /* * -- RTL string routines */ -extern int str$free1_dx(struct dsc$descriptor_s*); +extern int str$free1_dx(struct dsc$descriptor_s *); @@ -143,11 +148,11 @@ -static int YesOrNo(const char* str) { - int rep = 2; - while((rep != 0) && (rep != 1)) { - printf("%s", str); - scanf("%d", &rep); - } - return rep; +static int YesOrNo(const char *str) { + int rep = 2; + while ((rep != 0) && (rep != 1)) { + printf("%s", str); + scanf("%d", &rep); + } + return rep; } static void InteractiveQueries() { @@ -151,5 +156,5 @@ } static void InteractiveQueries() { - int i; + int i; @@ -155,11 +160,11 @@ - printf("\nTest type (0 : Read only, 1 : Write only, 2 : Read-Write): "); - scanf("%d", &i); - TypeTest = (enum _tt)i; - if (TypeTest == KReadWrite) { - printf("\nRead percent: "); - scanf("%d", &ReadPercent); - printf("\n(Read Size / Write Size) Ratio: "); - scanf("%lf", &ReadWriteIOSizeRatio); - } + printf("\nTest type (0 : Read only, 1 : Write only, 2 : Read-Write): "); + scanf("%d", &i); + TypeTest = (enum _tt)i; + if (TypeTest == KReadWrite) { + printf("\nRead percent: "); + scanf("%d", &ReadPercent); + printf("\n(Read Size / Write Size) Ratio: "); + scanf("%lf", &ReadWriteIOSizeRatio); + } #ifdef FullInteractive @@ -165,31 +170,32 @@ #ifdef FullInteractive - printf("\n# disks (1 - 10): "); - scanf("%d", &DisksCount); - getchar(); - if (DisksCount > K_DisksCard) exit(SS$_ABORT); - for (i = 0; i < DisksCount; ++i) { - int classDisk, opcnt, max, free; - int hoav; - int status; - unsigned short devlen; - unsigned short volnamlen, medialen; - int freebl, fp, ip, catchup, merge, member, fail, refcnt; - int errcnt; - char devnam[65]; - ILE3 gds[] = {{4, DVI$_DEVCLASS, &classDisk, 0}, - {4, DVI$_SHDW_CATCHUP_COPYING, &catchup, 0}, - {4, DVI$_SHDW_FAILED_MEMBER, &fail, 0}, - {4, DVI$_SHDW_MEMBER, &member, 0}, - {4, DVI$_SHDW_MERGE_COPYING, &merge, 0}, - {4, DVI$_HOST_AVAIL, &hoav, 0}, - {4, DVI$_REFCNT, &refcnt, 0}, - {4, DVI$_FREEBLOCKS, &freebl, 0}, - {4, DVI$_MAXBLOCK, &max, 0}, - {64, DVI$_MEDIA_NAME, Medianam[i], &medialen}, - {64, DVI$_FULLDEVNAM, FullDevnam[i], &devlen}, - {4, DVI$_OPCNT, &opcnt, 0}, - {4, DVI$_ERRCNT, &errcnt, 0}, - {12, DVI$_VOLNAM, Volnam[i], &volnamlen}, - {0, 0}}; - $DESCRIPTOR (devnam_d, devnam); + printf("\n# disks (1 - 10): "); + scanf("%d", &DisksCount); + getchar(); + if (DisksCount > K_DisksCard) + exit(SS$_ABORT); + for (i = 0; i < DisksCount; ++i) { + int classDisk, opcnt, max, free; + int hoav; + int status; + unsigned short devlen; + unsigned short volnamlen, medialen; + int freebl, fp, ip, catchup, merge, member, fail, refcnt; + int errcnt; + char devnam[65]; + ILE3 gds[] = {{4, DVI$_DEVCLASS, &classDisk, 0}, + {4, DVI$_SHDW_CATCHUP_COPYING, &catchup, 0}, + {4, DVI$_SHDW_FAILED_MEMBER, &fail, 0}, + {4, DVI$_SHDW_MEMBER, &member, 0}, + {4, DVI$_SHDW_MERGE_COPYING, &merge, 0}, + {4, DVI$_HOST_AVAIL, &hoav, 0}, + {4, DVI$_REFCNT, &refcnt, 0}, + {4, DVI$_FREEBLOCKS, &freebl, 0}, + {4, DVI$_MAXBLOCK, &max, 0}, + {64, DVI$_MEDIA_NAME, Medianam[i], &medialen}, + {64, DVI$_FULLDEVNAM, FullDevnam[i], &devlen}, + {4, DVI$_OPCNT, &opcnt, 0}, + {4, DVI$_ERRCNT, &errcnt, 0}, + {12, DVI$_VOLNAM, Volnam[i], &volnamlen}, + {0, 0}}; + $DESCRIPTOR(devnam_d, devnam); @@ -195,4 +201,4 @@ - printf("\nDevice name: "); - gets(devnam); + printf("\nDevice name: "); + gets(devnam); @@ -198,4 +204,6 @@ - puts("device name label type # blocks free blocks I/O errors"); - puts("------------ -------- ---- --------- -------------- ----------- ------"); + puts("device name label type # blocks free blocks I/O " + " errors"); + puts("------------ -------- ---- --------- -------------- " + "----------- ------"); @@ -201,9 +209,9 @@ - devnam_d.dsc$w_length = strlen(devnam); - memset(Medianam[i], ' ', sizeof(Medianam[0]) - 1); - Medianam[i][sizeof(Medianam[0]) - 1] = '\0'; - memset(Volnam[i], ' ', sizeof(Volnam[0]) - 1); - Volnam[i][sizeof(Volnam[0]) - 1] = '\0'; - memset(FullDevnam[i], ' ', sizeof(FullDevnam[0]) - 1); - FullDevnam[i][sizeof(FullDevnam[0]) - 1] = '\0'; + devnam_d.dsc$w_length = strlen(devnam); + memset(Medianam[i], ' ', sizeof(Medianam[0]) - 1); + Medianam[i][sizeof(Medianam[0]) - 1] = '\0'; + memset(Volnam[i], ' ', sizeof(Volnam[0]) - 1); + Volnam[i][sizeof(Volnam[0]) - 1] = '\0'; + memset(FullDevnam[i], ' ', sizeof(FullDevnam[0]) - 1); + FullDevnam[i][sizeof(FullDevnam[0]) - 1] = '\0'; @@ -209,14 +217,17 @@ - status=sys$getdviw(0, 0, &devnam_d, gds, 0, 0, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - if ((classDisk != DC$_DISK) || !hoav || member || fail || catchup || merge || (refcnt == 0)) - exit(SS$_ABORT); - if (max == 0) exit(SS$_ABORT); -// FullDevnam[i][14] = '\0'; -// Volnam[i][9] = '\0'; -// Medianam[i][6] = '\0'; - fp = 100.0 * (double)freebl / (double)max; - printf("%-13s %-9s %-6s%9d%9d (%3d%%) %9d %6d\n", - &FullDevnam[i][1], Volnam[i], Medianam[i], max, freebl, fp, opcnt, errcnt); - } + status = sys$getdviw(0, 0, &devnam_d, gds, 0, 0, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + if ((classDisk != DC$_DISK) || !hoav || member || fail || catchup || + merge || (refcnt == 0)) + exit(SS$_ABORT); + if (max == 0) + exit(SS$_ABORT); + // FullDevnam[i][14] = '\0'; + // Volnam[i][9] = '\0'; + // Medianam[i][6] = '\0'; + fp = 100.0 * (double)freebl / (double)max; + printf("%-13s %-9s %-6s%9d%9d (%3d%%) %9d %6d\n", &FullDevnam[i][1], + Volnam[i], Medianam[i], max, freebl, fp, opcnt, errcnt); + } #endif @@ -222,11 +233,11 @@ #endif - printf("\nStarting block: "); - scanf("%d", &StartingBlock); - printf("\nEnding block: "); - scanf("%d", &EndingBlock); - Random = YesOrNo("\nRandom (0/1): "); - if (! Random) { - printf("\nInterval (blocks -1 : use IO size): "); - scanf("%d", &Interval); - } + printf("\nStarting block: "); + scanf("%d", &StartingBlock); + printf("\nEnding block: "); + scanf("%d", &EndingBlock); + Random = YesOrNo("\nRandom (0/1): "); + if (!Random) { + printf("\nInterval (blocks -1 : use IO size): "); + scanf("%d", &Interval); + } @@ -232,9 +243,3 @@ - VioModifier = YesOrNo("\nVirtual I/O Cache (0/1): ") ? 0 : IO$M_NOVCACHE; - - printf("\nEstimate cache hit percent"); - if ((EndingBlock - StartingBlock) < 1000000) - printf(" (may not be significant): "); - else printf(": "); - scanf("%d", &CacheHitPercent); + VioModifier = YesOrNo("\nVirtual I/O Cache (0/1): ") ? 0 : IO$M_NOVCACHE; @@ -240,4 +245,8 @@ - printf("\nPass (8 max): "); - scanf("%d", &Pass); + printf("\nEstimate cache hit percent"); + if ((EndingBlock - StartingBlock) < 1000000) + printf(" (may not be significant): "); + else + printf(": "); + scanf("%d", &CacheHitPercent); @@ -243,6 +252,9 @@ - printf("\nStop on (0 : Duration, 1 : IOs Count, 2 : Total Size): "); - scanf("%d", &i); - TypeStop = (enum _ts)i; - switch (TypeStop) { + printf("\nPass (8 max): "); + scanf("%d", &Pass); + + printf("\nStop on (0 : Duration, 1 : IOs Count, 2 : Total Size): "); + scanf("%d", &i); + TypeStop = (enum _ts)i; + switch (TypeStop) { case KDuration: @@ -248,5 +260,5 @@ case KDuration: - printf("\nPass Duration: "); - scanf("%d", &PassDuration); - break; + printf("\nPass Duration: "); + scanf("%d", &PassDuration); + break; case KIOCount: @@ -252,5 +264,5 @@ case KIOCount: - printf("\nTotal IOs count: "); - scanf("%d", &TotIO); - break; + printf("\nTotal IOs count: "); + scanf("%d", &TotIO); + break; case KSize: @@ -256,5 +268,5 @@ case KSize: - printf("\nTotal Size (Kbytes): "); - scanf("%d", &TotSize); - break; + printf("\nTotal Size (Kbytes): "); + scanf("%d", &TotSize); + break; default: @@ -260,14 +272,15 @@ default: - fprintf(stderr, "\nInvalid stop switch\n"); - exit(SS$_ABORT); - } - printf("\nSimultaneous IOs count (%d max): ", K_MaxSimQIO / DisksCount); - scanf("%d", &SimultaneousIO); - if (SimultaneousIO * DisksCount > K_MaxSimQIO) exit(SS$_ABORT); - printf("\nMin IO size (1-127 blocks): "); - scanf("%d", &MinIOSize); - printf("\nMax IO size (%d-127 blocks): ", MinIOSize); - scanf("%d", &MaxIOSize); + fprintf(stderr, "\nInvalid stop switch\n"); + exit(SS$_ABORT); + } + printf("\nSimultaneous IOs count (%d max): ", K_MaxSimQIO / DisksCount); + scanf("%d", &SimultaneousIO); + if (SimultaneousIO * DisksCount > K_MaxSimQIO) + exit(SS$_ABORT); + printf("\nMin IO size (1-127 blocks): "); + scanf("%d", &MinIOSize); + printf("\nMax IO size (%d-127 blocks): ", MinIOSize); + scanf("%d", &MaxIOSize); } /* @@ -271,8 +284,8 @@ } /* -* -* CLI interface -* -*/ + * + * CLI interface + * + */ static void ProcessCommandLine() { @@ -278,27 +291,56 @@ static void ProcessCommandLine() { - $DESCRIPTOR(interactiveQualDesc, "INTERACTIVE"); - $DESCRIPTOR(sequentialQualDesc, "SEQUENTIAL"); - $DESCRIPTOR(seqIntervalQualDesc, "SEQUENTIAL.INTERVAL"); - $DESCRIPTOR(disksQualDesc, "DISKS"); - $DESCRIPTOR(typeReadQualDesc, "TYPE.READ"); - $DESCRIPTOR(typeWriteQualDesc, "TYPE.WRITE"); - $DESCRIPTOR(typeRatioQualDesc, "TYPE.RATIO"); - $DESCRIPTOR(rangeStartQualDesc, "RANGE.START"); - $DESCRIPTOR(rangeSizeQualDesc, "RANGE.SIZE"); - $DESCRIPTOR(cacheQualDesc, "CACHE"); - $DESCRIPTOR(VIOCacheQualDesc, "VIOCACHE"); - $DESCRIPTOR(cachePercentQualDesc, "CACHE.PERCENT"); - $DESCRIPTOR(passQualDesc, "PASS"); - $DESCRIPTOR(EndIOQualDesc, "END.IO_COUNT"); - $DESCRIPTOR(EndSecondsQualDesc, "END.SECONDS"); - $DESCRIPTOR(EndVolumeQualDesc, "END.VOLUME"); - $DESCRIPTOR(IOSizeMinQualDesc, "IO_SIZE.MINIMUM"); - $DESCRIPTOR(IOSizeMaxQualDesc, "IO_SIZE.MAXIMUM"); - $DESCRIPTOR(readWriteRatioSizeQualDesc, "IO_SIZE.RATIO"); - $DESCRIPTOR(simultaneousIOQualDesc, "SIMULTANEOUS_IO"); - int i; - char str[100]; - struct dsc$descriptor_s retdesc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_D,NULL}; - short retlen; - int maxBlock = 0; + $DESCRIPTOR(interactiveQualDesc, "INTERACTIVE"); + $DESCRIPTOR(sequentialQualDesc, "SEQUENTIAL"); + $DESCRIPTOR(seqIntervalQualDesc, "SEQUENTIAL.INTERVAL"); + $DESCRIPTOR(disksQualDesc, "DISKS"); + $DESCRIPTOR(typeReadQualDesc, "TYPE.READ"); + $DESCRIPTOR(typeWriteQualDesc, "TYPE.WRITE"); + $DESCRIPTOR(typeRatioQualDesc, "TYPE.RATIO"); + $DESCRIPTOR(rangeStartQualDesc, "RANGE.START"); + $DESCRIPTOR(rangeSizeQualDesc, "RANGE.SIZE"); + $DESCRIPTOR(cacheQualDesc, "CACHE"); + $DESCRIPTOR(VIOCacheQualDesc, "VIOCACHE"); + $DESCRIPTOR(cachePercentQualDesc, "CACHE.PERCENT"); + $DESCRIPTOR(passQualDesc, "PASS"); + $DESCRIPTOR(EndIOQualDesc, "END.IO_COUNT"); + $DESCRIPTOR(EndSecondsQualDesc, "END.SECONDS"); + $DESCRIPTOR(EndVolumeQualDesc, "END.VOLUME"); + $DESCRIPTOR(IOSizeMinQualDesc, "IO_SIZE.MINIMUM"); + $DESCRIPTOR(IOSizeMaxQualDesc, "IO_SIZE.MAXIMUM"); + $DESCRIPTOR(readWriteRatioSizeQualDesc, "IO_SIZE.RATIO"); + $DESCRIPTOR(simultaneousIOQualDesc, "SIMULTANEOUS_IO"); + int i; + char str[100]; + struct dsc$descriptor_s retdesc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_D, NULL}; + short retlen; + int maxBlock = 0; + + DisksCount = 0; + for (i = 0; + $VMS_STATUS_SUCCESS(cli$get_value(&disksQualDesc, &retdesc, &retlen)); + ++i) { + int classDisk, opcnt, max, free; + int hoav; + int status; + unsigned short devlen; + unsigned short volnamlen, medialen; + int freebl, fp, ip, catchup, merge, member, fail, refcnt; + int errcnt; + char devnam[65]; + ILE3 gds[] = {{4, DVI$_DEVCLASS, &classDisk, 0}, + {4, DVI$_SHDW_CATCHUP_COPYING, &catchup, 0}, + {4, DVI$_SHDW_FAILED_MEMBER, &fail, 0}, + {4, DVI$_SHDW_MEMBER, &member, 0}, + {4, DVI$_SHDW_MERGE_COPYING, &merge, 0}, + {4, DVI$_HOST_AVAIL, &hoav, 0}, + {4, DVI$_REFCNT, &refcnt, 0}, + {4, DVI$_FREEBLOCKS, &freebl, 0}, + {4, DVI$_MAXBLOCK, &max, 0}, + {64, DVI$_MEDIA_NAME, Medianam[i], &medialen}, + {64, DVI$_FULLDEVNAM, FullDevnam[i], &devlen}, + {4, DVI$_OPCNT, &opcnt, 0}, + {4, DVI$_ERRCNT, &errcnt, 0}, + {12, DVI$_VOLNAM, Volnam[i], &volnamlen}, + {0, 0}}; + $DESCRIPTOR(devnam_d, devnam); @@ -304,28 +346,30 @@ - DisksCount = 0; - for(i=0; $VMS_STATUS_SUCCESS(cli$get_value(&disksQualDesc, &retdesc, &retlen)); ++i) { - int classDisk, opcnt, max, free; - int hoav; - int status; - unsigned short devlen; - unsigned short volnamlen, medialen; - int freebl, fp, ip, catchup, merge, member, fail, refcnt; - int errcnt; - char devnam[65]; - ILE3 gds[] = {{4, DVI$_DEVCLASS, &classDisk, 0}, - {4, DVI$_SHDW_CATCHUP_COPYING, &catchup, 0}, - {4, DVI$_SHDW_FAILED_MEMBER, &fail, 0}, - {4, DVI$_SHDW_MEMBER, &member, 0}, - {4, DVI$_SHDW_MERGE_COPYING, &merge, 0}, - {4, DVI$_HOST_AVAIL, &hoav, 0}, - {4, DVI$_REFCNT, &refcnt, 0}, - {4, DVI$_FREEBLOCKS, &freebl, 0}, - {4, DVI$_MAXBLOCK, &max, 0}, - {64, DVI$_MEDIA_NAME, Medianam[i], &medialen}, - {64, DVI$_FULLDEVNAM, FullDevnam[i], &devlen}, - {4, DVI$_OPCNT, &opcnt, 0}, - {4, DVI$_ERRCNT, &errcnt, 0}, - {12, DVI$_VOLNAM, Volnam[i], &volnamlen}, - {0, 0}}; - $DESCRIPTOR (devnam_d, devnam); + ++DisksCount; + if (DisksCount > K_DisksCard) + exit(SS$_ABORT); + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + strcpy(devnam, str); + devnam_d.dsc$w_length = strlen(devnam); + memset(Medianam[i], ' ', sizeof(Medianam[0]) - 1); + Medianam[i][sizeof(Medianam[0]) - 1] = '\0'; + memset(Volnam[i], ' ', sizeof(Volnam[0]) - 1); + Volnam[i][sizeof(Volnam[0]) - 1] = '\0'; + memset(FullDevnam[i], ' ', sizeof(FullDevnam[0]) - 1); + FullDevnam[i][sizeof(FullDevnam[0]) - 1] = '\0'; + + status = sys$getdviw(0, 0, &devnam_d, gds, 0, 0, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + if ((classDisk != DC$_DISK) || !hoav || member || fail || catchup || + merge || (refcnt == 0)) + exit(SS$_ABORT); + if (max == 0) + exit(SS$_ABORT); + if ((max < maxBlock) || (maxBlock == 0)) + maxBlock = max; + // FullDevnam[i][14] = '\0'; + // Volnam[i][9] = '\0'; + // Medianam[i][6] = '\0'; + } @@ -331,14 +375,25 @@ - ++DisksCount; - if (DisksCount > K_DisksCard) exit(SS$_ABORT); - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - strcpy(devnam, str); - devnam_d.dsc$w_length = strlen(devnam); - memset(Medianam[i], ' ', sizeof(Medianam[0]) - 1); - Medianam[i][sizeof(Medianam[0]) - 1] = '\0'; - memset(Volnam[i], ' ', sizeof(Volnam[0]) - 1); - Volnam[i][sizeof(Volnam[0]) - 1] = '\0'; - memset(FullDevnam[i], ' ', sizeof(FullDevnam[0]) - 1); - FullDevnam[i][sizeof(FullDevnam[0]) - 1] = '\0'; + if ($VMS_STATUS_SUCCESS(cli$present(&interactiveQualDesc))) { + InteractiveQueries(); + return; + } + if ($VMS_STATUS_SUCCESS(cli$present(&sequentialQualDesc))) { + Random = 0; + if ($VMS_STATUS_SUCCESS( + cli$get_value(&seqIntervalQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &Interval); + } else + Interval = -1; + } else + Random = 1; + if ($VMS_STATUS_SUCCESS(cli$present(&typeReadQualDesc)) && + $VMS_STATUS_SUCCESS(cli$present(&typeWriteQualDesc))) { + TypeTest = KReadWrite; + } else if ($VMS_STATUS_SUCCESS(cli$present(&typeWriteQualDesc))) { + TypeTest = KWriteOnly; + } else { /* read only */ + TypeTest = KReadOnly; + } @@ -344,12 +399,9 @@ - status=sys$getdviw(0, 0, &devnam_d, gds, 0, 0, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - if ((classDisk != DC$_DISK) || !hoav || member || fail || catchup || merge || (refcnt == 0)) - exit(SS$_ABORT); - if (max == 0) exit(SS$_ABORT); - if ((max < maxBlock) || (maxBlock == 0)) maxBlock = max; -// FullDevnam[i][14] = '\0'; -// Volnam[i][9] = '\0'; -// Medianam[i][6] = '\0'; - } + if ($VMS_STATUS_SUCCESS( + cli$get_value(&typeRatioQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &ReadPercent); + } else + ReadPercent = 80; @@ -355,25 +407,4 @@ - if ($VMS_STATUS_SUCCESS(cli$present(&interactiveQualDesc))) { - InteractiveQueries(); - return; - } - if ($VMS_STATUS_SUCCESS(cli$present(&sequentialQualDesc))) { - Random = 0; - if ($VMS_STATUS_SUCCESS(cli$get_value(&seqIntervalQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &Interval); - } else Interval = -1; - } else Random = 1; - if ($VMS_STATUS_SUCCESS(cli$present(&typeReadQualDesc)) && - $VMS_STATUS_SUCCESS(cli$present(&typeWriteQualDesc))) { - TypeTest = KReadWrite; - } else if ($VMS_STATUS_SUCCESS(cli$present(&typeWriteQualDesc))) { - TypeTest = KWriteOnly; - } else { /* read only */ - TypeTest = KReadOnly; - } - - if ($VMS_STATUS_SUCCESS(cli$get_value(&typeRatioQualDesc, &retdesc, &retlen))) { + cli$get_value(&passQualDesc, &retdesc, &retlen); strncpy(str, retdesc.dsc$a_pointer, retlen); str[retlen] = '\0'; @@ -378,10 +409,4 @@ strncpy(str, retdesc.dsc$a_pointer, retlen); str[retlen] = '\0'; - sscanf (str, "%d", &ReadPercent); - } else ReadPercent = 80; - - cli$get_value(&passQualDesc, &retdesc, &retlen); - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &Pass); + sscanf(str, "%d", &Pass); @@ -387,14 +412,16 @@ - if ($VMS_STATUS_SUCCESS(cli$present(&rangeStartQualDesc))) { - cli$get_value(&rangeStartQualDesc, &retdesc, &retlen); - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &StartingBlock); - } else StartingBlock = 1; - if ($VMS_STATUS_SUCCESS(cli$present(&rangeSizeQualDesc))) { - cli$get_value(&rangeSizeQualDesc, &retdesc, &retlen); - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &EndingBlock); - } else EndingBlock = StartingBlock + maxBlock / 3; + if ($VMS_STATUS_SUCCESS(cli$present(&rangeStartQualDesc))) { + cli$get_value(&rangeStartQualDesc, &retdesc, &retlen); + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &StartingBlock); + } else + StartingBlock = 1; + if ($VMS_STATUS_SUCCESS(cli$present(&rangeSizeQualDesc))) { + cli$get_value(&rangeSizeQualDesc, &retdesc, &retlen); + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &EndingBlock); + } else + EndingBlock = StartingBlock + maxBlock / 3; @@ -400,8 +427,11 @@ - if ($VMS_STATUS_SUCCESS(cli$get_value(&cachePercentQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &CacheHitPercent); - } else if ($VMS_STATUS_SUCCESS(cli$present(&cacheQualDesc))) CacheHitPercent = 20; - else CacheHitPercent = 0; + if ($VMS_STATUS_SUCCESS( + cli$get_value(&cachePercentQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &CacheHitPercent); + } else if ($VMS_STATUS_SUCCESS(cli$present(&cacheQualDesc))) + CacheHitPercent = 20; + else + CacheHitPercent = 0; @@ -407,21 +437,24 @@ - if ($VMS_STATUS_SUCCESS(cli$get_value(&EndVolumeQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &TotSize); - TypeStop = KSize; - } else if ($VMS_STATUS_SUCCESS(cli$get_value(&EndIOQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &TotIO); - TypeStop = KIOCount; - } else if ($VMS_STATUS_SUCCESS(cli$get_value(&EndSecondsQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &PassDuration); - TypeStop = KDuration; - } else { - PassDuration = 15; - TypeStop = KDuration; - } + if ($VMS_STATUS_SUCCESS( + cli$get_value(&EndVolumeQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &TotSize); + TypeStop = KSize; + } else if ($VMS_STATUS_SUCCESS( + cli$get_value(&EndIOQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &TotIO); + TypeStop = KIOCount; + } else if ($VMS_STATUS_SUCCESS( + cli$get_value(&EndSecondsQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &PassDuration); + TypeStop = KDuration; + } else { + PassDuration = 15; + TypeStop = KDuration; + } @@ -427,7 +460,9 @@ - if ($VMS_STATUS_SUCCESS(cli$get_value(&IOSizeMinQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &MinIOSize); - } else MinIOSize = 12; + if ($VMS_STATUS_SUCCESS( + cli$get_value(&IOSizeMinQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &MinIOSize); + } else + MinIOSize = 12; @@ -433,4 +468,20 @@ - if ($VMS_STATUS_SUCCESS(cli$get_value(&IOSizeMaxQualDesc, &retdesc, &retlen))) { + if ($VMS_STATUS_SUCCESS( + cli$get_value(&IOSizeMaxQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%d", &MaxIOSize); + } else + MaxIOSize = MinIOSize; + + if ($VMS_STATUS_SUCCESS( + cli$get_value(&readWriteRatioSizeQualDesc, &retdesc, &retlen))) { + strncpy(str, retdesc.dsc$a_pointer, retlen); + str[retlen] = '\0'; + sscanf(str, "%lf", &ReadWriteIOSizeRatio); + } else + ReadWriteIOSizeRatio = 3; + + cli$get_value(&simultaneousIOQualDesc, &retdesc, &retlen); strncpy(str, retdesc.dsc$a_pointer, retlen); str[retlen] = '\0'; @@ -435,5 +486,4 @@ strncpy(str, retdesc.dsc$a_pointer, retlen); str[retlen] = '\0'; - sscanf (str, "%d", &MaxIOSize); - } else MaxIOSize = MinIOSize; + sscanf(str, "%d", &SimultaneousIO); @@ -439,7 +489,4 @@ - if ($VMS_STATUS_SUCCESS(cli$get_value(&readWriteRatioSizeQualDesc, &retdesc, &retlen))) { - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%lf", &ReadWriteIOSizeRatio); - } else ReadWriteIOSizeRatio = 3; + if (SimultaneousIO * DisksCount > K_MaxSimQIO) + exit(SS$_ABORT); @@ -445,8 +492,6 @@ - cli$get_value(&simultaneousIOQualDesc, &retdesc, &retlen); - strncpy(str, retdesc.dsc$a_pointer, retlen); - str[retlen] = '\0'; - sscanf (str, "%d", &SimultaneousIO); - - if (SimultaneousIO * DisksCount > K_MaxSimQIO) exit(SS$_ABORT); + if ($VMS_STATUS_SUCCESS(cli$present(&VIOCacheQualDesc))) + VioModifier = 0; + else + VioModifier = IO$M_NOVCACHE; @@ -452,10 +497,8 @@ - if ($VMS_STATUS_SUCCESS(cli$present(&VIOCacheQualDesc))) VioModifier = 0; - else VioModifier = IO$M_NOVCACHE; - - /* - * Release the dynamic string we have been using. - */ - if (retdesc.dsc$a_pointer != NULL) str$free1_dx(&retdesc); + /* + * Release the dynamic string we have been using. + */ + if (retdesc.dsc$a_pointer != NULL) + str$free1_dx(&retdesc); } @@ -460,10 +503,10 @@ } -void IoAccess(unsigned short channel, FIBDEF* fib) { - IOSB ioFich; - long status; - struct { - unsigned long l; - unsigned long adr; - } fibDes; +void IoAccess(unsigned short channel, FIBDEF *fib) { + IOSB ioFich; + long status; + struct { + unsigned long l; + unsigned long adr; + } fibDes; @@ -469,11 +512,11 @@ - fibDes.l = sizeof(*fib); - fibDes.adr = (unsigned long)fib; - status = sys$qiow(0, channel, IO$_ACCESS|IO$M_ACCESS, - &ioFich, 0, 0, &fibDes, 0, 0, 0, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nIoAccess Error\n"); - exit(status); - } + fibDes.l = sizeof(*fib); + fibDes.adr = (unsigned long)fib; + status = sys$qiow(0, channel, IO$_ACCESS | IO$M_ACCESS, &ioFich, 0, 0, + &fibDes, 0, 0, 0, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nIoAccess Error\n"); + exit(status); + } } @@ -478,10 +521,10 @@ } -void IoDeAccess(unsigned short channel, FIBDEF* fib) { - IOSB ioFich; - long status; - struct { - unsigned long l; - unsigned long adr; - } fibDes; +void IoDeAccess(unsigned short channel, FIBDEF *fib) { + IOSB ioFich; + long status; + struct { + unsigned long l; + unsigned long adr; + } fibDes; @@ -487,11 +530,11 @@ - fibDes.l = sizeof(*fib); - fibDes.adr = (unsigned long)fib; - status = sys$qiow(0, channel, IO$_DEACCESS, - &ioFich, 0, 0, &fibDes,0, 0, 0, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nIoDeAccess Error %X\n", status); - } + fibDes.l = sizeof(*fib); + fibDes.adr = (unsigned long)fib; + status = sys$qiow(0, channel, IO$_DEACCESS, &ioFich, 0, 0, &fibDes, 0, 0, 0, + 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nIoDeAccess Error %X\n", status); + } } static void DeleteFiles() { @@ -495,6 +538,6 @@ } static void DeleteFiles() { - static done; - int i; + static done; + int i; @@ -500,6 +543,12 @@ - if (!done) { - for (i = 0; i < DisksCount; ++i) { - IoDeAccess(Channel[i], &(Fib[i])); - delete(FileName[i]); + if (!done) { + for (i = 0; i < DisksCount; ++i) { + IoDeAccess(Channel[i], &(Fib[i])); + delete (FileName[i]); + } + done = 1; + } else { + for (i = 0; i < DisksCount; ++i) { + delete (FileName[i]); + } } @@ -505,9 +554,3 @@ } - done = 1; - } else { - for (i = 0; i < DisksCount; ++i) { - delete(FileName[i]); - } - } } @@ -512,14 +555,14 @@ } -static CreateFile(unsigned short* channel, FIBDEF* fib, - char* fileName, long maxVbn) { - struct FAB fabFlog; - struct RAB rabFlog; - long status; - struct FAB *fabP=0; - struct NAM *namP; - long statRms; - char temp[256]; - $DESCRIPTOR (tempDesc, temp); - $DESCRIPTOR (fichierDesc, fileName); +static CreateFile(unsigned short *channel, FIBDEF *fib, char *fileName, + long maxVbn) { + struct FAB fabFlog; + struct RAB rabFlog; + long status; + struct FAB *fabP = 0; + struct NAM *namP; + long statRms; + char temp[256]; + $DESCRIPTOR(tempDesc, temp); + $DESCRIPTOR(fichierDesc, fileName); @@ -525,3 +568,3 @@ - fichierDesc.dsc$w_length = strlen(fileName); + fichierDesc.dsc$w_length = strlen(fileName); @@ -527,12 +570,12 @@ - fabFlog = cc$rms_fab; - rabFlog = cc$rms_rab; - fabFlog.fab$l_fna = fileName; - fabFlog.fab$b_fns = strlen(fileName); - fabFlog.fab$b_org = FAB$C_SEQ; - fabFlog.fab$l_alq = maxVbn; - fabFlog.fab$b_fac = FAB$M_GET|FAB$M_PUT; - fabFlog.fab$b_shr = FAB$M_SHRPUT|FAB$M_SHRGET; - fabFlog.fab$l_fop = FAB$M_CBT; - fabFlog.fab$w_mrs = 512; + fabFlog = cc$rms_fab; + rabFlog = cc$rms_rab; + fabFlog.fab$l_fna = fileName; + fabFlog.fab$b_fns = strlen(fileName); + fabFlog.fab$b_org = FAB$C_SEQ; + fabFlog.fab$l_alq = maxVbn; + fabFlog.fab$b_fac = FAB$M_GET | FAB$M_PUT; + fabFlog.fab$b_shr = FAB$M_SHRPUT | FAB$M_SHRGET; + fabFlog.fab$l_fop = FAB$M_CBT; + fabFlog.fab$w_mrs = 512; @@ -538,12 +581,12 @@ - status = sys$create(&fabFlog,0,0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nCreate Error\n"); - exit(status); - } - status = sys$close(&fabFlog,0,0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nClose Error\n"); - exit(status); - } + status = sys$create(&fabFlog, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nCreate Error\n"); + exit(status); + } + status = sys$close(&fabFlog, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nClose Error\n"); + exit(status); + } @@ -549,3 +592,3 @@ - fabP=0; + fabP = 0; @@ -551,8 +594,8 @@ - status = lib$find_file(&fichierDesc, &tempDesc, (unsigned int *)&fabP, - 0, 0, &statRms, 0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nFind File Error\n"); - exit(status); - } + status = lib$find_file(&fichierDesc, &tempDesc, (unsigned int *)&fabP, 0, 0, + &statRms, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nFind File Error\n"); + exit(status); + } @@ -558,7 +601,7 @@ - status = sys$assign(&fichierDesc, channel, 0, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) { - fprintf(stderr, "\nAssign Error\n"); - exit(status); - } + status = sys$assign(&fichierDesc, channel, 0, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + fprintf(stderr, "\nAssign Error\n"); + exit(status); + } @@ -564,3 +607,3 @@ - namP = fabP->fab$l_nam; + namP = fabP->fab$l_nam; #if defined(__VAXC) || defined(VAXC) @@ -566,6 +609,6 @@ #if defined(__VAXC) || defined(VAXC) - fib->fib$r_fid_overlay.fib$w_fid[0] = namP->nam$w_fid[0]; - fib->fib$r_fid_overlay.fib$w_fid[1] = namP->nam$w_fid[1]; - fib->fib$r_fid_overlay.fib$w_fid[2] = namP->nam$w_fid[2]; - fib->fib$r_acctl_overlay.fib$l_acctl = FIB$M_NOWRITE|FIB$M_WRITE ; + fib->fib$r_fid_overlay.fib$w_fid[0] = namP->nam$w_fid[0]; + fib->fib$r_fid_overlay.fib$w_fid[1] = namP->nam$w_fid[1]; + fib->fib$r_fid_overlay.fib$w_fid[2] = namP->nam$w_fid[2]; + fib->fib$r_acctl_overlay.fib$l_acctl = FIB$M_NOWRITE | FIB$M_WRITE; #else @@ -571,9 +614,9 @@ #else - fib->fib$w_fid[0] = namP->nam$w_fid[0]; - fib->fib$w_fid[1] = namP->nam$w_fid[1]; - fib->fib$w_fid[2] = namP->nam$w_fid[2]; - fib->fib$l_acctl = FIB$M_NOWRITE|FIB$M_WRITE ; + fib->fib$w_fid[0] = namP->nam$w_fid[0]; + fib->fib$w_fid[1] = namP->nam$w_fid[1]; + fib->fib$w_fid[2] = namP->nam$w_fid[2]; + fib->fib$l_acctl = FIB$M_NOWRITE | FIB$M_WRITE; #endif } static void DoIO(int i) { @@ -576,7 +619,7 @@ #endif } static void DoIO(int i) { - int status; - int ioSize; + int status; + int ioSize; @@ -582,3 +625,3 @@ - switch (TypeStop) { + switch (TypeStop) { case KDuration: @@ -584,4 +627,4 @@ case KDuration: - break; + break; case KIOCount: case KSize: @@ -586,6 +629,8 @@ case KIOCount: case KSize: - if (TotIO == 0) EndPass = 1; - else --TotIO; - break; + if (TotIO == 0) + EndPass = 1; + else + --TotIO; + break; default: @@ -591,18 +636,4 @@ default: - fprintf(stderr, "\nInvalid stop switch\n"); - exit(SS$_ABORT); - } - if (!EndPass) { - unsigned short channel = Channel[i]; - int writeIO; - - ++ActiveIOCount; - - if (TypeTest == KReadWrite) { - writeIO = (100 * ((double) rand()) / 0x7fffffff) >= ReadPercent; - ioSize = writeIO ? WriteIOSize : ReadIOSize; - if (writeIO) ++WriteIOCount; else ++ReadIOCount; - } else { - ioSize = ReadIOSize; - ++ReadIOCount; + fprintf(stderr, "\nInvalid stop switch\n"); + exit(SS$_ABORT); } @@ -608,32 +639,63 @@ } - if ((100 * ((double) rand()) / 0x7fffffff) >= CacheHitPercent) - if (Random) - Address[i] = StartingBlock + (EndingBlock - StartingBlock) * ((double) rand()) / 0x7fffffff; - else { - Address[i] += (Interval == -1 ? ioSize : Interval); - if (Address[i] + ioSize > EndingBlock) Address[i] = StartingBlock; - } - switch (TypeTest) { - case KReadOnly: - status = sys$qio(0, channel, IO$_READLBLK, &Iosb[i], IOCompletionAST, i, IOBuffer[i], - 512 * ioSize, Address[i], 0, 0, 0); - break; - case KWriteOnly: - status = sys$qio(0, channel, IO$_WRITEVBLK | VioModifier, &Iosb[i], - IOCompletionAST, i, IOBuffer[i], 512 * ioSize, Address[i], 0, 0, 0); - break; - case KReadWrite: - if (writeIO) { - ++WriteCount; - status = sys$qio(0, channel, IO$_WRITEVBLK | VioModifier, &Iosb[i], - IOCompletionAST, i, IOBuffer[i], 512 * ioSize, Address[i], 0, 0, 0); - } else { - ++ReadCount; - status = sys$qio(0, channel, IO$_READVBLK | VioModifier, &Iosb[i], - IOCompletionAST, i, IOBuffer[i], 512 * ioSize, Address[i], 0, 0, 0); - } - break; - default: - fputs("Invalid test", stderr); - exit(SS$_ABORT); + if (!EndPass) { + unsigned short channel = Channel[i]; + int writeIO; + + ++ActiveIOCount; + + if (TypeTest == KReadWrite) { + writeIO = (100 * ((double)rand()) / 0x7fffffff) >= ReadPercent; + ioSize = writeIO ? WriteIOSize : ReadIOSize; + if (writeIO) + ++WriteIOCount; + else + ++ReadIOCount; + } else { + ioSize = ReadIOSize; + ++ReadIOCount; + } + if ((100 * ((double)rand()) / 0x7fffffff) >= CacheHitPercent) + if (Random) + Address[i] = StartingBlock + (EndingBlock - StartingBlock) * + ((double)rand()) / 0x7fffffff; + else { + Address[i] += (Interval == -1 ? ioSize : Interval); + if (Address[i] + ioSize > EndingBlock) + Address[i] = StartingBlock; + } + switch (TypeTest) { + case KReadOnly: + status = + sys$qio(0, channel, IO$_READLBLK, &Iosb[i], IOCompletionAST, i, + IOBuffer[i], 512 * ioSize, Address[i], 0, 0, 0); + break; + case KWriteOnly: + status = sys$qio(0, channel, IO$_WRITEVBLK | VioModifier, &Iosb[i], + IOCompletionAST, i, IOBuffer[i], 512 * ioSize, + Address[i], 0, 0, 0); + break; + case KReadWrite: + if (writeIO) { + ++WriteCount; + status = sys$qio(0, channel, IO$_WRITEVBLK | VioModifier, + &Iosb[i], IOCompletionAST, i, IOBuffer[i], + 512 * ioSize, Address[i], 0, 0, 0); + } else { + ++ReadCount; + status = sys$qio(0, channel, IO$_READVBLK | VioModifier, + &Iosb[i], IOCompletionAST, i, IOBuffer[i], + 512 * ioSize, Address[i], 0, 0, 0); + } + break; + default: + fputs("Invalid test", stderr); + exit(SS$_ABORT); + } + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + } else if (ActiveIOCount == 0) { + unsigned int pid = getpid(); + status = sys$wake(&pid, 0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); } @@ -639,10 +701,4 @@ } - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - } else if (ActiveIOCount == 0) { - unsigned int pid = getpid(); - status = sys$wake(&pid, 0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - } } static void IOCompletionAST(int i) { @@ -655,7 +711,7 @@ #else static void TimerAST() { #endif - EndPass = 1; + EndPass = 1; } main() { @@ -659,23 +715,5 @@ } main() { - int status; - int i; - FILE* fo; - - printf("%s %s, J.F. Pi�ronne, jf.pieronne@laposte.net\n", __DATE__, __TIME__); - - ProcessCommandLine(); - - if (TypeTest != KReadOnly) { - int i; - atexit(DeleteFiles); - for (i = 0; i < DisksCount; ++i) { - strcpy(FileName[i], (char *)&FullDevnam[i]); - strcat(FileName[i], "[000000]DISKPERF.TMP"); - printf("Temporary file used for write perfomance test :\n%s\n", FileName[i]); - CreateFile(&(Channel[i]), &(Fib[i]), FileName[i], EndingBlock - StartingBlock + 1); - IoAccess(Channel[i], &(Fib[i])); - } - } else { + int status; int i; @@ -681,11 +719,8 @@ int i; - for (i = 0; i < DisksCount; ++i) { - char devnam[65]; - $DESCRIPTOR (devnamDesc, devnam); - strcpy(devnam, FullDevnam[i]); - devnamDesc.dsc$w_length = strlen(devnam); - status = sys$assign(&devnamDesc, &(Channel[i]), 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - } - } + FILE *fo; + + printf("%s %s, J.F. Pi?ronne, jf.pieronne@laposte.net\n", __DATE__, + __TIME__); + + ProcessCommandLine(); @@ -691,5 +726,26 @@ - for(i = 0; i < Pass; ++i) { -// float waitTime = 15; -// int waitFlags = LIB$K_NOWAKE; + if (TypeTest != KReadOnly) { + int i; + atexit(DeleteFiles); + for (i = 0; i < DisksCount; ++i) { + strcpy(FileName[i], (char *)&FullDevnam[i]); + strcat(FileName[i], "[000000]DISKPERF.TMP"); + printf("Temporary file used for write perfomance test :\n%s\n", + FileName[i]); + CreateFile(&(Channel[i]), &(Fib[i]), FileName[i], + EndingBlock - StartingBlock + 1); + IoAccess(Channel[i], &(Fib[i])); + } + } else { + int i; + for (i = 0; i < DisksCount; ++i) { + char devnam[65]; + $DESCRIPTOR(devnamDesc, devnam); + strcpy(devnam, FullDevnam[i]); + devnamDesc.dsc$w_length = strlen(devnam); + status = sys$assign(&devnamDesc, &(Channel[i]), 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + } + } @@ -695,9 +751,5 @@ - for (ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { - Stat_s* sp = &(StatInfo[i][ReadIOSize - 1]); - int sio; - int tio; - int ts; - int j; - GENERIC_64 deltaTime; + for (i = 0; i < Pass; ++i) { + // float waitTime = 15; + // int waitFlags = LIB$K_NOWAKE; @@ -703,3 +755,11 @@ - ReadIOCount = WriteIOCount = 0; + for (ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { + Stat_s *sp = &(StatInfo[i][ReadIOSize - 1]); + int sio; + int tio; + int ts; + int j; + GENERIC_64 deltaTime; + + ReadIOCount = WriteIOCount = 0; @@ -705,5 +765,6 @@ - if (TypeTest == KReadWrite) - WriteIOSize = ReadIOSize / ReadWriteIOSizeRatio + 0.5; - else WriteIOSize = 1; + if (TypeTest == KReadWrite) + WriteIOSize = ReadIOSize / ReadWriteIOSizeRatio + 0.5; + else + WriteIOSize = 1; @@ -709,3 +770,4 @@ - if (WriteIOSize == 0) WriteIOSize = 1; + if (WriteIOSize == 0) + WriteIOSize = 1; @@ -711,3 +773,3 @@ - EndPass = 0; + EndPass = 0; @@ -713,21 +775,20 @@ - switch (TypeStop) { - case KDuration: - deltaTime.gen64$l_longword[0] = -10000000 * PassDuration; - deltaTime.gen64$l_longword[1] = -1; - status = sys$setimr(0, &deltaTime, TimerAST, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - break; - case KIOCount: - tio = TotIO; - break; - case KSize: - TotIO = TotSize / ReadIOSize; - break; - default: - fprintf(stderr, "\nInvalid stop switch\n"); - exit(SS$_ABORT); - } - - for (j = 0; j < DisksCount; ++j) Address[j] = StartingBlock; + switch (TypeStop) { + case KDuration: + deltaTime.gen64$l_longword[0] = -10000000 * PassDuration; + deltaTime.gen64$l_longword[1] = -1; + status = sys$setimr(0, &deltaTime, TimerAST, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + break; + case KIOCount: + tio = TotIO; + break; + case KSize: + TotIO = TotSize / ReadIOSize; + break; + default: + fprintf(stderr, "\nInvalid stop switch\n"); + exit(SS$_ABORT); + } @@ -733,3 +794,6 @@ - lib$init_timer(); + for (j = 0; j < DisksCount; ++j) + Address[j] = StartingBlock; + + lib$init_timer(NULL); @@ -735,10 +799,13 @@ - status = sys$setast(0); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - for (j = 0; j < SimultaneousIO; ++j) { - int k; - for (k = 0; k < DisksCount; ++k) DoIO(k); - } - status = sys$setast(1); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); + status = sys$setast(0); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + for (j = 0; j < SimultaneousIO; ++j) { + int k; + for (k = 0; k < DisksCount; ++k) + DoIO(k); + } + status = sys$setast(1); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); @@ -744,10 +811,7 @@ - while (!EndPass || ActiveIOCount) { - status = sys$hiber(); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); - } - - j = 2; - status = lib$stat_timer(&j, &(sp->_cpu)); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); + while (!EndPass || ActiveIOCount) { + status = sys$hiber(); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + } @@ -753,5 +817,11 @@ - j = 1; - status = lib$stat_timer(&j, (unsigned int*)sp->_elapsed); - if (!$VMS_STATUS_SUCCESS(status)) exit(status); + j = 2; + status = lib$stat_timer(&j, &(sp->_cpu)); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); + + j = 1; + status = lib$stat_timer(&j, (unsigned int *)sp->_elapsed); + if (!$VMS_STATUS_SUCCESS(status)) + exit(status); @@ -757,8 +827,10 @@ - if (TypeStop == KIOCount) TotIO = tio; - StatInfo[i][ReadIOSize - 1]._IOCount = ReadIOCount + WriteIOCount; - StatInfo[i][ReadIOSize - 1]._ReadIOCount = ReadIOCount; - StatInfo[i][ReadIOSize - 1]._WriteIOCount = WriteIOCount; -// lib$wait(&waitTime, &waitFlags); - sleep(5); + if (TypeStop == KIOCount) + TotIO = tio; + StatInfo[i][ReadIOSize - 1]._IOCount = ReadIOCount + WriteIOCount; + StatInfo[i][ReadIOSize - 1]._ReadIOCount = ReadIOCount; + StatInfo[i][ReadIOSize - 1]._WriteIOCount = WriteIOCount; + // lib$wait(&waitTime, &waitFlags); + sleep(5); + } } @@ -764,3 +836,2 @@ } - } @@ -766,24 +837,15 @@ - fo = fopen("diskperf.lis", "w"); - fprintf(fo, "%s and ", - TypeTest == KWriteOnly ? "Write" - : TypeTest == KReadOnly ? "Read" - : "Read-Write"); - fputs(Random ? "Random access test\n" : "Sequential access Test\n", fo); - fprintf(fo, "Starting block %d, ending block %d, Simultaneous i/o %d\n", - StartingBlock, EndingBlock,SimultaneousIO); - fprintf(fo,"Giving cache hit percent : %d\n", CacheHitPercent); - if (VioModifier || TypeTest == KReadOnly) - fprintf(fo,"Virtual IO cache not active\n"); - else - fprintf(fo,"Virtual IO cache active\n"); - if (TypeTest == KReadWrite) - fprintf(fo, "Effective read percent : %4.1lf\nRead Size / Write Size : %lf\n", - 100 * ((double)ReadCount) / (ReadCount + WriteCount), - ReadWriteIOSizeRatio); - fputs("device name label type\n", fo); - fputs("------------ -------- ----\n", fo); - for (i = 0; i < DisksCount; ++i) - fprintf(fo, "%-13s %-9s %-6s\n", &(FullDevnam[i][1]), Volnam[i], Medianam[i]); - for(ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { + fo = fopen("diskperf.lis", "w"); + fprintf(fo, "%s and ", + TypeTest == KWriteOnly ? "Write" + : TypeTest == KReadOnly ? "Read" + : "Read-Write"); + fputs(Random ? "Random access test\n" : "Sequential access Test\n", fo); + fprintf(fo, "Starting block %d, ending block %d, Simultaneous i/o %d\n", + StartingBlock, EndingBlock, SimultaneousIO); + fprintf(fo, "Giving cache hit percent : %d\n", CacheHitPercent); + if (VioModifier || TypeTest == KReadOnly) + fprintf(fo, "Virtual IO cache not active\n"); + else + fprintf(fo, "Virtual IO cache active\n"); if (TypeTest == KReadWrite) @@ -789,6 +851,19 @@ if (TypeTest == KReadWrite) - WriteIOSize = ReadIOSize / ReadWriteIOSizeRatio + 0.5; - else - WriteIOSize = 1; - if (WriteIOSize == 0) WriteIOSize = 1; + fprintf( + fo, + "Effective read percent : %4.1lf\nRead Size / Write Size : %lf\n", + 100 * ((double)ReadCount) / (ReadCount + WriteCount), + ReadWriteIOSizeRatio); + fputs("device name label type\n", fo); + fputs("------------ -------- ----\n", fo); + for (i = 0; i < DisksCount; ++i) + fprintf(fo, "%-13s %-9s %-6s\n", &(FullDevnam[i][1]), Volnam[i], + Medianam[i]); + for (ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { + if (TypeTest == KReadWrite) + WriteIOSize = ReadIOSize / ReadWriteIOSizeRatio + 0.5; + else + WriteIOSize = 1; + if (WriteIOSize == 0) + WriteIOSize = 1; @@ -794,14 +869,15 @@ - fprintf(fo, "\n!%3d !", ReadIOSize); - for(i = 0; i < Pass; ++i) { - Stat_s* sp = &(StatInfo[i][ReadIOSize - 1]); - fprintf(fo, " %5d IOs %2d ms %4d IO/s %6d KB/s!", sp->_IOCount, - - (int)((double)sp->_elapsed[0] - / 10000.0 - / sp->_IOCount * SimultaneousIO * DisksCount), - - (int)((double)(sp->_IOCount) * 10000000.0 / sp->_elapsed[0]), - - (int)((double)(sp->_ReadIOCount) * ReadIOSize * - 10000000.0 / sp->_elapsed[0] /2) - - (int)((double)(sp->_WriteIOCount) * WriteIOSize * - 10000000.0 / sp->_elapsed[0] /2)); + fprintf(fo, "\n!%3d !", ReadIOSize); + for (i = 0; i < Pass; ++i) { + Stat_s *sp = &(StatInfo[i][ReadIOSize - 1]); + fprintf( + fo, " %5d IOs %2d ms %4d IO/s %6d KB/s!", sp->_IOCount, + -(int)((double)sp->_elapsed[0] / 10000.0 / sp->_IOCount * + SimultaneousIO * DisksCount), + -(int)((double)(sp->_IOCount) * 10000000.0 / sp->_elapsed[0]), + -(int)((double)(sp->_ReadIOCount) * ReadIOSize * 10000000.0 / + sp->_elapsed[0] / 2) - + (int)((double)(sp->_WriteIOCount) * WriteIOSize * + 10000000.0 / sp->_elapsed[0] / 2)); + } } @@ -807,19 +883,41 @@ } - } - fclose(fo); - fo = fopen("diskperf.dat", "w"); - fprintf(fo, "Size\tIOs\tService\tIO/s\tKB/s"); - for(ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { - double ioc = 0, ser = 0, ios = 0, kbs = 0; - for(i = 0; i < Pass; ++i) { - Stat_s* sp = &(StatInfo[i][ReadIOSize - 1]); - ioc += sp->_IOCount; - ser += - (double)sp->_elapsed[0] - / 10000.0 - / sp->_IOCount * SimultaneousIO * DisksCount; - ios += - (int)((double)(sp->_IOCount) * 10000000.0 / sp->_elapsed[0]); - kbs += - (int)((double)(sp->_ReadIOCount) * ReadIOSize * - 10000000.0 / sp->_elapsed[0] /2) - - (int)((double)(sp->_WriteIOCount) * WriteIOSize * - 10000000.0 / sp->_elapsed[0] /2); + fclose(fo); + fo = fopen("diskperf.dat", "w"); + fprintf(fo, "Size\tIOs\tService\tIO/s\tKB/s"); + for (ReadIOSize = MinIOSize; ReadIOSize <= MaxIOSize; ++ReadIOSize) { + double ioc = 0, ser = 0, ios = 0, kbs = 0; + for (i = 0; i < Pass; ++i) { + Stat_s *sp = &(StatInfo[i][ReadIOSize - 1]); + ioc += sp->_IOCount; + ser += -(double)sp->_elapsed[0] / 10000.0 / sp->_IOCount * + SimultaneousIO * DisksCount; + ios += + -(int)((double)(sp->_IOCount) * 10000000.0 / sp->_elapsed[0]); + kbs += -(int)((double)(sp->_ReadIOCount) * ReadIOSize * 10000000.0 / + sp->_elapsed[0] / 2) - + (int)((double)(sp->_WriteIOCount) * WriteIOSize * + 10000000.0 / sp->_elapsed[0] / 2); + } + ioc /= Pass; + ser /= Pass; + ios /= Pass; + kbs /= Pass; + fprintf(fo, "\n%3d\t%d\t%d\t%d\t%d", ReadIOSize, (int)ioc, (int)ser, + (int)ios, (int)kbs); + /* + for(i = 0; i < Pass; ++i) { + Stat_s* sp = &(StatInfo[i][ReadIOSize - 1]); + fprintf(fo, "\t%5d\t%2d\t%4d\t%4d", sp->_IOCount, + - (int)((double)sp->_elapsed[0] + / 10000.0 + / sp->_IOCount * SimultaneousIO * + DisksCount), + - (int)((double)(sp->_IOCount) * 10000000.0 / + sp->_elapsed[0]), + - (int)((double)(sp->_ReadIOCount) * + 10000000.0 / sp->_elapsed[0] * ReadIOSize / 2) + - (int)((double)(sp->_WriteIOCount) * + 10000000.0 / sp->_elapsed[0] * WriteIOSize / 2)); + } + */ } @@ -825,24 +923,3 @@ } - ioc /= Pass; - ser /= Pass; - ios /= Pass; - kbs /= Pass; - fprintf(fo, "\n%3d\t%d\t%d\t%d\t%d", ReadIOSize, (int)ioc, (int)ser, - (int)ios, (int)kbs); -/* - for(i = 0; i < Pass; ++i) { - Stat_s* sp = &(StatInfo[i][ReadIOSize - 1]); - fprintf(fo, "\t%5d\t%2d\t%4d\t%4d", sp->_IOCount, - - (int)((double)sp->_elapsed[0] - / 10000.0 - / sp->_IOCount * SimultaneousIO * DisksCount), - - (int)((double)(sp->_IOCount) * 10000000.0 / sp->_elapsed[0]), - - (int)((double)(sp->_ReadIOCount) * - 10000000.0 / sp->_elapsed[0] * ReadIOSize / 2) - - (int)((double)(sp->_WriteIOCount) * - 10000000.0 / sp->_elapsed[0] * WriteIOSize / 2)); - } -*/ - } - fclose(fo); + fclose(fo); }