Author: jimharris
Date: Wed Jun 26 23:02:48 2013
New Revision: 252267
URL: http://svnweb.freebsd.org/changeset/base/252267

Log:
  Break out code related to the perftest command into a separate file.
  
  Sponsored by: Intel
  MFC after:    3 days

Added:
  head/sbin/nvmecontrol/perftest.c   (contents, props changed)
Modified:
  head/sbin/nvmecontrol/Makefile
  head/sbin/nvmecontrol/nvmecontrol.c
  head/sbin/nvmecontrol/nvmecontrol.h

Modified: head/sbin/nvmecontrol/Makefile
==============================================================================
--- head/sbin/nvmecontrol/Makefile      Wed Jun 26 23:00:42 2013        
(r252266)
+++ head/sbin/nvmecontrol/Makefile      Wed Jun 26 23:02:48 2013        
(r252267)
@@ -1,7 +1,7 @@
 # $FreeBSD$
 
 PROG=  nvmecontrol
-SRCS=  nvmecontrol.c devlist.c identify.c
+SRCS=  nvmecontrol.c devlist.c identify.c perftest.c
 MAN=   nvmecontrol.8
 
 .include <bsd.prog.mk>

Modified: head/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- head/sbin/nvmecontrol/nvmecontrol.c Wed Jun 26 23:00:42 2013        
(r252266)
+++ head/sbin/nvmecontrol/nvmecontrol.c Wed Jun 26 23:02:48 2013        
(r252267)
@@ -44,8 +44,6 @@ __FBSDID("$FreeBSD$");
 
 #include "nvmecontrol.h"
 
-static void perftest_usage(void);
-
 static void
 usage(void)
 {
@@ -136,143 +134,6 @@ open_dev(const char *str, int *fd, int s
 }
 
 static void
-print_perftest(struct nvme_io_test *io_test, bool perthread)
-{
-       uint32_t i, io_completed = 0, iops, mbps;
-
-       for (i = 0; i < io_test->num_threads; i++)
-               io_completed += io_test->io_completed[i];
-
-       iops = io_completed/io_test->time;
-       mbps = iops * io_test->size / (1024*1024);
-
-       printf("Threads: %2d Size: %6d %5s Time: %3d IO/s: %7d MB/s: %4d\n",
-           io_test->num_threads, io_test->size,
-           io_test->opc == NVME_OPC_READ ? "READ" : "WRITE",
-           io_test->time, iops, mbps);
-
-       if (perthread)
-               for (i = 0; i < io_test->num_threads; i++)
-                       printf("\t%3d: %8d IO/s\n", i,
-                           io_test->io_completed[i]/io_test->time);
-
-       exit(1);
-}
-
-static void
-perftest_usage(void)
-{
-       fprintf(stderr, "usage:\n");
-       fprintf(stderr, PERFTEST_USAGE);
-       exit(EX_USAGE);
-}
-
-static void
-perftest(int argc, char *argv[])
-{
-       struct nvme_io_test             io_test;
-       int                             fd;
-       char                            ch;
-       char                            *p;
-       u_long                          ioctl_cmd = NVME_IO_TEST;
-       bool                            nflag, oflag, sflag, tflag;
-       int                             perthread = 0;
-
-       nflag = oflag = sflag = tflag = false;
-
-       memset(&io_test, 0, sizeof(io_test));
-
-       while ((ch = getopt(argc, argv, "f:i:n:o:ps:t:")) != -1) {
-               switch (ch) {
-               case 'f':
-                       if (!strcmp(optarg, "refthread"))
-                               io_test.flags |= NVME_TEST_FLAG_REFTHREAD;
-                       break;
-               case 'i':
-                       if (!strcmp(optarg, "bio") ||
-                           !strcmp(optarg, "wait"))
-                               ioctl_cmd = NVME_BIO_TEST;
-                       else if (!strcmp(optarg, "io") ||
-                                !strcmp(optarg, "intr"))
-                               ioctl_cmd = NVME_IO_TEST;
-                       break;
-               case 'n':
-                       nflag = true;
-                       io_test.num_threads = strtoul(optarg, &p, 0);
-                       if (p != NULL && *p != '\0') {
-                               fprintf(stderr,
-                                   "\"%s\" not valid number of threads.\n",
-                                   optarg);
-                               perftest_usage();
-                       } else if (io_test.num_threads == 0 ||
-                                  io_test.num_threads > 128) {
-                               fprintf(stderr,
-                                   "\"%s\" not valid number of threads.\n",
-                                   optarg);
-                               perftest_usage();
-                       }
-                       break;
-               case 'o':
-                       oflag = true;
-                       if (!strcmp(optarg, "read") || !strcmp(optarg, "READ"))
-                               io_test.opc = NVME_OPC_READ;
-                       else if (!strcmp(optarg, "write") ||
-                                !strcmp(optarg, "WRITE"))
-                               io_test.opc = NVME_OPC_WRITE;
-                       else {
-                               fprintf(stderr, "\"%s\" not valid opcode.\n",
-                                   optarg);
-                               perftest_usage();
-                       }
-                       break;
-               case 'p':
-                       perthread = 1;
-                       break;
-               case 's':
-                       sflag = true;
-                       io_test.size = strtoul(optarg, &p, 0);
-                       if (p == NULL || *p == '\0' || toupper(*p) == 'B') {
-                               // do nothing
-                       } else if (toupper(*p) == 'K') {
-                               io_test.size *= 1024;
-                       } else if (toupper(*p) == 'M') {
-                               io_test.size *= 1024 * 1024;
-                       } else {
-                               fprintf(stderr, "\"%s\" not valid size.\n",
-                                   optarg);
-                               perftest_usage();
-                       }
-                       break;
-               case 't':
-                       tflag = true;
-                       io_test.time = strtoul(optarg, &p, 0);
-                       if (p != NULL && *p != '\0') {
-                               fprintf(stderr,
-                                   "\"%s\" not valid time duration.\n",
-                                   optarg);
-                               perftest_usage();
-                       }
-                       break;
-               }
-       }
-
-       if (!nflag || !oflag || !sflag || !tflag || optind >= argc)
-               perftest_usage();
-
-       open_dev(argv[optind], &fd, 1, 1);
-       if (ioctl(fd, ioctl_cmd, &io_test) < 0) {
-               fprintf(stderr, "NVME_IO_TEST failed. errno=%d (%s)\n", errno,
-                   strerror(errno));
-               close(fd);
-               exit(EX_IOERR);
-       }
-
-       close(fd);
-       print_perftest(&io_test, perthread);
-       exit(EX_OK);
-}
-
-static void
 reset_usage(void)
 {
        fprintf(stderr, "usage:\n");

Modified: head/sbin/nvmecontrol/nvmecontrol.h
==============================================================================
--- head/sbin/nvmecontrol/nvmecontrol.h Wed Jun 26 23:00:42 2013        
(r252266)
+++ head/sbin/nvmecontrol/nvmecontrol.h Wed Jun 26 23:02:48 2013        
(r252267)
@@ -52,6 +52,7 @@ void read_namespace_data(int fd, int nsi
 
 void devlist(int argc, char *argv[]);
 void identify(int argc, char *argv[]);
+void perftest(int argc, char *argv[]);
 
 #endif
 

Added: head/sbin/nvmecontrol/perftest.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sbin/nvmecontrol/perftest.c    Wed Jun 26 23:02:48 2013        
(r252267)
@@ -0,0 +1,181 @@
+/*-
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/ioccom.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nvmecontrol.h"
+
+static void
+print_perftest(struct nvme_io_test *io_test, bool perthread)
+{
+       uint32_t i, io_completed = 0, iops, mbps;
+
+       for (i = 0; i < io_test->num_threads; i++)
+               io_completed += io_test->io_completed[i];
+
+       iops = io_completed/io_test->time;
+       mbps = iops * io_test->size / (1024*1024);
+
+       printf("Threads: %2d Size: %6d %5s Time: %3d IO/s: %7d MB/s: %4d\n",
+           io_test->num_threads, io_test->size,
+           io_test->opc == NVME_OPC_READ ? "READ" : "WRITE",
+           io_test->time, iops, mbps);
+
+       if (perthread)
+               for (i = 0; i < io_test->num_threads; i++)
+                       printf("\t%3d: %8d IO/s\n", i,
+                           io_test->io_completed[i]/io_test->time);
+
+       exit(1);
+}
+
+static void
+perftest_usage(void)
+{
+       fprintf(stderr, "usage:\n");
+       fprintf(stderr, PERFTEST_USAGE);
+       exit(EX_USAGE);
+}
+
+void
+perftest(int argc, char *argv[])
+{
+       struct nvme_io_test             io_test;
+       int                             fd;
+       char                            ch;
+       char                            *p;
+       u_long                          ioctl_cmd = NVME_IO_TEST;
+       bool                            nflag, oflag, sflag, tflag;
+       int                             perthread = 0;
+
+       nflag = oflag = sflag = tflag = false;
+
+       memset(&io_test, 0, sizeof(io_test));
+
+       while ((ch = getopt(argc, argv, "f:i:n:o:ps:t:")) != -1) {
+               switch (ch) {
+               case 'f':
+                       if (!strcmp(optarg, "refthread"))
+                               io_test.flags |= NVME_TEST_FLAG_REFTHREAD;
+                       break;
+               case 'i':
+                       if (!strcmp(optarg, "bio") ||
+                           !strcmp(optarg, "wait"))
+                               ioctl_cmd = NVME_BIO_TEST;
+                       else if (!strcmp(optarg, "io") ||
+                                !strcmp(optarg, "intr"))
+                               ioctl_cmd = NVME_IO_TEST;
+                       break;
+               case 'n':
+                       nflag = true;
+                       io_test.num_threads = strtoul(optarg, &p, 0);
+                       if (p != NULL && *p != '\0') {
+                               fprintf(stderr,
+                                   "\"%s\" not valid number of threads.\n",
+                                   optarg);
+                               perftest_usage();
+                       } else if (io_test.num_threads == 0 ||
+                                  io_test.num_threads > 128) {
+                               fprintf(stderr,
+                                   "\"%s\" not valid number of threads.\n",
+                                   optarg);
+                               perftest_usage();
+                       }
+                       break;
+               case 'o':
+                       oflag = true;
+                       if (!strcmp(optarg, "read") || !strcmp(optarg, "READ"))
+                               io_test.opc = NVME_OPC_READ;
+                       else if (!strcmp(optarg, "write") ||
+                                !strcmp(optarg, "WRITE"))
+                               io_test.opc = NVME_OPC_WRITE;
+                       else {
+                               fprintf(stderr, "\"%s\" not valid opcode.\n",
+                                   optarg);
+                               perftest_usage();
+                       }
+                       break;
+               case 'p':
+                       perthread = 1;
+                       break;
+               case 's':
+                       sflag = true;
+                       io_test.size = strtoul(optarg, &p, 0);
+                       if (p == NULL || *p == '\0' || toupper(*p) == 'B') {
+                               // do nothing
+                       } else if (toupper(*p) == 'K') {
+                               io_test.size *= 1024;
+                       } else if (toupper(*p) == 'M') {
+                               io_test.size *= 1024 * 1024;
+                       } else {
+                               fprintf(stderr, "\"%s\" not valid size.\n",
+                                   optarg);
+                               perftest_usage();
+                       }
+                       break;
+               case 't':
+                       tflag = true;
+                       io_test.time = strtoul(optarg, &p, 0);
+                       if (p != NULL && *p != '\0') {
+                               fprintf(stderr,
+                                   "\"%s\" not valid time duration.\n",
+                                   optarg);
+                               perftest_usage();
+                       }
+                       break;
+               }
+       }
+
+       if (!nflag || !oflag || !sflag || !tflag || optind >= argc)
+               perftest_usage();
+
+       open_dev(argv[optind], &fd, 1, 1);
+       if (ioctl(fd, ioctl_cmd, &io_test) < 0) {
+               fprintf(stderr, "NVME_IO_TEST failed. errno=%d (%s)\n", errno,
+                   strerror(errno));
+               close(fd);
+               exit(EX_IOERR);
+       }
+
+       close(fd);
+       print_perftest(&io_test, perthread);
+       exit(EX_OK);
+}
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to