2 This file is part of GNUnet.
3 (C) 2010-2013 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
21 * @file ats/perf_ats.c
22 * @brief ats benchmark: start peers and modify preferences, monitor change over time
23 * @author Christian Grothoff
24 * @author Matthias Wachs
27 #include "gnunet_util_lib.h"
28 #include "gnunet_testbed_service.h"
29 #include "gnunet_ats_service.h"
30 #include "gnunet_core_service.h"
32 #define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
33 #define BENCHMARK_DURATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
34 #define TESTNAME_PREFIX "perf_ats_"
35 #define DEFAULT_SLAVES_NUM 3
36 #define DEFAULT_MASTERS_NUM 1
38 #define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
39 #define TEST_ATS_PREFRENCE_START 1.0
40 #define TEST_ATS_PREFRENCE_DELTA 1.0
42 #define TEST_MESSAGE_TYPE_PING 12345
43 #define TEST_MESSAGE_TYPE_PONG 12346
44 #define TEST_MESSAGE_SIZE 1000
45 #define TEST_MESSAGE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
48 * Information about a benchmarking partner
50 struct BenchmarkPartner
53 * The peer itself this partner belongs to
55 struct BenchmarkPeer *me;
60 struct BenchmarkPeer *dest;
63 * Core transmit handles
65 struct GNUNET_CORE_TransmitHandle *cth;
68 * Transport transmit handles
70 struct GNUNET_TRANSPORT_TransmitHandle *tth;
73 * Number of messages sent to this partner
75 unsigned int messages_sent;
78 * Number of bytes sent to this partner
80 unsigned int bytes_sent;
83 * Number of messages received from this partner
85 unsigned int messages_received;
88 * Number of bytes received from this partner
90 unsigned int bytes_received;
95 * Information we track for a peer in the testbed.
100 * Handle with testbed.
102 struct GNUNET_TESTBED_Peer *peer;
110 * Is this peer a measter: GNUNET_YES/GNUNET_NO
117 struct GNUNET_PeerIdentity id;
120 * Testbed operation to get peer information
122 struct GNUNET_TESTBED_Operation *peer_id_op;
125 * Testbed operation to connect to ATS performance service
127 struct GNUNET_TESTBED_Operation *ats_perf_op;
130 * Testbed operation to connect to core
132 struct GNUNET_TESTBED_Operation *comm_op;
135 * ATS performance handle
137 struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
141 * Testbed connect operations to connect masters to slaves
143 struct TestbedConnectOperation *core_connect_ops;
148 struct GNUNET_CORE_Handle *ch;
153 struct GNUNET_TRANSPORT_Handle *th;
157 * Peer to set ATS preferences for
159 struct BenchmarkPeer *pref_partner;
165 GNUNET_SCHEDULER_TaskIdentifier ats_task;
174 * Array of partners with num_slaves entries (if master) or
175 * num_master entries (if slave)
177 struct BenchmarkPartner *partners;
185 * Number of core connections
187 int core_connections;
191 * Number of connections to slave peers
193 int core_slave_connections;
196 * Total number of messages this peer has sent
198 unsigned int total_messages_sent;
201 * Total number of bytes this peer has sent
203 unsigned int total_bytes_sent;
206 * Total number of messages this peer has received
208 unsigned int total_messages_received;
211 * Total number of bytes this peer has received
213 unsigned int total_bytes_received;
218 perf_logging_stop ();
221 perf_logging_start (char * testname, struct BenchmarkPeer *masters, int num_masters);
224 /* end of file perf_ats.h */