123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*
- This file is part of GNUnet.
- Copyright (C) 2010-2013 GNUnet e.V.
- GNUnet is free software: you can redistribute it and/or modify it
- under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License,
- or (at your option) any later version.
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- SPDX-License-Identifier: AGPL3.0-or-later
- */
- /**
- * @file ats/perf_ats.c
- * @brief ats benchmark: start peers and modify preferences, monitor change over time
- * @author Christian Grothoff
- * @author Matthias Wachs
- */
- #include "platform.h"
- #include "gnunet_util_lib.h"
- #include "gnunet_testbed_service.h"
- #include "gnunet_ats_service.h"
- #include "gnunet_core_service.h"
- #include "ats-testing.h"
- #define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 120)
- #define BENCHMARK_DURATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
- #define LOGGING_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 500)
- #define TESTNAME_PREFIX "perf_ats_"
- #define DEFAULT_SLAVES_NUM 2
- #define DEFAULT_MASTERS_NUM 1
- #define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
- #define TEST_ATS_PREFRENCE_START 1.0
- #define TEST_ATS_PREFRENCE_DELTA 1.0
- #define TEST_MESSAGE_TYPE_PING 12345
- #define TEST_MESSAGE_TYPE_PONG 12346
- #define TEST_MESSAGE_SIZE 1000
- #define TEST_MESSAGE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
- /**
- * Information about a benchmarking partner
- */
- struct BenchmarkPartner
- {
- /**
- * The peer itself this partner belongs to
- */
- struct BenchmarkPeer *me;
- /**
- * The partner peer
- */
- struct BenchmarkPeer *dest;
- /**
- * Core transmit handles
- */
- struct GNUNET_CORE_TransmitHandle *cth;
- /**
- * Transport transmit handles
- */
- struct GNUNET_TRANSPORT_TransmitHandle *tth;
- /**
- * Timestamp to calculate communication layer delay
- */
- struct GNUNET_TIME_Absolute last_message_sent;
- /**
- * Accumulated RTT for all messages
- */
- unsigned int total_app_rtt;
- /**
- * Number of messages sent to this partner
- */
- unsigned int messages_sent;
- /**
- * Number of bytes sent to this partner
- */
- unsigned int bytes_sent;
- /**
- * Number of messages received from this partner
- */
- unsigned int messages_received;
- /**
- * Number of bytes received from this partner
- */
- unsigned int bytes_received;
- /* Current ATS properties */
- uint32_t ats_distance;
- uint32_t ats_delay;
- uint32_t bandwidth_in;
- uint32_t bandwidth_out;
- uint32_t ats_utilization_up;
- uint32_t ats_utilization_down;
- uint32_t ats_network_type;
- uint32_t ats_cost_wan;
- uint32_t ats_cost_lan;
- uint32_t ats_cost_wlan;
- };
- /**
- * Information we track for a peer in the testbed.
- */
- struct BenchmarkPeer
- {
- /**
- * Handle with testbed.
- */
- struct GNUNET_TESTBED_Peer *peer;
- /**
- * Unique identifier
- */
- int no;
- /**
- * Is this peer a measter: GNUNET_YES/GNUNET_NO
- */
- int master;
- /**
- * Peer ID
- */
- struct GNUNET_PeerIdentity id;
- /**
- * Testbed operation to get peer information
- */
- struct GNUNET_TESTBED_Operation *peer_id_op;
- /**
- * Testbed operation to connect to ATS performance service
- */
- struct GNUNET_TESTBED_Operation *ats_perf_op;
- /**
- * Testbed operation to connect to core
- */
- struct GNUNET_TESTBED_Operation *comm_op;
- /**
- * ATS performance handle
- */
- struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
- /**
- * Masters only:
- * Testbed connect operations to connect masters to slaves
- */
- struct TestbedConnectOperation *core_connect_ops;
- /**
- * Core handle
- */
- struct GNUNET_CORE_Handle *ch;
- /**
- * Core handle
- */
- struct GNUNET_TRANSPORT_Handle *th;
- /**
- * Masters only:
- * Peer to set ATS preferences for
- */
- struct BenchmarkPeer *pref_partner;
- /**
- * Masters only
- * Progress task
- */
- struct GNUNET_SCHEDULER_Task * ats_task;
- /**
- * Masters only
- * Progress task
- */
- double pref_value;
- /**
- * Array of partners with num_slaves entries (if master) or
- * num_master entries (if slave)
- */
- struct BenchmarkPartner *partners;
- /**
- * Number of partners
- */
- int num_partners;
- /**
- * Number of core connections
- */
- int core_connections;
- /**
- * Masters only:
- * Number of connections to slave peers
- */
- int core_slave_connections;
- /**
- * Total number of messages this peer has sent
- */
- unsigned int total_messages_sent;
- /**
- * Total number of bytes this peer has sent
- */
- unsigned int total_bytes_sent;
- /**
- * Total number of messages this peer has received
- */
- unsigned int total_messages_received;
- /**
- * Total number of bytes this peer has received
- */
- unsigned int total_bytes_received;
- };
- /* end of file perf_ats.h */
|