X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fstatmany.c;h=c7ee5ca7dd6d309e5770f649f6fc28a5536e463a;hp=9b182523cfcfda3196a60c1c9970c3856fb6dcd5;hb=4a4d888a07da2eaec5723473cdc5440768b4a9e3;hpb=b979e388f954d0cc4b822e1a031fb00ac2b7c897 diff --git a/lustre/tests/statmany.c b/lustre/tests/statmany.c index 9b18252..c7ee5ca 100644 --- a/lustre/tests/statmany.c +++ b/lustre/tests/statmany.c @@ -1,3 +1,34 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html + * + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2014, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + */ + #include #include #include @@ -9,51 +40,46 @@ #include #include #include -#include -#if 0 -#include -#endif -#include -#include -#include +#include struct option longopts[] = { - {"ea", 0, 0, 'e'}, - {"lookup", 0, 0, 'l'}, - {"random", 0, 0, 'r'}, - {"stat", 0, 0, 's'}, - {NULL, 0, 0, 0}, + { .name = "lookup", .has_arg = no_argument, .val = 'l' }, + { .name = "random", .has_arg = no_argument, .val = 'r' }, + { .name = "stat", .has_arg = no_argument, .val = 's' }, + { .name = NULL } }; -char *shortopts = "ehlr:s0123456789"; + +char *shortopts = "hlr:s0123456789"; static int usage(char *prog, FILE *out) { - fprintf(out, - "Usage: %s [-r rand_seed] {-s|-e|-l} filenamebase total_files iterations\n" - "-r : random seed\n" - "-s : regular stat() calls\n" - "-e : open then GET_EA ioctl\n" - "-l : lookup ioctl only\n", prog); - exit(out == stderr); + fprintf(out, + "Usage: %s [-r rand_seed] {-s|-l} filenamebase total_files iterations\n" + "-r : random seed\n" + "-s : regular stat() calls\n" + "-l : lookup ioctl only\n", prog); + exit(out == stderr); } #ifndef LONG_MAX #define LONG_MAX (1 << ((8 * sizeof(long)) - 1)) #endif -int main(int argc, char ** argv) +int main(int argc, char **argv) { - long i, count, iter = LONG_MAX, mode = 0, offset; - long int start, length = LONG_MAX, last, rc = 0; - char parent[4096], *t; - char c, *prog = argv[0], *base; - int seed = 0; + long i, count, iter = LONG_MAX, mode = 0, offset; + long int start, length = LONG_MAX, last; + char parent[4096], *t; + char *prog = argv[0], *base; + int seed = 0, rc; int fd = -1; - while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1) { + while ((rc = getopt_long(argc, argv, shortopts, longopts, + NULL)) != -1) { char *e; - switch (c) { + + switch (rc) { case 'r': seed = strtoul(optarg, &e, 0); if (*e) { @@ -61,10 +87,9 @@ int main(int argc, char ** argv) usage(prog, stderr); } break; - case 'e': case 'l': case 's': - mode = c; + mode = rc; break; case '0': case '1': @@ -77,9 +102,9 @@ int main(int argc, char ** argv) case '8': case '9': if (length == LONG_MAX) - length = c - '0'; + length = rc - '0'; else - length = length * 10 + (c - '0'); + length = length * 10 + (rc - '0'); break; case 'h': usage(prog, stdout); @@ -88,21 +113,17 @@ int main(int argc, char ** argv) } } - if (mode == 0) { - fprintf(stderr, "one of '-l', '-e', or '-s' must be supplied.\n"); - usage(prog, stderr); - } - if (optind + 2 + (length == LONG_MAX) != argc) { - fprintf(stderr, "missing filenamebase, total_files, or iterations\n"); + fprintf(stderr, + "missing filenamebase, total_files, or iterations\n"); usage(prog, stderr); } - base = argv[optind]; - if (strlen(base) > 4080) { - fprintf(stderr, "filenamebase too long\n"); - exit(1); - } + base = argv[optind]; + if (strlen(base) > 4080) { + fprintf(stderr, "filenamebase too long\n"); + exit(1); + } if (seed == 0) { int f = open("/dev/urandom", O_RDONLY); @@ -116,23 +137,25 @@ int main(int argc, char ** argv) printf("using seed %u\n", seed); srand(seed); - count = strtoul(argv[optind + 1], NULL, 0); + count = strtoul(argv[optind + 1], NULL, 0); if (length == LONG_MAX) { iter = strtoul(argv[optind + 2], NULL, 0); printf("running for %lu iterations\n", iter); - } else + } else { printf("running for %lu seconds\n", length); + } - start = last = time(0); + start = time(0); + last = start; - t = strrchr(base, '/'); - if (t == NULL) { - strcpy(parent, "."); - offset = -1; - } else { - strncpy(parent, base, t - base); - offset = t - base + 1; - } + t = strrchr(base, '/'); + if (!t) { + strcpy(parent, "."); + offset = -1; + } else { + strncpy(parent, base, t - base); + offset = t - base + 1; + } if (mode == 'l') { fd = open(parent, O_RDONLY); @@ -143,78 +166,47 @@ int main(int argc, char ** argv) } } - for (i = 0; i < iter && time(0) - start < length; i++) { - char filename[4096]; - int tmp; - - tmp = random() % count; - sprintf(filename, "%s%d", base, tmp); - - if (mode == 'e') { -#if 0 - fd = open(filename, O_RDWR|O_LARGEFILE); - if (fd < 0) { - printf("open(%s) error: %s\n", filename, - strerror(errno)); - break; - } - rc = ioctl(fd, EXTN_IOC_GETEA, NULL); - if (rc < 0) { - printf("ioctl(%s) error: %s\n", filename, - strerror(errno)); - break; - } - close(fd); - break; -#endif - } else if (mode == 's') { - struct stat buf; - - rc = stat(filename, &buf); - if (rc < 0) { - printf("stat(%s) error: %s\n", filename, - strerror(errno)); - break; - } + for (i = 0; i < iter && time(0) - start < length; i++) { + char filename[4096]; + int tmp; + + tmp = random() % count; + sprintf(filename, "%s%d", base, tmp); + + if (mode == 's') { + struct stat buf; + + rc = stat(filename, &buf); + if (rc < 0) { + printf("stat(%s) error: %s\n", filename, + strerror(errno)); + break; + } } else if (mode == 'l') { - struct obd_ioctl_data data; - char rawbuf[8192]; - char *buf = rawbuf; - int max = sizeof(rawbuf); - - memset(&data, 0, sizeof(data)); - data.ioc_version = OBD_IOCTL_VERSION; - data.ioc_len = sizeof(data); - if (offset >= 0) - data.ioc_inlbuf1 = filename + offset; - else - data.ioc_inlbuf1 = filename; - data.ioc_inllen1 = strlen(data.ioc_inlbuf1) + 1; - - if (obd_ioctl_pack(&data, &buf, max)) { - printf("ioctl_pack failed.\n"); - break; - } - - rc = ioctl(fd, IOC_MDC_LOOKUP, buf); - if (rc < 0) { - printf("ioctl(%s) error: %s\n", filename, - strerror(errno)); - break; - } - } - if ((i % 10000) == 0) { - printf(" - stat %lu (time %ld ; total %ld ; last %ld)\n", - i, time(0), time(0) - start, time(0) - last); - last = time(0); - } - } + char *name = filename; + + if (offset >= 0) + name += offset; + + rc = llapi_file_lookup(fd, name); + if (rc < 0) { + printf("llapi_file_lookup for (%s) error: %s\n", + filename, strerror(errno)); + break; + } + } + if ((i % 10000) == 0) { + printf(" - stat %lu (time %ld ; total %ld ; last %ld)\n", + i, time(0), time(0) - start, time(0) - last); + last = time(0); + } + } if (mode == 'l') close(fd); - printf("total: %lu stats in %ld seconds: %f stats/second\n", i, - time(0) - start, ((float)i / (time(0) - start))); + printf("total: %lu stats in %ld seconds: %f stats/second\n", i, + time(0) - start, ((float)i / (time(0) - start))); - exit(rc); + exit(rc); }