Add scripts for running the benchmark on PowerPC
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 6 Jan 2014 16:04:46 +0000 (17:04 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 6 Jan 2014 16:04:46 +0000 (17:04 +0100)
buildppc/.novaboot [new file with mode: 0644]
recvmmsg/bench.sh
recvmmsg/can_recvmmsg.c
recvmmsg/ppc/boot [new file with mode: 0755]
recvmmsg/ppc/can_recvmmsg [new symlink]
recvmmsg/ppc/mkinitramfs [new file with mode: 0755]
recvmmsg/ppc/plot.gp [new symlink]
recvmmsg/ppc/rootfs.cpio [new symlink]
recvmmsg/ppc/shark-ryu.dtb [new symlink]
recvmmsg/ppc/uImage [new symlink]

diff --git a/buildppc/.novaboot b/buildppc/.novaboot
new file mode 100644 (file)
index 0000000..0cd421a
--- /dev/null
@@ -0,0 +1 @@
+$default_target = 'ryuglab';
index d2c4742..095fd55 100755 (executable)
@@ -1,9 +1,19 @@
 #!/bin/sh
 
-for i in $(octave -q --eval "disp(round(logspace(log10(10), log10(50000), 1000))')"); do
+echo "Running can_recvmmsg benchmark"
+
+PATH=../_compiled/bin:$PATH
+
+ip link add vcan0 type vcan
+ip l set dev vcan0 up
+
+# Elisp: (insert (concat "\nCOUNTS='" (shell-command-to-string "octave -f -q --eval \"split_long_rows(0); disp(round(logspace(log10(10), log10(50000), 300)))\" 2>/dev/null| tr -s ' '") "'"))
+COUNTS='10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 22 22 23 24 24 25 26 26 27 28 29 30 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 47 48 49 51 52 54 55 57 58 60 62 64 66 67 69 71 73 76 78 80 82 85 87 90 92 95 98 100 103 106 109 113 116 119 123 126 130 134 137 141 146 150 154 158 163 168 173 178 183 188 193 199 205 211 217 223 230 236 243 250 257 265 272 280 288 297 305 314 323 332 342 352 362 373 383 394 406 417 430 442 455 468 481 495 510 524 539 555 571 588 605 622 640 659 678 697 717 738 759 781 804 827 851 876 901 927 954 981 1010 1039 1069 1100 1131 1164 1198 1232 1268 1305 1342 1381 1421 1462 1504 1548 1592 1638 1686 1735 1785 1836 1889 1944 2000 2058 2117 2178 2241 2306 2373 2441 2512 2584 2659 2736 2815 2896 2980 3066 3155 3246 3340 3436 3536 3638 3743 3851 3962 4077 4195 4316 4440 4569 4701 4837 4976 5120 5268 5420 5577 5738 5904 6074 6250 6431 6616 6808 7004 7207 7415 7629 7850 8076 8310 8550 8797 9051 9313 9582 9859 10143 10437 10738 11048 11368 11696 12034 12382 12740 13108 13486 13876 14277 14690 15114 15551 16000 16462 16938 17428 17931 18449 18982 19531 20095 20676 21273 21888 22521 23171 23841 24530 25238 25968 26718 27490 28284 29102 29943 30808 31698 32614 33556 34526 35524 36550 37606 38693 39811 40961 42145 43363 44615 45905 47231 48596 50000'
+
+for i in $COUNTS; do
 #    for j in $(seq 10); do
-       tr=$(../_compiled/bin/can_recvmmsg -c $i -r)
-       tm=$(../_compiled/bin/can_recvmmsg -c $i -m)
+       tr=$(can_recvmmsg -q -c $i -r)
+       tm=$(can_recvmmsg -q -c $i -m)
        echo $i $tr $tm
 #    done
 done
index 4041f62..4dee5f1 100644 (file)
 #include <stdlib.h>
 #include <stdio.h>
 #include <time.h>
+#include <stdbool.h>
 
 #define CHECK(cmd) do { if ((cmd) == -1) { perror(#cmd); exit(1); } } while (0)
 
 char *dev = "vcan0";
 int count = 10000;
 enum { READ, RECVMMSG } recv_method = READ;
+bool quiet = false;
 
 /* Subtract the `struct timespec' values X and Y,
    storing the result in RESULT (result = x - y).
@@ -79,7 +81,7 @@ void benchmark()
        memset(&cf, 0, sizeof(cf));
        cf.can_dlc = 8;
 
-       fprintf(stderr, "Sending %d frames\n", count);
+       if (!quiet) fprintf(stderr, "Sending %d frames\n", count);
        for (i = 0; i < count; i++) {
                ret = write(ss, &cf, sizeof(cf));
                if (ret != sizeof(cf)) {
@@ -90,7 +92,7 @@ void benchmark()
 
        switch (recv_method) {
        case READ: {
-               fprintf(stderr, "Receiving %d frames with read()\n", count);
+               if (!quiet) fprintf(stderr, "Receiving %d frames with read()\n", count);
                clock_gettime(CLOCK_MONOTONIC, &t1);
                for (i = 0; i < count; i++) {
                        //fprintf(stderr, "Receiving frame %d\r", i);
@@ -105,7 +107,7 @@ void benchmark()
                break;
        }
        case RECVMMSG: {
-               fprintf(stderr, "Receiving %d frames with recvmmsg()\n", count);
+               if (!quiet) fprintf(stderr, "Receiving %d frames with recvmmsg()\n", count);
                struct mmsghdr msgs[count];
                struct iovec iovecs[count];
                char bufs[count][sizeof(struct can_frame)];
@@ -139,7 +141,7 @@ int main(int argc, char *argv[])
 {
        int opt;
 
-       while ((opt = getopt(argc, argv, "c:mr")) != -1) {
+       while ((opt = getopt(argc, argv, "c:mrq")) != -1) {
                switch (opt) {
                case 'c':
                        count = atoi(optarg);
@@ -150,6 +152,9 @@ int main(int argc, char *argv[])
                case 'r':
                        recv_method = READ;
                        break;
+               case 'q':
+                       quiet = true;
+                       break;
                default: /* '?' */
                        fprintf(stderr, "Usage: %s [-c <count>] [-r] [-m]  [interface]\n",
                                argv[0]);
diff --git a/recvmmsg/ppc/boot b/recvmmsg/ppc/boot
new file mode 100755 (executable)
index 0000000..e305e53
--- /dev/null
@@ -0,0 +1,6 @@
+#!/usr/bin/env novaboot
+# -*-sh-*-
+
+uImage console=ttyPSC0,115200
+shark-ryu.dtb
+rootfs2.uImage < $SRCDIR/mkinitramfs
diff --git a/recvmmsg/ppc/can_recvmmsg b/recvmmsg/ppc/can_recvmmsg
new file mode 120000 (symlink)
index 0000000..df9f327
--- /dev/null
@@ -0,0 +1 @@
+../../buildppc/_compiled/bin/can_recvmmsg
\ No newline at end of file
diff --git a/recvmmsg/ppc/mkinitramfs b/recvmmsg/ppc/mkinitramfs
new file mode 100755 (executable)
index 0000000..c6b4f31
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+SRCDIR=${SRCDIR:-$(dirname $0)}
+
+tmpcpio=$(mktemp)
+catcpio=$(mktemp)
+uimage=$(mktemp)
+
+gen_init_cpio - <<EOF > $tmpcpio
+dir /etc 0755 0 0
+dir /etc/init.d 0755 0 0
+file /etc/init.d/S50benchmark $SRCDIR/../bench.sh 0755 0 0
+dir /bin 0755 0 0
+file /bin/can_recvmmsg can_recvmmsg 0755 0 0
+EOF
+
+cat $SRCDIR/rootfs.cpio $tmpcpio > $catcpio
+mkimage -T ramdisk -A powerpc -O linux -d $catcpio $uimage >&2
+cat $uimage
+
+rm $catcpio $tmpcpio $uimage
diff --git a/recvmmsg/ppc/plot.gp b/recvmmsg/ppc/plot.gp
new file mode 120000 (symlink)
index 0000000..bb0706f
--- /dev/null
@@ -0,0 +1 @@
+../plot.gp
\ No newline at end of file
diff --git a/recvmmsg/ppc/rootfs.cpio b/recvmmsg/ppc/rootfs.cpio
new file mode 120000 (symlink)
index 0000000..fbd31c6
--- /dev/null
@@ -0,0 +1 @@
+../../rootfs/build/images/rootfs.cpio
\ No newline at end of file
diff --git a/recvmmsg/ppc/shark-ryu.dtb b/recvmmsg/ppc/shark-ryu.dtb
new file mode 120000 (symlink)
index 0000000..df8743b
--- /dev/null
@@ -0,0 +1 @@
+../../kernel/build/shark/3.12/arch/powerpc/boot/shark-ryu.dtb
\ No newline at end of file
diff --git a/recvmmsg/ppc/uImage b/recvmmsg/ppc/uImage
new file mode 120000 (symlink)
index 0000000..adfe471
--- /dev/null
@@ -0,0 +1 @@
+../../kernel/build/shark/3.12/arch/powerpc/boot/uImage
\ No newline at end of file