2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your 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 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 SPDX-License-Identifier: AGPL3.0-or-later
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"
31 #include "ats-testing.h"
33 #define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 120)
34 #define BENCHMARK_DURATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
35 #define LOGGING_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 500)
36 #define TESTNAME_PREFIX "perf_ats_"
37 #define DEFAULT_SLAVES_NUM 2
38 #define DEFAULT_MASTERS_NUM 1
40 #define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
41 #define TEST_ATS_PREFRENCE_START 1.0
42 #define TEST_ATS_PREFRENCE_DELTA 1.0
44 #define TEST_MESSAGE_TYPE_PING 12345
45 #define TEST_MESSAGE_TYPE_PONG 12346
46 #define TEST_MESSAGE_SIZE 1000
47 #define TEST_MESSAGE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
50 * Information about a benchmarking partner
52 struct BenchmarkPartner
55 * The peer itself this partner belongs to
57 struct BenchmarkPeer *me;
62 struct BenchmarkPeer *dest;
65 * Core transmit handles
67 struct GNUNET_CORE_TransmitHandle *cth;
70 * Transport transmit handles
72 struct GNUNET_TRANSPORT_TransmitHandle *tth;
75 * Timestamp to calculate communication layer delay
77 struct GNUNET_TIME_Absolute last_message_sent;
80 * Accumulated RTT for all messages
82 unsigned int total_app_rtt;
85 * Number of messages sent to this partner
87 unsigned int messages_sent;
90 * Number of bytes sent to this partner
92 unsigned int bytes_sent;
95 * Number of messages received from this partner
97 unsigned int messages_received;
100 * Number of bytes received from this partner
102 unsigned int bytes_received;
104 /* Current ATS properties */
106 uint32_t ats_distance;
110 uint32_t bandwidth_in;
112 uint32_t bandwidth_out;
114 uint32_t ats_utilization_up;
116 uint32_t ats_utilization_down;
118 uint32_t ats_network_type;
120 uint32_t ats_cost_wan;
122 uint32_t ats_cost_lan;
124 uint32_t ats_cost_wlan;
129 * Information we track for a peer in the testbed.
134 * Handle with testbed.
136 struct GNUNET_TESTBED_Peer *peer;
144 * Is this peer a measter: GNUNET_YES/GNUNET_NO
151 struct GNUNET_PeerIdentity id;
154 * Testbed operation to get peer information
156 struct GNUNET_TESTBED_Operation *peer_id_op;
159 * Testbed operation to connect to ATS performance service
161 struct GNUNET_TESTBED_Operation *ats_perf_op;
164 * Testbed operation to connect to core
166 struct GNUNET_TESTBED_Operation *comm_op;
169 * ATS performance handle
171 struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
175 * Testbed connect operations to connect masters to slaves
177 struct TestbedConnectOperation *core_connect_ops;
182 struct GNUNET_CORE_Handle *ch;
187 struct GNUNET_TRANSPORT_Handle *th;
191 * Peer to set ATS preferences for
193 struct BenchmarkPeer *pref_partner;
199 struct GNUNET_SCHEDULER_Task * ats_task;
208 * Array of partners with num_slaves entries (if master) or
209 * num_master entries (if slave)
211 struct BenchmarkPartner *partners;
219 * Number of core connections
221 int core_connections;
225 * Number of connections to slave peers
227 int core_slave_connections;
230 * Total number of messages this peer has sent
232 unsigned int total_messages_sent;
235 * Total number of bytes this peer has sent
237 unsigned int total_bytes_sent;
240 * Total number of messages this peer has received
242 unsigned int total_messages_received;
245 * Total number of bytes this peer has received
247 unsigned int total_bytes_received;
251 /* end of file perf_ats.h */