Add initial support for benchmarking xseg
[archipelago] / xseg / peers / user / bench-xseg.c
1 /*
2  * Copyright 2012 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *   2. Redistributions in binary form must reproduce the above
12  *      copyright notice, this list of conditions and the following
13  *      disclaimer in the documentation and/or other materials
14  *      provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  *
29  * The views and conclusions contained in the software and
30  * documentation are those of the authors and should not be
31  * interpreted as representing official policies, either expressed
32  * or implied, of GRNET S.A.
33  */
34
35 #include <stdio.h>
36 #include <unistd.h>
37 #include <sys/types.h>
38 #include <pthread.h>
39 #include <xseg/xseg.h>
40 #include <peer.h>
41 #include <time.h>
42 #include <sys/util.h>
43
44 struct timespec delay = {0, 4000000};
45
46 void custom_peer_usage()
47 {
48         fprintf(stderr, "Custom peer options: \n"
49                 "  --------------------------------------------\n"
50                 "    -ts       | No      | Total I/O size\n"
51                 "    -os       | 4MB     | Object size\n"
52                 "    --iodepth | 1       | Number of in-flight I/O requests\n"
53                 "\n");
54 }
55 int custom_peer_init(struct peerd *peer, int argc, char *argv[])
56 {
57
58         return 0;
59 }
60
61 void custom_peer_finalize(struct peerd *peer)
62 {
63         return;
64 }
65
66 int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *req,
67                 enum dispatch_reason reason)
68 {
69         if (canDefer(peer))
70                 defer_request(peer, pr);
71         else {
72 //              printf("completing req id: %u (remote %u)\n", (unsigned int) (pr - peer->peer_reqs), (unsigned int) pr->req->priv);
73 //              nanosleep(&delay,NULL);
74                 print_req(peer->xseg, pr->req);
75                 complete(peer, pr);
76         }
77         return 0;
78 }