GNUnet  0.11.x
Data Structures | Macros | Functions
ats-testing-log.c File Reference

ats benchmark: logging for performance tests More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "ats-testing.h"
Include dependency graph for ats-testing-log.c:

Go to the source code of this file.

Data Structures

struct  PartnerLoggingTimestep
 A single logging time step for a partner. More...
 
struct  PeerLoggingTimestep
 A single logging time step for a peer. More...
 
struct  LoggingPeer
 Entry for a benchmark peer. More...
 
struct  LoggingHandle
 

Macros

#define THROUGHPUT_TEMPLATE
 
#define RTT_TEMPLATE
 
#define BW_TEMPLATE
 
#define LOG_ITEMS_TIME   2
 
#define LOG_ITEMS_PER_PEER   17
 
#define LOG_ITEM_BYTES_SENT   1
 
#define LOG_ITEM_MSGS_SENT   2
 
#define LOG_ITEM_THROUGHPUT_SENT   3
 
#define LOG_ITEM_BYTES_RECV   4
 
#define LOG_ITEM_MSGS_RECV   5
 
#define LOG_ITEM_THROUGHPUT_RECV   6
 
#define LOG_ITEM_APP_RTT   7
 
#define LOG_ITEM_ATS_BW_IN   8
 
#define LOG_ITEM_ATS_BW_OUT   9
 
#define LOG_ITEM_ATS_COSTS_LAN   10
 
#define LOG_ITEM_ATS_WAN   11
 
#define LOG_ITEM_ATS_WLAN   12
 
#define LOG_ITEM_ATS_DELAY   13
 
#define LOG_ITEM_ATS_DISTANCE   14
 
#define LOG_ITEM_ATS_NETWORKTYPE   15
 
#define LOG_ITEM_ATS_UTIL_UP   16
 
#define LOG_ITEM_ATS_UTIL_DOWN   17
 

Functions

static void write_throughput_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs, int slaves)
 
static void write_rtt_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs, int slaves)
 
static void write_bw_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs, int slaves)
 
void GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, const char *experiment_name, int plots)
 Write logging data to file. More...
 
void GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l)
 Log all data now. More...
 
static void collect_log_task (void *cls)
 
void GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l)
 Stop logging. More...
 
void GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l)
 Clean up logging data. More...
 
struct LoggingHandleGNUNET_ATS_TEST_logging_start (struct GNUNET_TIME_Relative log_frequency, const char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves, int verbose)
 Start logging. More...
 

Detailed Description

ats benchmark: logging for performance tests

Author
Christian Grothoff
Matthias Wachs

Definition in file ats-testing-log.c.

Macro Definition Documentation

◆ THROUGHPUT_TEMPLATE

#define THROUGHPUT_TEMPLATE
Value:
"#!/usr/bin/gnuplot \n" \
"set datafile separator ';' \n" \
"set title \"Throughput between Master and Slaves\" \n" \
"set xlabel \"Time in ms\" \n" \
"set ylabel \"Bytes/s\" \n" \
"set grid \n"

Definition at line 30 of file ats-testing-log.c.

Referenced by write_throughput_gnuplot_script().

◆ RTT_TEMPLATE

#define RTT_TEMPLATE
Value:
"#!/usr/bin/gnuplot \n" \
"set datafile separator ';' \n" \
"set title \"Application level roundtrip time between Master and Slaves\" \n" \
"set xlabel \"Time in ms\" \n" \
"set ylabel \"ms\" \n" \
"set grid \n"

Definition at line 37 of file ats-testing-log.c.

Referenced by write_rtt_gnuplot_script().

◆ BW_TEMPLATE

#define BW_TEMPLATE
Value:
"#!/usr/bin/gnuplot \n" \
"set datafile separator ';' \n" \
"set title \"Bandwidth inbound and outbound between Master and Slaves\" \n" \
"set xlabel \"Time in ms\" \n" \
"set ylabel \"Bytes / s \" \n" \
"set grid \n"

Definition at line 44 of file ats-testing-log.c.

Referenced by write_bw_gnuplot_script().

◆ LOG_ITEMS_TIME

#define LOG_ITEMS_TIME   2

◆ LOG_ITEMS_PER_PEER

#define LOG_ITEMS_PER_PEER   17

Definition at line 52 of file ats-testing-log.c.

◆ LOG_ITEM_BYTES_SENT

#define LOG_ITEM_BYTES_SENT   1

Definition at line 54 of file ats-testing-log.c.

◆ LOG_ITEM_MSGS_SENT

#define LOG_ITEM_MSGS_SENT   2

Definition at line 55 of file ats-testing-log.c.

◆ LOG_ITEM_THROUGHPUT_SENT

#define LOG_ITEM_THROUGHPUT_SENT   3

Definition at line 56 of file ats-testing-log.c.

Referenced by write_throughput_gnuplot_script().

◆ LOG_ITEM_BYTES_RECV

#define LOG_ITEM_BYTES_RECV   4

Definition at line 57 of file ats-testing-log.c.

◆ LOG_ITEM_MSGS_RECV

#define LOG_ITEM_MSGS_RECV   5

Definition at line 58 of file ats-testing-log.c.

◆ LOG_ITEM_THROUGHPUT_RECV

#define LOG_ITEM_THROUGHPUT_RECV   6

Definition at line 59 of file ats-testing-log.c.

Referenced by write_throughput_gnuplot_script().

◆ LOG_ITEM_APP_RTT

#define LOG_ITEM_APP_RTT   7

Definition at line 60 of file ats-testing-log.c.

Referenced by write_rtt_gnuplot_script().

◆ LOG_ITEM_ATS_BW_IN

#define LOG_ITEM_ATS_BW_IN   8

Definition at line 61 of file ats-testing-log.c.

Referenced by write_bw_gnuplot_script().

◆ LOG_ITEM_ATS_BW_OUT

#define LOG_ITEM_ATS_BW_OUT   9

Definition at line 62 of file ats-testing-log.c.

Referenced by write_bw_gnuplot_script().

◆ LOG_ITEM_ATS_COSTS_LAN

#define LOG_ITEM_ATS_COSTS_LAN   10

Definition at line 63 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_WAN

#define LOG_ITEM_ATS_WAN   11

Definition at line 64 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_WLAN

#define LOG_ITEM_ATS_WLAN   12

Definition at line 65 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_DELAY

#define LOG_ITEM_ATS_DELAY   13

Definition at line 66 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_DISTANCE

#define LOG_ITEM_ATS_DISTANCE   14

Definition at line 67 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_NETWORKTYPE

#define LOG_ITEM_ATS_NETWORKTYPE   15

Definition at line 68 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_UTIL_UP

#define LOG_ITEM_ATS_UTIL_UP   16

Definition at line 69 of file ats-testing-log.c.

◆ LOG_ITEM_ATS_UTIL_DOWN

#define LOG_ITEM_ATS_UTIL_DOWN   17

Definition at line 70 of file ats-testing-log.c.

Function Documentation

◆ write_throughput_gnuplot_script()

static void write_throughput_gnuplot_script ( char *  fn,
struct LoggingPeer lp,
char **  fs,
int  slaves 
)
static

Definition at line 250 of file ats-testing-log.c.

References data, BenchmarkPartner::dest, removetrailingwhitespace::f, GNUNET_asprintf(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_write(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_EXEC, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_log, GNUNET_SYSERR, LOG_ITEM_THROUGHPUT_RECV, LOG_ITEM_THROUGHPUT_SENT, LOG_ITEMS_TIME, BenchmarkPeer::no, BenchmarkPeer::partners, peer, LoggingPeer::peer, and THROUGHPUT_TEMPLATE.

Referenced by GNUNET_ATS_TEST_logging_write_to_file().

252 {
253  struct GNUNET_DISK_FileHandle *f;
254  char *gfn;
255  char *data;
256  int c_s;
257 
258  GNUNET_asprintf (&gfn, "gnuplot_throughput_%s", fn);
259  fprintf (stderr,
260  "Writing throughput plot for master %u and %u slaves to `%s'\n",
261  lp->peer->no, slaves, gfn);
262 
263  f = GNUNET_DISK_file_open (gfn,
268  if (NULL == f)
269  {
270  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
271  gfn);
272  GNUNET_free (gfn);
273  return;
274  }
275 
276  /* Write header */
278  strlen (THROUGHPUT_TEMPLATE)))
280  "Cannot write data to plot file `%s'\n", gfn);
281 
282  /* Write master data */
283  GNUNET_asprintf (&data,
284  "plot '%s' using 2:%u with lines title 'Master %u send total', \\\n" \
285  "'%s' using 2:%u with lines title 'Master %u receive total', \\\n",
288  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
290  "Cannot write data to plot file `%s'\n", gfn);
291  GNUNET_free (data);
292 
293  for (c_s = 0; c_s < slaves; c_s++)
294  {
295  GNUNET_asprintf (&data,
296  "'%s' using 2:%u with lines title 'Master %u - Slave %u send', \\\n" \
297  "'%s' using 2:%u with lines title 'Master %u - Slave %u receive'%s\n",
298  fs[c_s],
300  lp->peer->no,
301  lp->peer->partners[c_s].dest->no,
302  fs[c_s],
304  lp->peer->no,
305  lp->peer->partners[c_s].dest->no,
306  (c_s < lp->peer->num_partners - 1) ? ", \\" :
307  "\n pause -1");
308  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
310  "Cannot write data to plot file `%s'\n", gfn);
311  GNUNET_free (data);
312  }
313 
316  "Cannot close gnuplot file `%s'\n", gfn);
317  else
319  "Data successfully written to plot file `%s'\n", gfn);
320  GNUNET_free (gfn);
321 }
Create file if it doesn&#39;t exist.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1280
struct BenchmarkPartner * partners
Array of partners with num_slaves entries (if master) or num_master entries (if slave) ...
Definition: ats-testing.h:191
struct BenchmarkPeer * peer
Peer.
int no
Unique identifier.
Definition: ats-testing.h:121
static char * fn
Filename of the unique file.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:820
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
Open the file for writing.
static struct GNUNET_FS_Handle * fs
Handle to FS service.
Definition: gnunet-fs.c:36
#define LOG_ITEMS_TIME
#define GNUNET_log(kind,...)
#define LOG_ITEM_THROUGHPUT_SENT
#define LOG_ITEM_THROUGHPUT_RECV
uint32_t data
The data value.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1203
Handle used to access files (and pipes).
struct BenchmarkPeer * dest
The partner peer.
Definition: ats-testing.h:285
#define GNUNET_free(ptr)
Wrapper around free.
#define THROUGHPUT_TEMPLATE
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_rtt_gnuplot_script()

static void write_rtt_gnuplot_script ( char *  fn,
struct LoggingPeer lp,
char **  fs,
int  slaves 
)
static

Definition at line 325 of file ats-testing-log.c.

References data, BenchmarkPartner::dest, removetrailingwhitespace::f, GNUNET_asprintf(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_write(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_EXEC, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_log, GNUNET_SYSERR, LOG_ITEM_APP_RTT, LOG_ITEMS_TIME, BenchmarkPeer::no, BenchmarkPeer::partners, peer, LoggingPeer::peer, and RTT_TEMPLATE.

Referenced by GNUNET_ATS_TEST_logging_write_to_file().

327 {
328  struct GNUNET_DISK_FileHandle *f;
329  char *gfn;
330  char *data;
331  int c_s;
332 
333  GNUNET_asprintf (&gfn, "gnuplot_rtt_%s", fn);
334  fprintf (stderr, "Writing rtt plot for master %u to `%s'\n",
335  lp->peer->no, gfn);
336 
337  f = GNUNET_DISK_file_open (gfn,
342  if (NULL == f)
343  {
344  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
345  gfn);
346  GNUNET_free (gfn);
347  return;
348  }
349 
350  /* Write header */
352  RTT_TEMPLATE)))
354  "Cannot write data to plot file `%s'\n", gfn);
355 
356  for (c_s = 0; c_s < slaves; c_s++)
357  {
358  GNUNET_asprintf (&data,
359  "%s'%s' using 2:%u with lines title 'Master %u - Slave %u '%s\n",
360  (0 == c_s) ? "plot " : "",
361  fs[c_s],
363  lp->peer->no,
364  lp->peer->partners[c_s].dest->no,
365  (c_s < lp->peer->num_partners - 1) ? ", \\" :
366  "\n pause -1");
367  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
369  "Cannot write data to plot file `%s'\n", gfn);
370  GNUNET_free (data);
371  }
372 
374  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
375  gfn);
376  else
378  "Data successfully written to plot file `%s'\n", gfn);
379  GNUNET_free (gfn);
380 }
#define LOG_ITEM_APP_RTT
#define RTT_TEMPLATE
Create file if it doesn&#39;t exist.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1280
struct BenchmarkPartner * partners
Array of partners with num_slaves entries (if master) or num_master entries (if slave) ...
Definition: ats-testing.h:191
struct BenchmarkPeer * peer
Peer.
int no
Unique identifier.
Definition: ats-testing.h:121
static char * fn
Filename of the unique file.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:820
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
Open the file for writing.
static struct GNUNET_FS_Handle * fs
Handle to FS service.
Definition: gnunet-fs.c:36
#define LOG_ITEMS_TIME
#define GNUNET_log(kind,...)
uint32_t data
The data value.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1203
Handle used to access files (and pipes).
struct BenchmarkPeer * dest
The partner peer.
Definition: ats-testing.h:285
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_bw_gnuplot_script()

static void write_bw_gnuplot_script ( char *  fn,
struct LoggingPeer lp,
char **  fs,
int  slaves 
)
static

Definition at line 384 of file ats-testing-log.c.

References BW_TEMPLATE, data, removetrailingwhitespace::f, GNUNET_asprintf(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_write(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_EXEC, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_log, GNUNET_SYSERR, LOG_ITEM_ATS_BW_IN, LOG_ITEM_ATS_BW_OUT, LOG_ITEMS_TIME, BenchmarkPeer::no, peer, and LoggingPeer::peer.

Referenced by GNUNET_ATS_TEST_logging_write_to_file().

386 {
387  struct GNUNET_DISK_FileHandle *f;
388  char *gfn;
389  char *data;
390  int c_s;
391 
392  GNUNET_asprintf (&gfn, "gnuplot_bw_%s", fn);
393  fprintf (stderr, "Writing bandwidth plot for master %u to `%s'\n",
394  lp->peer->no, gfn);
395 
396  f = GNUNET_DISK_file_open (gfn,
401  if (NULL == f)
402  {
403  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
404  gfn);
405  GNUNET_free (gfn);
406  return;
407  }
408 
409  /* Write header */
411  BW_TEMPLATE)))
413  "Cannot write data to plot file `%s'\n", gfn);
414 
415  for (c_s = 0; c_s < slaves; c_s++)
416  {
417  GNUNET_asprintf (&data, "%s" \
418  "'%s' using 2:%u with lines title 'BW out master %u - Slave %u ', \\\n" \
419  "'%s' using 2:%u with lines title 'BW in master %u - Slave %u '" \
420  "%s\n",
421  (0 == c_s) ? "plot " : "",
422  fs[c_s],
424  lp->peer->no, c_s,
425  fs[c_s],
427  lp->peer->no, c_s,
428  (c_s < lp->peer->num_partners - 1) ? ", \\" :
429  "\n pause -1");
430  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
432  "Cannot write data to plot file `%s'\n", gfn);
433  GNUNET_free (data);
434  }
435 
437  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
438  gfn);
439  else
441  "Data successfully written to plot file `%s'\n", gfn);
442  GNUNET_free (gfn);
443 }
Create file if it doesn&#39;t exist.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1280
#define LOG_ITEM_ATS_BW_IN
struct BenchmarkPeer * peer
Peer.
#define BW_TEMPLATE
int no
Unique identifier.
Definition: ats-testing.h:121
static char * fn
Filename of the unique file.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:820
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
Open the file for writing.
static struct GNUNET_FS_Handle * fs
Handle to FS service.
Definition: gnunet-fs.c:36
#define LOG_ITEMS_TIME
#define GNUNET_log(kind,...)
#define LOG_ITEM_ATS_BW_OUT
uint32_t data
The data value.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1203
Handle used to access files (and pipes).
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_ATS_TEST_logging_write_to_file()

void GNUNET_ATS_TEST_logging_write_to_file ( struct LoggingHandle l,
const char *  test_name,
int  plots 
)

Write logging data to file.

Parameters
llogging handle to use
test_namename of the current test
plotscreate gnuplots: GNUNET_YES or GNUNET_NO

Definition at line 447 of file ats-testing-log.c.

References GNUNET_TIME_Absolute::abs_value_us, PartnerLoggingTimestep::app_rtt, PartnerLoggingTimestep::ats_delay, PartnerLoggingTimestep::ats_distance, PartnerLoggingTimestep::ats_network_type, PartnerLoggingTimestep::ats_utilization_in, PartnerLoggingTimestep::ats_utilization_out, PartnerLoggingTimestep::bandwidth_in, PartnerLoggingTimestep::bandwidth_out, data, removetrailingwhitespace::f, GNUNET_asprintf(), GNUNET_break, GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_write(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_log, GNUNET_log_strerror_file, GNUNET_OK, GNUNET_SYSERR, GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_difference(), GNUNET_YES, LoggingPeer::head, LoggingHandle::lp, LoggingHandle::name, PeerLoggingTimestep::next, BenchmarkPeer::no, LoggingHandle::num_masters, BenchmarkPeer::num_partners, LoggingHandle::num_slaves, LoggingPeer::peer, PartnerLoggingTimestep::pref_bandwidth, PartnerLoggingTimestep::pref_delay, GNUNET_TIME_Relative::rel_value_us, PartnerLoggingTimestep::slave, PeerLoggingTimestep::slaves_log, LoggingPeer::start, PartnerLoggingTimestep::throughput_recv, PartnerLoggingTimestep::throughput_sent, PeerLoggingTimestep::timestamp, PartnerLoggingTimestep::total_bytes_received, PeerLoggingTimestep::total_bytes_received, PartnerLoggingTimestep::total_bytes_sent, PeerLoggingTimestep::total_bytes_sent, PartnerLoggingTimestep::total_messages_received, PeerLoggingTimestep::total_messages_received, PartnerLoggingTimestep::total_messages_sent, PeerLoggingTimestep::total_messages_sent, PeerLoggingTimestep::total_throughput_recv, PeerLoggingTimestep::total_throughput_send, LoggingHandle::verbose, write_bw_gnuplot_script(), write_rtt_gnuplot_script(), and write_throughput_gnuplot_script().

Referenced by experiment_done_cb().

450 {
451  struct GNUNET_DISK_FileHandle *f[l->num_slaves];
452  struct GNUNET_DISK_FileHandle *f_m;
453  const char *tmp_exp_name;
454  char *filename_master;
455  char *filename_slaves[l->num_slaves];
456  char *data;
457  struct PeerLoggingTimestep *cur_lt;
458  struct PartnerLoggingTimestep *plt;
459  struct GNUNET_TIME_Absolute timestamp;
460  int c_m;
461  int c_s;
462 
463 
464  timestamp = GNUNET_TIME_absolute_get ();
465 
466  tmp_exp_name = experiment_name;
467  for (c_m = 0; c_m < l->num_masters; c_m++)
468  {
469  GNUNET_asprintf (&filename_master, "%s_%llu_master%u_%s",
470  experiment_name,
471  (unsigned long long) timestamp.abs_value_us, c_m, l->name);
472  fprintf (stderr, "Writing data for master %u to file `%s'\n",
473  c_m, filename_master);
474 
475  f_m = GNUNET_DISK_file_open (filename_master,
480  if (NULL == f_m)
481  {
482  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open log file `%s'\n",
483  filename_master);
484  GNUNET_free (filename_master);
485  return;
486  }
487 
488  GNUNET_asprintf (&data, "# master %u; experiment : %s\n"
489  "timestamp; timestamp delta; #messages sent; #bytes sent; #throughput sent; #messages received; #bytes received; #throughput received; \n",
490  c_m, experiment_name);
491  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f_m, data, strlen (data)))
493  "Cannot write data to log file `%s'\n", filename_master);
494  GNUNET_free (data);
495 
496  for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
497  {
498  GNUNET_asprintf (&filename_slaves[c_s], "%s_%llu_master%u_slave_%u_%s",
499  tmp_exp_name,
500  (unsigned long long) timestamp.abs_value_us,
501  c_m, c_s, l->name);
502 
503  fprintf (stderr, "Writing data for master %u slave %u to file `%s'\n",
504  c_m, c_s, filename_slaves[c_s]);
505 
506  f[c_s] = GNUNET_DISK_file_open (filename_slaves[c_s],
511  if (NULL == f[c_s])
512  {
513  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open log file `%s'\n",
514  filename_slaves[c_s]);
515  GNUNET_free (filename_slaves[c_s]);
517  GNUNET_free (filename_master);
518  return;
519  }
520 
521  /* Header */
522  GNUNET_asprintf (&data, "# master %u; slave %u ; experiment : %s\n"
523  "timestamp; timestamp delta; #messages sent; #bytes sent; #throughput sent; #messages received; #bytes received; #throughput received; " \
524  "rtt; bw in; bw out; ats_cost_lan; ats_cost_wlan; ats_delay; ats_distance; ats_network_type; ats_utilization_up ;ats_utilization_down;" \
525  "pref bandwidth; pref delay\n",
526  c_m, c_s, experiment_name);
527  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f[c_s], data, strlen (data)))
529  "Cannot write data to log file `%s'\n",
530  filename_slaves[c_s]);
531  GNUNET_free (data);
532  }
533 
534  for (cur_lt = l->lp[c_m].head; NULL != cur_lt; cur_lt = cur_lt->next)
535  {
536  if (l->verbose)
537  fprintf (stderr,
538  "Master [%u]: timestamp %llu %llu ; %u %u %u ; %u %u %u\n",
539  l->lp[c_m].peer->no,
540  (long long unsigned int) cur_lt->timestamp.abs_value_us,
541  (long long unsigned int) GNUNET_TIME_absolute_get_difference (
542  l->lp[c_m].start,
543  cur_lt
544  ->timestamp).rel_value_us / 1000,
545  cur_lt->total_messages_sent,
546  cur_lt->total_bytes_sent,
547  cur_lt->total_throughput_send,
548  cur_lt->total_messages_received,
549  cur_lt->total_bytes_received,
550  cur_lt->total_throughput_recv);
551 
552  /* Assembling master string */
553  GNUNET_asprintf (&data, "%llu;%llu;%u;%u;%u;%u;%u;%u;\n",
554  (long long unsigned int) cur_lt->timestamp.abs_value_us,
555  (long long unsigned
557  l->lp[c_m].start,
558  cur_lt
559  ->timestamp).
560  rel_value_us / 1000,
561  cur_lt->total_messages_sent,
562  cur_lt->total_bytes_sent,
563  cur_lt->total_throughput_send,
564  cur_lt->total_messages_received,
565  cur_lt->total_bytes_received,
566  cur_lt->total_throughput_recv);
567 
568  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f_m, data, strlen (data)))
570  "Cannot write data to master file %u\n", c_m);
571  GNUNET_free (data);
572 
573 
574  for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
575  {
576  plt = &cur_lt->slaves_log[c_s];
577  /* Log partners */
578 
579  /* Assembling slave string */
580  GNUNET_asprintf (&data,
581  "%llu;%llu;%u;%u;%u;%u;%u;%u;%.3f;%u;%u;%llu;%u;%u;%u;%u;%.3f;%.3f\n",
582  (long long unsigned
583  int) cur_lt->timestamp.abs_value_us,
584  (long long unsigned
586  l->lp[c_m].start,
587  cur_lt
588  ->timestamp)
589  .rel_value_us / 1000,
590  plt->total_messages_sent,
591  plt->total_bytes_sent,
592  plt->throughput_sent,
595  plt->throughput_recv,
596  (double) plt->app_rtt / 1000,
597  plt->bandwidth_in,
598  plt->bandwidth_out,
599  (unsigned long long) plt->ats_delay.rel_value_us,
600  plt->ats_distance,
601  plt->ats_network_type,
602  plt->ats_utilization_out,
603  plt->ats_utilization_in,
604  plt->pref_bandwidth,
605  plt->pref_delay);
606 
607  if (l->verbose)
608  fprintf (stderr,
609  "\t Slave [%u]: %u %u %u ; %u %u %u rtt %u delay %llu bw_in %u bw_out %u \n",
610  plt->slave->no,
611  plt->total_messages_sent,
612  plt->total_bytes_sent,
613  plt->throughput_sent,
616  plt->throughput_recv,
617  plt->app_rtt,
618  (long long unsigned int) plt->ats_delay.rel_value_us,
619  plt->bandwidth_in,
620  plt->bandwidth_out);
621 
622  if (GNUNET_SYSERR == GNUNET_DISK_file_write (f[c_s], data, strlen (
623  data)))
625  "Cannot write data to log file `%s'\n",
626  filename_slaves[c_s]);
627  GNUNET_free (data);
628  }
629  }
630 
631  for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
632  {
633  if (GNUNET_SYSERR == GNUNET_DISK_file_close (f[c_s]))
634  {
636  "Cannot close log file for master[%u] slave[%u]\n", c_m,
637  c_s);
638  continue;
639  }
641  "Data file successfully written to log file for `%s'\n",
642  filename_slaves[c_s]);
643  }
644 
646  {
648  "close",
649  filename_master);
650  GNUNET_free (filename_master);
651  return;
652  }
654  "Data file successfully written to log file for master `%s'\n",
655  filename_master);
656 
657  if (GNUNET_YES == plots)
658  {
659  write_throughput_gnuplot_script (filename_master, &l->lp[c_m],
660  filename_slaves, l->num_slaves);
661  write_rtt_gnuplot_script (filename_master, &l->lp[c_m], filename_slaves,
662  l->num_slaves);
663  write_bw_gnuplot_script (filename_master, &l->lp[c_m], filename_slaves,
664  l->num_slaves);
665  }
666  }
667  GNUNET_free (filename_master);
668 }
unsigned int total_bytes_sent
Total number of bytes this peer has sent.
static void write_rtt_gnuplot_script(char *fn, struct LoggingPeer *lp, char **fs, int slaves)
Create file if it doesn&#39;t exist.
A single logging time step for a partner.
const char * name
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1280
uint64_t rel_value_us
The actual value.
struct PeerLoggingTimestep * head
DLL for logging entries: head.
unsigned int throughput_recv
Total inbound throughput for master in Bytes / s.
unsigned int total_messages_received
Total number of messages this peer has received.
static void write_bw_gnuplot_script(char *fn, struct LoggingPeer *lp, char **fs, int slaves)
struct PartnerLoggingTimestep * slaves_log
Logs for slaves.
enum GNUNET_NetworkType ats_network_type
struct BenchmarkPeer * slave
Peer.
struct BenchmarkPeer * peer
Peer.
struct LoggingPeer * lp
Log structure of length num_peers.
uint64_t abs_value_us
The actual value.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
unsigned int total_bytes_sent
Total number of bytes this peer has sent.
A single logging time step for a peer.
unsigned int total_messages_sent
Total number of messages this peer has sent.
int num_partners
Number of partners.
Definition: ats-testing.h:196
int no
Unique identifier.
Definition: ats-testing.h:121
#define GNUNET_log_strerror_file(level, cmd, filename)
Log an error message at log-level &#39;level&#39; that indicates a failure of the command &#39;cmd&#39; with the mess...
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:820
struct GNUNET_TIME_Absolute start
Start time.
unsigned int app_rtt
Current application level delay.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
unsigned int total_messages_received
Total number of messages this peer has received.
unsigned int throughput_sent
Total outbound throughput for master in Bytes / s.
Open the file for writing.
unsigned int total_throughput_send
Total outbound throughput for master in Bytes / s.
struct GNUNET_TIME_Relative ats_delay
struct GNUNET_TIME_Absolute timestamp
Logging timestamp.
unsigned int total_messages_sent
Total number of messages this peer has sent.
#define GNUNET_log(kind,...)
unsigned int total_throughput_recv
Total inbound throughput for master in Bytes / s.
struct PeerLoggingTimestep * next
Next in DLL.
int num_masters
Reference to perf_ats&#39; masters.
Time for absolute times used by GNUnet, in microseconds.
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
Compute the time difference between the given start and end times.
Definition: time.c:354
unsigned int total_bytes_received
Total number of bytes this peer has received.
uint32_t data
The data value.
static void write_throughput_gnuplot_script(char *fn, struct LoggingPeer *lp, char **fs, int slaves)
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1203
Handle used to access files (and pipes).
unsigned int total_bytes_received
Total number of bytes this peer has received.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_ATS_TEST_logging_now()

void GNUNET_ATS_TEST_logging_now ( struct LoggingHandle l)

Log all data now.

Parameters
llogging handle to use

Definition at line 677 of file ats-testing-log.c.

References PartnerLoggingTimestep::app_rtt, PartnerLoggingTimestep::ats_delay, PartnerLoggingTimestep::ats_distance, PartnerLoggingTimestep::ats_network_type, PartnerLoggingTimestep::ats_utilization_in, PartnerLoggingTimestep::ats_utilization_out, PartnerLoggingTimestep::bandwidth_in, BenchmarkPartner::bandwidth_in, PartnerLoggingTimestep::bandwidth_out, BenchmarkPartner::bandwidth_out, BenchmarkPartner::bytes_received, BenchmarkPartner::bytes_sent, GNUNET_ATS_Properties::delay, BenchmarkPartner::dest, GNUNET_ATS_Properties::distance, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_malloc, GNUNET_new, GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_difference(), GNUNET_TIME_UNIT_SECONDS, GNUNET_YES, LoggingPeer::head, LoggingHandle::lp, BenchmarkPartner::messages_received, BenchmarkPartner::messages_sent, BenchmarkPeer::no, LoggingHandle::num_masters, BenchmarkPeer::num_partners, p, BenchmarkPeer::partners, LoggingPeer::peer, PartnerLoggingTimestep::pref_bandwidth, BenchmarkPartner::pref_bandwidth, PartnerLoggingTimestep::pref_delay, BenchmarkPartner::pref_delay, PeerLoggingTimestep::prev, BenchmarkPartner::props, GNUNET_TIME_Relative::rel_value_us, LoggingHandle::running, GNUNET_ATS_Properties::scope, PartnerLoggingTimestep::slave, PeerLoggingTimestep::slaves_log, LoggingPeer::start, LoggingPeer::tail, PartnerLoggingTimestep::throughput_recv, PartnerLoggingTimestep::throughput_sent, PeerLoggingTimestep::timestamp, PartnerLoggingTimestep::total_app_rtt, BenchmarkPartner::total_app_rtt, PartnerLoggingTimestep::total_bytes_received, PeerLoggingTimestep::total_bytes_received, BenchmarkPeer::total_bytes_received, PartnerLoggingTimestep::total_bytes_sent, PeerLoggingTimestep::total_bytes_sent, BenchmarkPeer::total_bytes_sent, PartnerLoggingTimestep::total_messages_received, PeerLoggingTimestep::total_messages_received, BenchmarkPeer::total_messages_received, PartnerLoggingTimestep::total_messages_sent, PeerLoggingTimestep::total_messages_sent, BenchmarkPeer::total_messages_sent, PeerLoggingTimestep::total_throughput_recv, PeerLoggingTimestep::total_throughput_send, GNUNET_ATS_Properties::utilization_out, and LoggingHandle::verbose.

Referenced by collect_log_task().

678 {
679  struct LoggingPeer *bp;
680  struct PeerLoggingTimestep *mlt;
681  struct PeerLoggingTimestep *prev_log_mlt;
682  struct PartnerLoggingTimestep *slt;
683  struct PartnerLoggingTimestep *prev_log_slt;
684  struct BenchmarkPartner *p;
686  int c_s;
687  int c_m;
688  unsigned int app_rtt;
689  double mult;
690 
691  if (GNUNET_YES != l->running)
692  return;
693 
694  for (c_m = 0; c_m < l->num_masters; c_m++)
695  {
696  bp = &l->lp[c_m];
697  mlt = GNUNET_new (struct PeerLoggingTimestep);
698  GNUNET_CONTAINER_DLL_insert_tail (l->lp[c_m].head, l->lp[c_m].tail, mlt);
699  prev_log_mlt = mlt->prev;
700 
701  /* Collect data */
702  /* Current master state */
708 
709  /* Throughput */
710  if (NULL == prev_log_mlt)
711  {
712  /* Get difference to start */
714  mlt->timestamp);
715  }
716  else
717  {
718  /* Get difference to last timestep */
720  mlt->timestamp);
721  }
722 
723  /* Multiplication factor for throughput calculation */
724  mult = (double) GNUNET_TIME_UNIT_SECONDS.rel_value_us
725  / (delta.rel_value_us);
726 
727  /* Total throughput */
728  if (NULL != prev_log_mlt)
729  {
730  if (mlt->total_bytes_sent - mlt->prev->total_bytes_sent > 0)
731  {
732  mlt->total_throughput_send = mult * (mlt->total_bytes_sent
733  - mlt->prev->total_bytes_sent);
734  }
735  else
736  {
737  mlt->total_throughput_send = 0;
738  // mlt->total_throughput_send = prev_log_mlt->total_throughput_send; /* no msgs send */
739  }
740 
741  if (mlt->total_bytes_received - mlt->prev->total_bytes_received > 0)
742  {
743  mlt->total_throughput_recv = mult * (mlt->total_bytes_received
744  - mlt->prev->total_bytes_received);
745  }
746  else
747  {
748  mlt->total_throughput_recv = 0;
749  // mlt->total_throughput_recv = prev_log_mlt->total_throughput_recv; /* no msgs received */
750  }
751  }
752  else
753  {
754  mlt->total_throughput_send = mult * mlt->total_bytes_sent;
755  mlt->total_throughput_recv = mult * mlt->total_bytes_received;
756  }
757 
758  if (GNUNET_YES == l->verbose)
759  {
761  "Master[%u] delta: %llu us, bytes (sent/received): %u / %u; throughput send/recv: %u / %u\n",
762  c_m,
763  (unsigned long long) delta.rel_value_us,
764  mlt->total_bytes_sent,
767  mlt->total_throughput_recv);
768  }
769 
771  * sizeof(struct PartnerLoggingTimestep));
772 
773  for (c_s = 0; c_s < bp->peer->num_partners; c_s++)
774  {
776  "Collect logging data master[%u] slave [%u]\n", c_m, c_s);
777 
778  p = &bp->peer->partners[c_s];
779  slt = &mlt->slaves_log[c_s];
780 
781  slt->slave = p->dest;
782  /* Bytes sent from master to this slave */
783  slt->total_bytes_sent = p->bytes_sent;
784  /* Messages sent from master to this slave */
786  /* Bytes master received from this slave */
788  /* Messages master received from this slave */
790  slt->total_app_rtt = p->total_app_rtt;
791  /* ats performance information */
792  slt->ats_delay = p->props.delay;
793  slt->ats_distance = p->props.distance;
794  slt->ats_network_type = p->props.scope;
797  slt->bandwidth_in = p->bandwidth_in;
798  slt->bandwidth_out = p->bandwidth_out;
799  slt->pref_bandwidth = p->pref_bandwidth;
800  slt->pref_delay = p->pref_delay;
801 
802  /* Total application level rtt */
803  if (NULL == prev_log_mlt)
804  {
805  if (0 != slt->total_messages_sent)
806  app_rtt = slt->total_app_rtt / slt->total_messages_sent;
807  else
808  app_rtt = 0;
809  }
810  else
811  {
812  prev_log_slt = &prev_log_mlt->slaves_log[c_s];
813  if ((slt->total_messages_sent - prev_log_slt->total_messages_sent) > 0)
814  app_rtt = (slt->total_app_rtt - prev_log_slt->total_app_rtt)
815  / (slt->total_messages_sent
816  - prev_log_slt->total_messages_sent);
817  else
818  {
819  app_rtt = prev_log_slt->app_rtt; /* No messages were */
820  }
821  }
822  slt->app_rtt = app_rtt;
823 
824  /* Partner throughput */
825  if (NULL != prev_log_mlt)
826  {
827  prev_log_slt = &prev_log_mlt->slaves_log[c_s];
828  if (slt->total_bytes_sent > prev_log_slt->total_bytes_sent)
829  slt->throughput_sent = mult * (slt->total_bytes_sent
830  - prev_log_slt->total_bytes_sent);
831  else
832  slt->throughput_sent = 0;
833 
834  if (slt->total_bytes_received > prev_log_slt->total_bytes_received)
835  slt->throughput_recv = mult
836  * (slt->total_bytes_received
837  - prev_log_slt->total_bytes_received);
838  else
839  slt->throughput_recv = 0;
840  }
841  else
842  {
843  slt->throughput_sent = mult * slt->total_bytes_sent;
844  slt->throughput_recv = mult * slt->total_bytes_received;
845  }
846 
847  if (GNUNET_YES == l->verbose)
848  {
850  "Master [%u] -> Slave [%u]: delta: %llu us, bytes (sent/received): %u / %u; throughput send/recv: %u / %u\n",
851  c_m, c_s,
852  (unsigned long long) delta.rel_value_us,
853  mlt->total_bytes_sent,
855  slt->throughput_sent,
856  slt->throughput_recv);
857  }
858  else
860  "Master [%u]: slave [%u]\n",
861  bp->peer->no, p->dest->no);
862  }
863  }
864 }
unsigned int total_bytes_sent
Total number of bytes this peer has sent.
unsigned int total_bytes_sent
Total number of bytes this peer has sent.
Definition: ats-testing.h:217
unsigned int messages_sent
Number of messages sent to this partner.
Definition: ats-testing.h:315
unsigned int total_bytes_received
Total number of bytes this peer has received.
Definition: ats-testing.h:227
A single logging time step for a partner.
uint64_t rel_value_us
The actual value.
static struct GNUNET_TIME_Relative delta
Definition: speedup.c:35
struct PeerLoggingTimestep * head
DLL for logging entries: head.
unsigned int throughput_recv
Total inbound throughput for master in Bytes / s.
unsigned int total_messages_received
Total number of messages this peer has received.
#define GNUNET_TIME_UNIT_SECONDS
One second.
double pref_bandwidth
Current preference values for bandwidth.
Definition: ats-testing.h:350
struct BenchmarkPartner * partners
Array of partners with num_slaves entries (if master) or num_master entries (if slave) ...
Definition: ats-testing.h:191
unsigned int total_messages_received
Total number of messages this peer has received.
Definition: ats-testing.h:222
struct PartnerLoggingTimestep * slaves_log
Logs for slaves.
enum GNUNET_NetworkType ats_network_type
struct BenchmarkPeer * slave
Peer.
unsigned int bytes_received
Number of bytes received from this partner.
Definition: ats-testing.h:330
struct BenchmarkPeer * peer
Peer.
struct PeerLoggingTimestep * prev
Prev in DLL.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
struct LoggingPeer * lp
Log structure of length num_peers.
unsigned int total_messages_sent
Total number of messages this peer has sent.
Definition: ats-testing.h:212
unsigned int total_bytes_sent
Total number of bytes this peer has sent.
A single logging time step for a peer.
unsigned int total_messages_sent
Total number of messages this peer has sent.
int num_partners
Number of partners.
Definition: ats-testing.h:196
int no
Unique identifier.
Definition: ats-testing.h:121
static struct GNUNET_OS_Process * p
Helper process we started.
Definition: gnunet-qr.c:59
unsigned int total_app_rtt
Accumulated RTT for all messages.
Definition: ats-testing.h:310
uint32_t bandwidth_in
Bandwidth assigned inbound.
Definition: ats-testing.h:340
double pref_delay
Current preference values for delay.
Definition: ats-testing.h:355
unsigned int total_app_rtt
Accumulated RTT for all messages.
Information about a benchmarking partner.
Definition: ats-testing.h:275
struct GNUNET_TIME_Relative delay
Delay.
unsigned int messages_received
Number of messages received from this partner.
Definition: ats-testing.h:325
uint32_t bandwidth_out
Bandwidth assigned outbound.
Definition: ats-testing.h:345
struct GNUNET_TIME_Absolute start
Start time.
unsigned int app_rtt
Current application level delay.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
Entry for a benchmark peer.
unsigned int total_messages_received
Total number of messages this peer has received.
unsigned int throughput_sent
Total outbound throughput for master in Bytes / s.
unsigned int total_throughput_send
Total outbound throughput for master in Bytes / s.
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
struct GNUNET_TIME_Relative ats_delay
enum GNUNET_NetworkType scope
Which network scope does the respective address belong to? This property does not change...
struct GNUNET_TIME_Absolute timestamp
Logging timestamp.
unsigned int bytes_sent
Number of bytes sent to this partner.
Definition: ats-testing.h:320
unsigned int total_messages_sent
Total number of messages this peer has sent.
struct PeerLoggingTimestep * tail
DLL for logging entries: tail.
#define GNUNET_log(kind,...)
unsigned int total_throughput_recv
Total inbound throughput for master in Bytes / s.
int num_masters
Reference to perf_ats&#39; masters.
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
Compute the time difference between the given start and end times.
Definition: time.c:354
struct GNUNET_ATS_Properties props
Current ATS properties.
Definition: ats-testing.h:335
unsigned int total_bytes_received
Total number of bytes this peer has received.
unsigned int distance
Distance on network layer (required for distance-vector routing) in hops.
struct BenchmarkPeer * dest
The partner peer.
Definition: ats-testing.h:285
#define GNUNET_malloc(size)
Wrapper around malloc.
unsigned int total_bytes_received
Total number of bytes this peer has received.
Time for relative time used by GNUnet, in microseconds.
uint32_t utilization_out
Actual traffic on this connection from this peer to the other peer.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ collect_log_task()

static void collect_log_task ( void *  cls)
static

Definition at line 868 of file ats-testing-log.c.

References LoggingHandle::frequency, GNUNET_ATS_TEST_logging_now(), GNUNET_SCHEDULER_add_delayed(), l, and LoggingHandle::log_task.

Referenced by GNUNET_ATS_TEST_logging_start().

869 {
870  struct LoggingHandle *l = cls;
871 
872  l->log_task = NULL;
876  l);
877 }
static void collect_log_task(void *cls)
static struct LoggingHandle * l
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1269
struct GNUNET_TIME_Relative frequency
struct GNUNET_SCHEDULER_Task * log_task
Logging task.
void GNUNET_ATS_TEST_logging_now(struct LoggingHandle *l)
Log all data now.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_ATS_TEST_logging_stop()

void GNUNET_ATS_TEST_logging_stop ( struct LoggingHandle l)

Stop logging.

Parameters
lthe logging handle

Definition at line 886 of file ats-testing-log.c.

References _, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_NO, GNUNET_SCHEDULER_cancel(), GNUNET_YES, LoggingHandle::log_task, and LoggingHandle::running.

Referenced by do_shutdown(), experiment_done_cb(), and GNUNET_ATS_TEST_logging_clean_up().

887 {
888  if (GNUNET_YES != l->running)
889  return;
890 
891  if (NULL != l->log_task)
892  {
894  l->log_task = NULL;
895  }
896  l->running = GNUNET_NO;
897 
899  _ ("Stop logging\n"));
900 }
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
struct GNUNET_SCHEDULER_Task * log_task
Logging task.
#define GNUNET_log(kind,...)
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:972
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_ATS_TEST_logging_clean_up()

void GNUNET_ATS_TEST_logging_clean_up ( struct LoggingHandle l)

Clean up logging data.

Stop logging.

Parameters
lthe logging handle

Definition at line 909 of file ats-testing-log.c.

References GNUNET_ATS_TEST_logging_stop(), GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_YES, LoggingPeer::head, LoggingHandle::lp, LoggingHandle::num_masters, LoggingHandle::running, PeerLoggingTimestep::slaves_log, and LoggingPeer::tail.

Referenced by do_shutdown().

910 {
911  int c_m;
912  struct PeerLoggingTimestep *cur;
913 
914  if (GNUNET_YES == l->running)
916 
917  for (c_m = 0; c_m < l->num_masters; c_m++)
918  {
919  while (NULL != (cur = l->lp[c_m].head))
920  {
921  GNUNET_CONTAINER_DLL_remove (l->lp[c_m].head, l->lp[c_m].tail, cur);
922  GNUNET_free (cur->slaves_log);
923  GNUNET_free (cur);
924  }
925  }
926 
927  GNUNET_free (l->lp);
928  GNUNET_free (l);
929 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct PeerLoggingTimestep * head
DLL for logging entries: head.
struct PartnerLoggingTimestep * slaves_log
Logs for slaves.
struct LoggingPeer * lp
Log structure of length num_peers.
A single logging time step for a peer.
void GNUNET_ATS_TEST_logging_stop(struct LoggingHandle *l)
Stop logging.
struct PeerLoggingTimestep * tail
DLL for logging entries: tail.
int num_masters
Reference to perf_ats&#39; masters.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_ATS_TEST_logging_start()

struct LoggingHandle* GNUNET_ATS_TEST_logging_start ( struct GNUNET_TIME_Relative  log_frequency,
const char *  testname,
struct BenchmarkPeer masters,
int  num_masters,
int  num_slaves,
int  verbose 
)

Start logging.

Parameters
log_frequencythe logging frequency
testnamethe testname
mastersthe master peers used for benchmarking
num_mastersthe number of master peers
num_slavesthe number of slave peers
verboseverbose logging
Returns
the logging handle or NULL on error

Definition at line 944 of file ats-testing-log.c.

References _, collect_log_task(), LoggingHandle::frequency, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_malloc, GNUNET_new, GNUNET_SCHEDULER_add_now(), GNUNET_TIME_absolute_get(), GNUNET_YES, l, LoggingHandle::log_task, LoggingHandle::lp, LoggingHandle::name, LoggingHandle::num_masters, LoggingHandle::num_slaves, LoggingPeer::peer, LoggingHandle::running, LoggingPeer::start, verbose, and LoggingHandle::verbose.

Referenced by topology_setup_done().

950 {
951  struct LoggingHandle *l;
952  int c_m;
953 
955  _ ("Start logging `%s'\n"), testname);
956 
957  l = GNUNET_new (struct LoggingHandle);
959  l->num_slaves = num_slaves;
960  l->name = testname;
961  l->frequency = log_frequency;
962  l->verbose = verbose;
963  l->lp = GNUNET_malloc (num_masters * sizeof(struct LoggingPeer));
964 
965  for (c_m = 0; c_m < num_masters; c_m++)
966  {
967  l->lp[c_m].peer = &masters[c_m];
968  l->lp[c_m].start = GNUNET_TIME_absolute_get ();
969  }
970 
971  /* Schedule logging task */
973  l->running = GNUNET_YES;
974 
975  return l;
976 }
const char * name
static void collect_log_task(void *cls)
struct BenchmarkPeer * peer
Peer.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
struct LoggingPeer * lp
Log structure of length num_peers.
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static struct LoggingHandle * l
static int verbose
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1296
struct GNUNET_TIME_Absolute start
Start time.
struct GNUNET_TIME_Relative frequency
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
Entry for a benchmark peer.
struct GNUNET_SCHEDULER_Task * log_task
Logging task.
#define GNUNET_log(kind,...)
int num_masters
Reference to perf_ats&#39; masters.
#define GNUNET_malloc(size)
Wrapper around malloc.
Here is the call graph for this function:
Here is the caller graph for this function: