[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r30458 - gnunet/src/ats
From: |
gnunet |
Subject: |
[GNUnet-SVN] r30458 - gnunet/src/ats |
Date: |
Tue, 29 Oct 2013 16:44:24 +0100 |
Author: wachs
Date: 2013-10-29 16:44:24 +0100 (Tue, 29 Oct 2013)
New Revision: 30458
Modified:
gnunet/src/ats/Makefile.am
gnunet/src/ats/libgnunet_plugin_ats_proportional.c
gnunet/src/ats/perf_ats_solver.c
Log:
next steps to generic perf test
Modified: gnunet/src/ats/Makefile.am
===================================================================
--- gnunet/src/ats/Makefile.am 2013-10-29 15:12:56 UTC (rev 30457)
+++ gnunet/src/ats/Makefile.am 2013-10-29 15:44:24 UTC (rev 30458)
@@ -437,7 +437,7 @@
# $(top_builddir)/src/ats/libgnunetats.la
perf_ats_solver_mlp_SOURCES = \
- perf_ats_solver.c
+ perf_ats_solver.c test_ats_api_common.c gnunet-service-ats_normalization.c
perf_ats_solver_mlp_LDADD = \
$(GN_LIBGLPK) \
$(top_builddir)/src/util/libgnunetutil.la \
@@ -445,7 +445,7 @@
$(top_builddir)/src/ats/libgnunetats.la
perf_ats_solver_proportional_SOURCES = \
- perf_ats_solver.c
+ perf_ats_solver.c test_ats_api_common.c gnunet-service-ats_normalization.c
perf_ats_solver_proportional_LDADD = \
$(GN_LIBGLPK) \
$(top_builddir)/src/util/libgnunetutil.la \
@@ -453,7 +453,7 @@
$(top_builddir)/src/ats/libgnunetats.la
perf_ats_solver_ril_SOURCES = \
- perf_ats_solver.c
+ perf_ats_solver.c test_ats_api_common.c gnunet-service-ats_normalization.c
perf_ats_solver_ril_LDADD = \
$(GN_LIBGLPK) \
$(top_builddir)/src/util/libgnunetutil.la \
Modified: gnunet/src/ats/libgnunet_plugin_ats_proportional.c
===================================================================
--- gnunet/src/ats/libgnunet_plugin_ats_proportional.c 2013-10-29 15:12:56 UTC
(rev 30457)
+++ gnunet/src/ats/libgnunet_plugin_ats_proportional.c 2013-10-29 15:44:24 UTC
(rev 30458)
@@ -830,7 +830,6 @@
{
if (s->network_entries[c].type == type)
return &s->network_entries[c];
-
}
return NULL ;
}
Modified: gnunet/src/ats/perf_ats_solver.c
===================================================================
--- gnunet/src/ats/perf_ats_solver.c 2013-10-29 15:12:56 UTC (rev 30457)
+++ gnunet/src/ats/perf_ats_solver.c 2013-10-29 15:44:24 UTC (rev 30458)
@@ -18,27 +18,91 @@
Boston, MA 02111-1307, USA.
*/
/**
- * @file ats/perf_ats_mlp
- * @brief performance test for the MLP solver
+ * @file ats/perf_ats_solver.c
+ * @brief generic performance test for ATS solvers
* @author Christian Grothoff
* @author Matthias Wachs
-
*/
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_statistics_service.h"
+#include "gnunet-service-ats_addresses.h"
+#include "gnunet-service-ats_normalization.h"
#include "gnunet_ats_service.h"
#include "gnunet_ats_plugin.h"
#include "test_ats_api_common.h"
-#define PEERS_START 100
-#define PEERS_END 100
+#define DEFAULT_PEERS_START 100
+#define DEFAULT_PEERS_END 100
+#define DEFAULT_ADDRESSES 10
+#define DEFAULT_ATS_COUNT 2
-#define ADDRESSES 10
+/**
+ * Handle for ATS address component
+ */
+struct PerfHandle
+{
+ struct PerfPeer *peers;
-int count_p;
-int count_a;
+ /**
+ * #peers to start benchmarking with
+ */
+ int N_peers_start;
+ /**
+ * #peers to end benchmarking with
+ */
+ int N_peers_end;
+
+ /**
+ * #addresses to benchmarking with
+ */
+ int N_address;
+
+ int opt_numeric;
+ int opt_dump;
+ int opt_update_percent;
+ int opt_update_quantity;
+
+ char *ats_string;
+
+ /**
+ *
+ */
+ struct GNUNET_STATISTICS_Handle *stat;
+
+ /**
+ * A multihashmap to store all addresses
+ */
+ struct GNUNET_CONTAINER_MultiPeerMap *addresses;
+
+
+ /**
+ * Configured ATS solver
+ */
+ int ats_mode;
+
+ /**
+ * Solver handle
+ */
+ void *solver;
+
+ /**
+ * Address suggestion requests DLL head
+ */
+ struct GAS_Addresses_Suggestion_Requests *r_head;
+
+ /**
+ * Address suggestion requests DLL tail
+ */
+ struct GAS_Addresses_Suggestion_Requests *r_tail;
+
+ /* Solver functions */
+ struct GNUNET_ATS_PluginEnvironment env;
+
+ char *plugin;
+};
+
struct PerfPeer
{
struct GNUNET_PeerIdentity id;
@@ -47,43 +111,31 @@
struct ATS_Address *tail;
};
-static int ret;
-static int opt_numeric;
-static int opt_dump;
-static int opt_update_percent;
-static int opt_update_quantity;
+static struct PerfHandle ph;
-static int N_peers_start;
-static int N_peers_end;
-static int N_address;
-/**
- * Statistics handle
- */
-struct GNUNET_STATISTICS_Handle * stats;
+int count_p;
+int count_a;
/**
- * MLP solver handle
+ * Return value
*/
-struct GAS_MLP_Handle *mlp;
+static int ret;
+
/**
- * Hashmap containing addresses
+ * ATS information
*/
-struct GNUNET_CONTAINER_MultiHashMap * addresses;
+//static struct GNUNET_ATS_Information ats[2];
-#define ATS_COUNT 2
-struct GNUNET_ATS_Information ats[2];
-struct PerfPeer *peers;
-#if 0
static void
end_now (int res)
{
- if (NULL != stats)
+ if (NULL != ph.stat)
{
- GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
- stats = NULL;
+ GNUNET_STATISTICS_destroy (ph.stat, GNUNET_NO);
+ ph.stat = NULL;
}
/*
if (NULL != addresses)
@@ -92,81 +144,28 @@
GNUNET_CONTAINER_multihashmap_destroy (addresses);
addresses = NULL ;
}*/
- if (NULL != peers)
+ if (NULL != ph.peers)
{
- GNUNET_free(peers);
+ GNUNET_free(ph.peers);
}
- if (NULL != mlp)
- {
- GAS_mlp_done (mlp);
- mlp = NULL;
- }
+
GAS_normalization_stop ();
ret = res;
}
-static void
-bandwidth_changed_cb (void *cls, struct ATS_Address *address)
-{
-}
-
static void
-normalized_property_changed_cb (void *cls, struct ATS_Address *peer,
- uint32_t type, double prop_rel)
-{
- /* TODO */
-}
-
-const double *
-get_property_cb (void *cls, const struct ATS_Address *address)
-{
- return GAS_normalization_get_properties ((struct ATS_Address *) address);
-}
-
-static const double *
-get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id)
-{
- return GAS_normalization_get_preferences (id);
-}
-
-static void
perf_create_peer (int cp)
{
+ /*
GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK,
- &peers[cp].id.hashPubKey);
+ &ph.peers[cp].id.);*/
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Creating peer #%u: %s \n", cp,
- GNUNET_i2s (&peers[cp].id));
+ GNUNET_i2s (&ph.peers[cp].id));
}
-static struct ATS_Address *
-perf_create_address (int cp, int ca)
-{
- struct ATS_Address *a;
- a = create_address (&peers[cp].id, "Test 1", "test 1", strlen ("test 1") + 1,
- 0);
- GNUNET_CONTAINER_DLL_insert(peers[cp].head, peers[cp].tail, a);
- GNUNET_CONTAINER_multihashmap_put (addresses, &peers[cp].id.hashPubKey, a,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
- return a;
-}
-static void
-address_initial_update (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap * addresses,
- struct ATS_Address *address)
-{
- GAS_mlp_address_property_changed (mlp, address, GNUNET_ATS_QUALITY_NET_DELAY,
- 100,
- (double) (100 + GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
100))
- / 100);
- GAS_mlp_address_property_changed (mlp, address,
- GNUNET_ATS_QUALITY_NET_DISTANCE, 10,
- (double) (100 + GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
100))
- / 100);
-}
-
static void
update_single_addresses (struct ATS_Address *cur)
{
@@ -181,7 +180,8 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Updating peer `%s' address %p type %s val %u\n",
GNUNET_i2s (&cur->peer), cur, "GNUNET_ATS_QUALITY_NET_DELAY", r_val);
- GAS_mlp_address_property_changed (mlp, cur, GNUNET_ATS_QUALITY_NET_DELAY,
+ ph.env.sf.s_address_update_property (ph.solver, cur,
+ GNUNET_ATS_QUALITY_NET_DELAY,
r_val, (double) (100 + r_val / 100));
break;
case 1:
@@ -190,17 +190,61 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Updating peer `%s' address %p type %s val %u\n",
GNUNET_i2s (&cur->peer), cur, "GNUNET_ATS_QUALITY_NET_DISTANCE",
r_val);
- GAS_mlp_address_property_changed (mlp, cur,
GNUNET_ATS_QUALITY_NET_DISTANCE,
+ ph.env.sf.s_address_update_property (ph.solver, cur,
+ GNUNET_ATS_QUALITY_NET_DISTANCE,
r_val, (double) (100 + r_val) / 100);
break;
default:
break;
}
- GAS_mlp_address_inuse_changed (mlp, cur, GNUNET_YES);
+ ph.env.sf.s_address_update_inuse (ph.solver, cur, GNUNET_YES);
+}
+
+
+static void
+bandwidth_changed_cb (void *cls, struct ATS_Address *address)
+{
+ return;
}
+const double *
+get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id)
+{
+ return GAS_normalization_get_preferences (id);
+}
+
+
+const double *
+get_property_cb (void *cls, const struct ATS_Address *address)
+{
+ return GAS_normalization_get_properties ((struct ATS_Address *) address);
+}
+
static void
+normalized_property_changed_cb (void *cls, struct ATS_Address *peer,
+ uint32_t type, double prop_rel)
+{
+ /* TODO */
+}
+
+static void
+address_initial_update (void *solver,
+ struct GNUNET_CONTAINER_MultiPeerMap * addresses,
+ struct ATS_Address *address)
+{
+ ph.env.sf.s_address_update_property (solver, address,
GNUNET_ATS_QUALITY_NET_DELAY,
+ 100,
+ (double) (100 + GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
100))
+ / 100);
+
+ ph.env.sf.s_address_update_property (solver, address,
+ GNUNET_ATS_QUALITY_NET_DISTANCE, 10,
+ (double) (100 + GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
100))
+ / 100);
+}
+
+static void
update_addresses (unsigned int cp, unsigned int ca, unsigned int up_q)
{
struct ATS_Address *cur;
@@ -216,11 +260,11 @@
for (c_peer = 0; c_peer < cp; c_peer++)
{
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Updating peer `%s'\n",
- GNUNET_i2s (&peers[c_peer].id));
+ GNUNET_i2s (&ph.peers[c_peer].id));
for (c_select = 0; c_select < ca; c_select++)
m[c_select] = 0;
c_select = 0;
- while (c_select < opt_update_quantity)
+ while (c_select < ph.opt_update_quantity)
{
r = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, ca);
if (0 == m[r])
@@ -231,7 +275,7 @@
}
c_addr = 0;
- for (cur = peers[c_peer].head; NULL != cur; cur = cur->next)
+ for (cur = ph.peers[c_peer].head; NULL != cur; cur = cur->next)
{
if (1 == m[c_addr])
update_single_addresses (cur);
@@ -239,300 +283,98 @@
}
}
}
-#endif
+static struct ATS_Address *
+perf_create_address (int cp, int ca)
+{
+ struct ATS_Address *a;
+ a = create_address (&ph.peers[cp].id, "Test 1", "test 1", strlen ("test 1")
+ 1,
+ 0);
+ GNUNET_CONTAINER_DLL_insert(ph.peers[cp].head, ph.peers[cp].tail, a);
+ GNUNET_CONTAINER_multipeermap_put (ph.addresses, &ph.peers[cp].id, a,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+ return a;
+}
+
static void
-check (void *cls, char * const *args, const char *cfgfile,
- const struct GNUNET_CONFIGURATION_Handle *cfg)
+check ()
{
-#if 0
- int quotas[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType;
- unsigned long long quotas_in[GNUNET_ATS_NetworkTypeCount];
- unsigned long long quotas_out[GNUNET_ATS_NetworkTypeCount];
+ struct ATS_Address *cur;
+ struct ATS_Address *next;
int cp;
int ca;
+ int count_p = ph.N_peers_end;
+ int count_a = ph.N_address;
struct ATS_Address * cur_addr;
+ ph.peers = GNUNET_malloc ((count_p) * sizeof (struct PerfPeer));
- int full_lp_res;
- int full_mip_res;
- int full_lp_presolv;
- int full_mip_presolv;
- struct GNUNET_TIME_Relative full_build_dur;
- struct GNUNET_TIME_Relative full_lp_dur;
- struct GNUNET_TIME_Relative full_mip_dur;
-
- int update_lp_res;
- int update_mip_res;
- int update_lp_presolv;
- int update_mip_presolv;
- struct GNUNET_TIME_Relative update_build_dur;
- struct GNUNET_TIME_Relative update_lp_dur;
- struct GNUNET_TIME_Relative update_mip_dur;
-
- stats = GNUNET_STATISTICS_create ("ats", cfg);
- if (NULL == stats)
- {
- GNUNET_break(0);
- end_now (1);
- return;
- }
- GAS_normalization_start (NULL, NULL, &normalized_property_changed_cb, NULL );
- /* Load quotas */
- if (GNUNET_ATS_NetworkTypeCount
- != load_quotas (cfg, quotas_out, quotas_in, GNUNET_ATS_NetworkTypeCount))
- {
- GNUNET_break(0);
- end_now (1);
- return;
- }
-
- GNUNET_assert(N_peers_end >= N_peers_start);
- GNUNET_assert(N_address >= 0);
-
- fprintf (stderr, "Solving problem for %u..%u peers with %u addresses\n",
- N_peers_start, N_peers_end, N_address);
-
- count_p = N_peers_end;
- count_a = N_address;
- peers = GNUNET_malloc ((count_p) * sizeof (struct PerfPeer));
- /* Setup address hashmap */
- addresses = GNUNET_CONTAINER_multihashmap_create (N_address, GNUNET_NO);
-
- /* Init MLP solver */
- mlp = GAS_mlp_init (cfg, stats, addresses, quotas, quotas_out, quotas_in,
- GNUNET_ATS_NetworkTypeCount, &bandwidth_changed_cb, NULL,
- &get_preferences_cb, NULL, &get_property_cb, NULL );
- if (NULL == mlp)
- {
- GNUNET_break(0);
- end_now (1);
- return;
- }
- mlp->mlp_auto_solve = GNUNET_NO;
- mlp->write_mip_mps = opt_dump;
- mlp->write_mip_sol = opt_dump;
-
for (cp = 0; cp < count_p; cp++)
perf_create_peer (cp);
- if (GNUNET_YES == opt_numeric)
- fprintf (stderr,
- "#peers;#addresses per peer;LP/MIP state;presolv;exec build in ms;exec
LP in ms; exec MIP in ms;#cols;#rows;#nonzero elements\n");
-
for (cp = 0; cp < count_p; cp++)
{
for (ca = 0; ca < count_a; ca++)
{
cur_addr = perf_create_address (cp, ca);
/* add address */
- GAS_mlp_address_add (mlp, cur_addr, GNUNET_ATS_NET_UNSPECIFIED);
- address_initial_update (mlp, addresses, cur_addr);
+ ph.env.sf.s_add (ph.solver, cur_addr, GNUNET_ATS_NET_LAN);
+ address_initial_update (ph.solver, ph.addresses, cur_addr);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "Adding address for peer %u address %u: \n", cp, ca);
+ "Adding address for peer %u address %u\n", cp, ca);
}
- GAS_mlp_get_preferred_address (mlp, &peers[cp].id);
- /* solve */
- if (cp + 1 >= N_peers_start)
+ //ph.env.sf.s_get (ph.solver, &ph.peers[cp].id);
+ if (cp + 1 >= ph.N_peers_start)
{
-
- update_mip_dur = GNUNET_TIME_UNIT_FOREVER_REL;
- update_lp_dur = GNUNET_TIME_UNIT_FOREVER_REL;
- update_build_dur = GNUNET_TIME_UNIT_FOREVER_REL;
- update_mip_presolv = GNUNET_SYSERR;
- update_lp_presolv = GNUNET_SYSERR;
- update_mip_res = GNUNET_SYSERR;
- update_lp_res = GNUNET_SYSERR;
- /* Solve the full problem */
- GAS_mlp_solve_problem (mlp);
- full_lp_res = mlp->ps.lp_res;
- full_mip_res = mlp->ps.mip_res;
- full_lp_presolv = mlp->ps.lp_presolv;
- full_mip_presolv = mlp->ps.mip_presolv;
- full_build_dur = mlp->ps.build_dur;
- full_lp_dur = mlp->ps.lp_dur;
- full_mip_dur = mlp->ps.mip_dur;
-
- /* Update and solve the problem */
- if ((0 < opt_update_quantity) || (0 < opt_update_percent))
+ /* Solve */
+ if ((0 < ph.opt_update_quantity) || (0 < ph.opt_update_percent))
{
+ /* Update */
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Updating problem with %u peers and %u addresses\n", cp + 1, ca);
- update_addresses (cp + 1, ca, opt_update_quantity);
- GAS_mlp_solve_problem (mlp);
- GAS_mlp_solve_problem (mlp);
- update_lp_res = mlp->ps.lp_res;
- update_mip_res = mlp->ps.mip_res;
- update_lp_presolv = mlp->ps.lp_presolv;
- update_mip_presolv = mlp->ps.mip_presolv;
- update_build_dur = mlp->ps.build_dur;
- update_lp_dur = mlp->ps.lp_dur;
- update_mip_dur = mlp->ps.mip_dur;
-
+ //ph.env.sf.s_bulk_start (ph.solver);
+ //update_addresses (cp + 1, ca, ph.opt_update_quantity);
+ //ph.env.sf.s_bulk_stop (ph.solver);
}
- if (GNUNET_NO == opt_numeric)
- {
- fprintf (stderr,
- "Rebuild: %03u peers each %02u addresses; rebuild: LP/MIP state
[%3s/%3s] presolv [%3s/%3s], (build/LP/MIP in us) %04llu / %04llu / %04llu\n",
- cp + 1, ca, (GNUNET_OK == full_lp_res) ? "OK" : "FAIL",
- (GNUNET_OK == full_mip_res) ? "OK" : "FAIL",
- (GLP_YES == full_lp_presolv) ? "YES" : "NO",
- (GNUNET_OK == full_mip_presolv) ? "YES" : "NO",
- (unsigned long long) full_build_dur.rel_value_us,
- (unsigned long long) full_lp_dur.rel_value_us,
- (unsigned long long) full_mip_dur.rel_value_us);
- if ((0 < opt_update_quantity) || (0 < opt_update_percent))
- fprintf (stderr,
- "Update: %03u peers each %02u addresses; rebuild: LP/MIP state
[%3s/%3s] presolv [%3s/%3s], (build/LP/MIP in us) %04llu / %04llu / %04llu\n",
- cp + 1, ca, (GNUNET_OK == update_lp_res) ? "OK" : "FAIL",
- (GNUNET_OK == update_mip_res) ? "OK" : "FAIL",
- (GLP_YES == update_lp_presolv) ? "YES" : "NO",
- (GNUNET_OK == update_mip_presolv) ? "YES" : "NO",
- (unsigned long long) update_build_dur.rel_value_us,
- (unsigned long long) update_lp_dur.rel_value_us,
- (unsigned long long) update_mip_dur.rel_value_us);
- }
- else
- {
- fprintf (stderr, "Rebuild;%u;%u;%s;%s;%s;%s;%04llu;%04llu;%04llu\n",
- cp + 1, ca, (GNUNET_OK == full_lp_res) ? "OK" : "FAIL",
- (GNUNET_OK == full_mip_res) ? "OK" : "FAIL",
- (GLP_YES == full_lp_presolv) ? "YES" : "NO",
- (GNUNET_OK == full_mip_presolv) ? "YES" : "NO",
- (unsigned long long) full_build_dur.rel_value_us,
- (unsigned long long) full_lp_dur.rel_value_us,
- (unsigned long long) full_mip_dur.rel_value_us);
- if ((0 < opt_update_quantity) || (0 < opt_update_percent))
- fprintf (stderr, "Update;%u;%u;%s;%s;%s;%s;%04llu;%04llu;%04llu\n",
- cp + 1, ca, (GNUNET_OK == update_lp_res) ? "OK" : "FAIL",
- (GNUNET_OK == update_mip_res) ? "OK" : "FAIL",
- (GLP_YES == update_lp_presolv) ? "YES" : "NO",
- (GNUNET_OK == update_mip_presolv) ? "YES" : "NO",
- (unsigned long long) update_build_dur.rel_value_us,
- (unsigned long long) update_lp_dur.rel_value_us,
- (unsigned long long) update_mip_dur.rel_value_us);
- }
}
}
-
- struct ATS_Address *cur;
- struct ATS_Address *next;
for (cp = 0; cp < count_p; cp++)
{
- for (cur = peers[cp].head; cur != NULL ; cur = next)
+ for (cur = ph.peers[cp].head; cur != NULL ; cur = next)
{
- GAS_mlp_address_delete (mlp, cur, GNUNET_NO);
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "Deleting addresses for peer %u\n", cp);
+ ph.env.sf.s_del (ph.solver, cur, GNUNET_NO);
next = cur->next;
- GNUNET_CONTAINER_DLL_remove(peers[cp].head, peers[cp].tail, cur);
+ GNUNET_CONTAINER_DLL_remove(ph.peers[cp].head, ph.peers[cp].tail, cur);
GNUNET_free(cur);
}
}
- GNUNET_free(peers);
-#endif
+ GNUNET_free(ph.peers);
}
-int
-main (int argc, char *argv[])
+
+static void
+run (void *cls, char * const *args, const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *cfg)
{
+ GNUNET_log_setup ("perf-ats", "WARNING", NULL);
char *sep;
char *src_filename = GNUNET_strdup (__FILE__);
- char *test_filename = GNUNET_strdup (argv[0]);
- char *config_file;
+ char *test_filename = cls;
char *solver;
-
- static char * const argv2[] = { "perf_ats_mlp", "-c", "perf_ats_mlp.conf",
- "-L", "WARNING", NULL };
-
- opt_dump = GNUNET_NO;
- opt_update_quantity = 0;
- opt_update_percent = 0;
-
- N_peers_start = 0;
- N_peers_end = 0;
- N_address = 0;
+ char *plugin;
+ unsigned long long quotas_in[GNUNET_ATS_NetworkTypeCount];
+ unsigned long long quotas_out[GNUNET_ATS_NetworkTypeCount];
int c;
- /* extract command line arguments */
- for (c = 0; c < argc; c++)
- {
- if ((0 == strcmp (argv[c], "-z")) && (c < (argc - 1)))
- {
- if (0 != atoi (argv[c + 1]))
- {
- N_peers_start = atoi (argv[c + 1]);
- }
- }
- if ((0 == strcmp (argv[c], "-x")) && (c < (argc - 1)))
- {
- if (0 != atoi (argv[c + 1]))
- {
- N_peers_end = atoi (argv[c + 1]);
- }
- }
- if ((0 == strcmp (argv[c], "-c")) && (c < (argc - 1)))
- {
- if (0 != atoi (argv[c + 1]))
- {
- N_address = atoi (argv[c + 1]);
- }
- }
- if ((0 == strcmp (argv[c], "-n")))
- {
- opt_numeric = GNUNET_YES;
- }
- if ((0 == strcmp (argv[c], "-d")))
- {
- opt_dump = GNUNET_YES;
- }
- if ((0 == strcmp (argv[c], "-p")) && (c < (argc - 1)))
- {
- if (0 != atoi (argv[c + 1]))
- {
- /* Update a fix "p"ercentage of addresses */
- opt_update_percent = atoi (argv[c + 1]);
- if ((0 <= opt_update_percent) && (100 <= opt_update_percent))
- {
- fprintf (stderr, _("Percentage has to be: 0 <= p <= 100 ") );
- exit (1);
- }
- }
- }
- if ((0 == strcmp (argv[c], "-q")) && (c < (argc - 1)))
- {
- if (0 != atoi (argv[c + 1]))
- {
- /* Update a fix "q"uantity of addresses */
- opt_update_quantity = atoi (argv[c + 1]);
- if (0 >= opt_update_quantity)
- {
- fprintf (stderr, _("Quantity has to be: p => 0 ") );
- exit (1);
- }
- }
- }
- }
- if ((0 == N_peers_start) && (0 == N_peers_end))
- {
- N_peers_start = PEERS_START;
- N_peers_end = PEERS_END;
- }
- if (0 == N_address)
- N_address = ADDRESSES;
-
- if (opt_update_quantity > N_address)
- {
- fprintf (stderr,
- _("Trying to update more addresses than we have per peer! (%u vs %u)"),
- opt_update_quantity, N_address);
- exit (1);
- }
-
/* Extract test name */
if (NULL == (sep = (strstr (src_filename,".c"))))
{
GNUNET_break (0);
- return -1;
+ ret = 1;
+ return;
}
sep[0] = '\0';
@@ -542,43 +384,140 @@
if (NULL == (solver = strstr (test_filename, src_filename)))
{
GNUNET_break (0);
- return -1;
+ ret = 1;
+ return ;
}
solver += strlen (src_filename) +1;
if (0 == strcmp(solver, "proportional"))
{
- config_file = "perf_ats_solver_proportional.conf";
+ ph.ats_mode = MODE_PROPORTIONAL;
+ ph.ats_string = "proportional";
}
else if (0 == strcmp(solver, "mlp"))
{
- config_file = "perf_ats_solver_mlp.conf";
+ ph.ats_mode = MODE_MLP;
+ ph.ats_string = "mlp";
}
else if ((0 == strcmp(solver, "ril")))
{
- config_file = "perf_ats_solver_ril.conf";
+ ph.ats_mode = MODE_RIL;
+ ph.ats_string = "ril";
}
else
{
+ GNUNET_free (src_filename);
GNUNET_break (0);
- GNUNET_free (src_filename);
- GNUNET_free (test_filename);
- return 1;
+ ret = 1;
+ return ;
}
-
GNUNET_free (src_filename);
- GNUNET_free (test_filename);
- fprintf (stderr, "Using cfg file `%s'\n",config_file);
- return 0;
+ /* Calculcate peers */
+ if ((0 == ph.N_peers_start) && (0 == ph.N_peers_end))
+ {
+ ph.N_peers_start = DEFAULT_PEERS_START;
+ ph.N_peers_end = DEFAULT_PEERS_END;
+ }
+ if (0 == ph.N_address)
+ ph.N_address = DEFAULT_ADDRESSES;
- static const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_OPTION_END };
+ if (ph.opt_update_quantity > ph.N_address)
+ {
+ fprintf (stderr,
+ _("Trying to update more addresses than we have per peer! (%u vs %u)"),
+ ph.opt_update_quantity, ph.N_address);
+ exit (1);
+ }
- GNUNET_PROGRAM_run ((sizeof(argv2) / sizeof(char *)) - 1, argv2,
- "perf_ats", "nohelp", options, &check, NULL );
+ if (ph.N_peers_start != ph.N_peers_end)
+ fprintf (stderr, "Benchmarking solver `%s' with %u to %u peers and %u
addresses\n",
+ ph.ats_string, ph.N_peers_start, ph.N_peers_end, ph.N_address);
+ else
+ fprintf (stderr, "Benchmarking solver `%s' with %u peers and %u
addresses\n",
+ ph.ats_string, ph.N_peers_end, ph.N_address);
+ /* Load quotas */
+ if (GNUNET_ATS_NetworkTypeCount != load_quotas (cfg,
+ quotas_in, quotas_in, GNUNET_ATS_NetworkTypeCount))
+ {
+ GNUNET_break(0);
+ end_now (1);
+ return;
+ }
+
+ /* Load solver */
+ ph.env.cfg = cfg;
+ ph.stat = GNUNET_STATISTICS_create ("ats", cfg);
+ ph.env.stats = ph.stat;
+ ph.addresses = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_NO);
+ ph.env.addresses = ph.addresses;
+ ph.env.bandwidth_changed_cb = bandwidth_changed_cb;
+ ph.env.get_preferences = &get_preferences_cb;
+ ph.env.get_property = &get_property_cb;
+ ph.env.network_count = GNUNET_ATS_NetworkTypeCount;
+ int networks[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType;
+ for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++)
+ {
+ ph.env.networks[c] = networks[c];
+ ph.env.out_quota[c] = quotas_out[c];
+ ph.env.in_quota[c] = quotas_in[c];
+ }
+ GAS_normalization_start (NULL, NULL, &normalized_property_changed_cb, NULL );
+
+
+ GNUNET_asprintf (&plugin, "libgnunet_plugin_ats_%s", ph.ats_string);
+ GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initializing solver `%s '`%s'\n"),
ph.ats_string, plugin);
+ if (NULL == (ph.solver = GNUNET_PLUGIN_load (plugin, &ph.env)))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Failed to initialize solver
`%s'!\n"), plugin);
+ ret = 1;
+ return;
+ }
+
+ /* Do work */
+ check ();
+
+ /* Unload solver*/
+ GNUNET_PLUGIN_unload (plugin, ph.solver);
+ GNUNET_free (plugin);
+ ph.solver = NULL;
+}
+
+int
+main (int argc, char *argv[])
+{
+ /* extract command line arguments */
+ ph.opt_dump = GNUNET_NO;
+ ph.opt_update_quantity = 0;
+ ph.opt_update_percent = 0;
+ ph.N_peers_start = 0;
+ ph.N_peers_end = 0;
+ ph.N_address = 0;
+ ph.ats_string = NULL;
+
+ static struct GNUNET_GETOPT_CommandLineOption options[] = {
+ { 'a', "addresses", NULL,
+ gettext_noop ("addresses to use"),
+ 1, &GNUNET_GETOPT_set_uint, &ph.N_address },
+ { 's', "start", NULL,
+ gettext_noop ("start with peer"),
+ 1, &GNUNET_GETOPT_set_uint, &ph.N_peers_start },
+ { 'e', "end", NULL,
+ gettext_noop ("end with peer"),
+ 1, &GNUNET_GETOPT_set_uint, &ph.N_peers_end },
+ { 'p', "percentage", NULL,
+ gettext_noop ("update a fix percentage of addresses"),
+ 1, &GNUNET_GETOPT_set_uint, &ph.opt_update_percent },
+ { 'q', "quantity", NULL,
+ gettext_noop ("update a fix quantity of addresses"),
+ 1, &GNUNET_GETOPT_set_uint, &ph.opt_update_quantity },
+ GNUNET_GETOPT_OPTION_END
+ };
+
+ GNUNET_PROGRAM_run (argc, argv, argv[0], NULL, options, &run, argv[0]);
+
return ret;
}
-/* end of file perf_ats_mlp.c */
+/* end of file perf_ats_solver.c */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r30458 - gnunet/src/ats,
gnunet <=