aboutsummaryrefslogtreecommitdiff
path: root/src/benchmark
diff options
context:
space:
mode:
Diffstat (limited to 'src/benchmark')
-rw-r--r--src/benchmark/taler-exchange-benchmark.c194
1 files changed, 103 insertions, 91 deletions
diff --git a/src/benchmark/taler-exchange-benchmark.c b/src/benchmark/taler-exchange-benchmark.c
index 094f23c74..d106eb557 100644
--- a/src/benchmark/taler-exchange-benchmark.c
+++ b/src/benchmark/taler-exchange-benchmark.c
@@ -41,7 +41,8 @@
#include "taler_error_codes.h"
/* Error codes. */
-enum BenchmarkError {
+enum BenchmarkError
+{
MISSING_BANK_URL,
FAILED_TO_LAUNCH_BANK,
BAD_CLI_ARG,
@@ -67,20 +68,23 @@ enum BenchmarkError {
#define FIRST_INSTRUCTION -1
#define CMD_TRANSFER_TO_EXCHANGE(label, amount) \
- TALER_TESTING_cmd_fakebank_transfer_retry \
+ TALER_TESTING_cmd_fakebank_transfer_retry \
(TALER_TESTING_cmd_fakebank_transfer (label, amount, \
- exchange_bank_account.details.x_taler_bank.bank_base_url, \
- USER_ACCOUNT_NUMBER, \
- exchange_bank_account.details.x_taler_bank.no, \
- "dummy_user", \
- "dummy_password", \
- "http://example.com/"))
+ exchange_bank_account.details. \
+ x_taler_bank.bank_base_url, \
+ USER_ACCOUNT_NUMBER, \
+ exchange_bank_account.details. \
+ x_taler_bank.no, \
+ "dummy_user", \
+ "dummy_password", \
+ "http://example.com/"))
/**
* What mode should the benchmark run in?
*/
-enum BenchmarkMode {
+enum BenchmarkMode
+{
/**
* Run as client (with fakebank), also starts a remote exchange.
*/
@@ -222,7 +226,7 @@ eval_probability (float probability)
float random_01;
random = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
- UINT64_MAX);
+ UINT64_MAX);
random_01 = (double) random / UINT64_MAX;
return (random_01 <= probability) ? GNUNET_OK : GNUNET_NO;
}
@@ -239,9 +243,9 @@ run (void *cls,
struct TALER_Amount withdraw_fee;
char *withdraw_fee_str;
struct TALER_TESTING_Command all_commands
- [howmany_reserves * (1 + /* Withdraw block */
- howmany_coins) + /* All units */
- 1 /* End CMD */];
+ [howmany_reserves * (1 /* Withdraw block */
+ + howmany_coins) /* All units */
+ + 1 /* End CMD */];
char *AMOUNT_5;
char *AMOUNT_4;
char *AMOUNT_1;
@@ -250,7 +254,8 @@ run (void *cls,
GNUNET_asprintf (&AMOUNT_4, "%s:4", currency);
GNUNET_asprintf (&AMOUNT_1, "%s:1", currency);
- GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (currency, &total_reserve_amount));
+ GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (currency,
+ &total_reserve_amount));
total_reserve_amount.value = 5 * howmany_coins;
GNUNET_asprintf (&withdraw_fee_str,
@@ -274,8 +279,8 @@ run (void *cls,
{
struct TALER_TESTING_Command make_reserve[] = {
CMD_TRANSFER_TO_EXCHANGE
- (create_reserve_label,
- TALER_amount_to_string (&total_reserve_amount)),
+ (create_reserve_label,
+ TALER_amount_to_string (&total_reserve_amount)),
TALER_TESTING_cmd_end ()
};
char *batch_label;
@@ -303,24 +308,24 @@ run (void *cls,
i + (howmany_coins * j));
unit[0] =
TALER_TESTING_cmd_withdraw_with_retry
- (TALER_TESTING_cmd_withdraw_amount
- (withdraw_label,
- create_reserve_label,
- AMOUNT_5,
- MHD_HTTP_OK));
+ (TALER_TESTING_cmd_withdraw_amount
+ (withdraw_label,
+ create_reserve_label,
+ AMOUNT_5,
+ MHD_HTTP_OK));
unit[1] =
TALER_TESTING_cmd_deposit_with_retry
- (TALER_TESTING_cmd_deposit
- ("deposit",
- withdraw_label,
- 0, /* Index of the one withdrawn coin in the traits. */
- TALER_TESTING_make_wire_details
- (USER_ACCOUNT_NUMBER,
- exchange_bank_account.details.x_taler_bank.hostname),
- order_enc,
- GNUNET_TIME_UNIT_ZERO,
- AMOUNT_1,
- MHD_HTTP_OK));
+ (TALER_TESTING_cmd_deposit
+ ("deposit",
+ withdraw_label,
+ 0, /* Index of the one withdrawn coin in the traits. */
+ TALER_TESTING_make_wire_details
+ (USER_ACCOUNT_NUMBER,
+ exchange_bank_account.details.x_taler_bank.hostname),
+ order_enc,
+ GNUNET_TIME_UNIT_ZERO,
+ AMOUNT_1,
+ MHD_HTTP_OK));
if (eval_probability (refresh_rate / 100.0))
{
@@ -337,23 +342,23 @@ run (void *cls,
j);
unit[2] =
TALER_TESTING_cmd_refresh_melt_with_retry
- (TALER_TESTING_cmd_refresh_melt
- (melt_label,
- withdraw_label,
- MHD_HTTP_OK,
- NULL));
+ (TALER_TESTING_cmd_refresh_melt
+ (melt_label,
+ withdraw_label,
+ MHD_HTTP_OK,
+ NULL));
unit[3] =
TALER_TESTING_cmd_refresh_reveal_with_retry
- (TALER_TESTING_cmd_refresh_reveal
- (reveal_label,
- melt_label,
- MHD_HTTP_OK));
+ (TALER_TESTING_cmd_refresh_reveal
+ (reveal_label,
+ melt_label,
+ MHD_HTTP_OK));
unit[4] =
TALER_TESTING_cmd_refresh_link_with_retry
- (TALER_TESTING_cmd_refresh_link
- ("refresh-link",
- reveal_label,
- MHD_HTTP_OK));
+ (TALER_TESTING_cmd_refresh_link
+ ("refresh-link",
+ reveal_label,
+ MHD_HTTP_OK));
unit[5] = TALER_TESTING_cmd_end ();
}
else
@@ -402,7 +407,7 @@ launch_fakebank (void *cls)
const char *bank_base_url = cls;
const char *port;
long pnum;
- struct TALER_FAKEBANK_Handle * fakebank;
+ struct TALER_FAKEBANK_Handle *fakebank;
port = strrchr (bank_base_url,
(unsigned char) ':');
@@ -460,7 +465,8 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
NULL == loglev ? "INFO" : loglev,
logfile);
GNUNET_SCHEDULER_run (&launch_fakebank,
- exchange_bank_account.details.x_taler_bank.bank_base_url);
+ exchange_bank_account.details.x_taler_bank.
+ bank_base_url);
exit (0);
}
if (-1 == fakebank)
@@ -534,9 +540,9 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
remote_cmd);
GNUNET_assert (NULL != (exchange_slave_pipe =
- GNUNET_DISK_pipe (GNUNET_YES,
- GNUNET_YES,
- 0, 0)));
+ GNUNET_DISK_pipe (GNUNET_YES,
+ GNUNET_YES,
+ 0, 0)));
exchange_slave = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
@@ -586,7 +592,7 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
start_time = GNUNET_TIME_absolute_get ();
result = GNUNET_OK;
- for (unsigned int i=0;i<howmany_clients;i++)
+ for (unsigned int i = 0; i<howmany_clients; i++)
{
if (0 == (cpids[i] = fork ()))
{
@@ -596,11 +602,11 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
logfile);
result = TALER_TESTING_setup
- (run,
- NULL,
- cfg_filename,
- exchanged,
- GNUNET_YES);
+ (run,
+ NULL,
+ cfg_filename,
+ exchanged,
+ GNUNET_YES);
if (GNUNET_OK != result)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failure in child process test suite!\n");
@@ -620,7 +626,7 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
/* fork() success, continue starting more processes! */
}
/* collect all children */
- for (unsigned int i=0;i<howmany_clients;i++)
+ for (unsigned int i = 0; i<howmany_clients; i++)
{
waitpid (cpids[i],
&wstatus,
@@ -638,9 +644,10 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
if (MODE_EXCHANGE == mode)
(void) getchar ();
- if ( (GNUNET_YES == linger) && ( (mode == MODE_BOTH || mode == MODE_CLIENT ) ) )
+ if ( (GNUNET_YES == linger) && ( ((mode == MODE_BOTH)|| (mode ==
+ MODE_CLIENT) ) ) )
{
- printf("press ENTER to stop\n");
+ printf ("press ENTER to stop\n");
(void) getchar ();
}
@@ -654,7 +661,7 @@ parallel_benchmark (TALER_TESTING_Main main_cb,
* We can't send a signal here, as it would just kill SSH and
* not necessarily the process on the other machine. */
GNUNET_DISK_file_write (GNUNET_DISK_pipe_handle
- (exchange_slave_pipe, GNUNET_DISK_PIPE_END_WRITE),
+ (exchange_slave_pipe, GNUNET_DISK_PIPE_END_WRITE),
&c, sizeof (c));
GNUNET_break (GNUNET_OK ==
@@ -720,7 +727,7 @@ main (int argc,
struct GNUNET_CONFIGURATION_Handle *cfg;
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_option_mandatory
- (GNUNET_GETOPT_option_cfgfile (&cfg_filename)),
+ (GNUNET_GETOPT_option_cfgfile (&cfg_filename)),
GNUNET_GETOPT_option_version (PACKAGE_VERSION " " VCS_VERSION),
GNUNET_GETOPT_option_help ("Exchange benchmark"),
GNUNET_GETOPT_option_loglevel (&loglev),
@@ -788,7 +795,8 @@ main (int argc,
return BAD_CONFIG_FILE;
}
if (NULL == cfg_filename)
- cfg_filename = GNUNET_strdup (GNUNET_OS_project_data_get ()->user_config_file);
+ cfg_filename = GNUNET_strdup (
+ GNUNET_OS_project_data_get ()->user_config_file);
cfg = GNUNET_CONFIGURATION_create ();
if (GNUNET_OK !=
GNUNET_CONFIGURATION_load (cfg,
@@ -822,21 +830,22 @@ main (int argc,
GNUNET_CONFIGURATION_iterate_sections
(cfg,
- &pick_exchange_account_cb,
- &bank_details_section);
+ &pick_exchange_account_cb,
+ &bank_details_section);
if (NULL == bank_details_section)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Missing specification of bank account in configuration\n"));
+ _ (
+ "Missing specification of bank account in configuration\n"));
return BAD_CONFIG_FILE;
}
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string
- (cfg,
- bank_details_section,
- "url",
- &exchange_payto_url))
+ (cfg,
+ bank_details_section,
+ "url",
+ &exchange_payto_url))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
bank_details_section,
@@ -846,10 +855,10 @@ main (int argc,
if (TALER_EC_NONE !=
TALER_WIRE_payto_to_account (exchange_payto_url,
- &exchange_bank_account))
+ &exchange_bank_account))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Malformed payto:// URL `%s' in configuration\n"),
+ _ ("Malformed payto:// URL `%s' in configuration\n"),
exchange_payto_url);
GNUNET_free (exchange_payto_url);
return BAD_CONFIG_FILE;
@@ -857,7 +866,8 @@ main (int argc,
if (TALER_PAC_X_TALER_BANK != exchange_bank_account.type)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Malformed payto:// URL `%s' in configuration: x-taler-bank required\n"),
+ _ (
+ "Malformed payto:// URL `%s' in configuration: x-taler-bank required\n"),
exchange_payto_url);
GNUNET_free (exchange_payto_url);
return BAD_CONFIG_FILE;
@@ -869,13 +879,13 @@ main (int argc,
struct GNUNET_OS_Process *compute_wire_response;
compute_wire_response = GNUNET_OS_start_process
- (GNUNET_NO,
- GNUNET_OS_INHERIT_STD_ALL,
- NULL, NULL, NULL,
- "taler-exchange-wire",
- "taler-exchange-wire",
- "-c", cfg_filename,
- NULL);
+ (GNUNET_NO,
+ GNUNET_OS_INHERIT_STD_ALL,
+ NULL, NULL, NULL,
+ "taler-exchange-wire",
+ "taler-exchange-wire",
+ "-c", cfg_filename,
+ NULL);
if (NULL == compute_wire_response)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -889,8 +899,8 @@ main (int argc,
GNUNET_assert
(GNUNET_OK == TALER_TESTING_prepare_exchange
(cfg_filename,
- &auditor_url,
- &exchange_url));
+ &auditor_url,
+ &exchange_url));
}
else
{
@@ -952,7 +962,7 @@ main (int argc,
if (GNUNET_OK == result)
{
struct rusage usage;
- GNUNET_assert (0 == getrusage(RUSAGE_CHILDREN, &usage));
+ GNUNET_assert (0 == getrusage (RUSAGE_CHILDREN, &usage));
fprintf (stdout,
"Executed (Withdraw=%u, Deposit=%u, Refresh~=%5.2f) * Reserve=%u * Parallel=%u, operations in %s\n",
howmany_coins,
@@ -961,16 +971,16 @@ main (int argc,
howmany_reserves,
howmany_clients,
GNUNET_STRINGS_relative_time_to_string
- (duration,
- GNUNET_NO));
+ (duration,
+ GNUNET_NO));
fprintf (stdout,
"(approximately %s/coin)\n",
GNUNET_STRINGS_relative_time_to_string
- (GNUNET_TIME_relative_divide (duration,
- (unsigned long long) howmany_coins *
- howmany_reserves *
- howmany_clients),
- GNUNET_YES));
+ (GNUNET_TIME_relative_divide (duration,
+ (unsigned long long) howmany_coins
+ * howmany_reserves
+ * howmany_clients),
+ GNUNET_YES));
fprintf (stdout,
"RAW: %04u %04u %04u %16llu\n",
howmany_coins,
@@ -978,8 +988,10 @@ main (int argc,
howmany_clients,
(unsigned long long) duration.rel_value_us);
fprintf (stdout, "cpu time: sys %llu user %llu\n", \
- (unsigned long long) (usage.ru_stime.tv_sec * 1000 * 1000 + usage.ru_stime.tv_usec),
- (unsigned long long) (usage.ru_utime.tv_sec * 1000 * 1000 + usage.ru_utime.tv_usec));
+ (unsigned long long) (usage.ru_stime.tv_sec * 1000 * 1000
+ + usage.ru_stime.tv_usec),
+ (unsigned long long) (usage.ru_utime.tv_sec * 1000 * 1000
+ + usage.ru_utime.tv_usec));
}
return (GNUNET_OK == result) ? 0 : result;
}