From 8791ce6a04e0313005c6e84469bd3fc63e0bb460 Mon Sep 17 00:00:00 2001 From: Fournier Nicolas Date: Mon, 10 Aug 2015 18:12:27 +0200 Subject: [PATCH] added new benchmarks --- src/mintdb/perf_taler_mintdb.c | 22 +++- src/mintdb/perf_taler_mintdb_interpreter.c | 132 +++++++++++++++------ src/mintdb/perf_taler_mintdb_interpreter.h | 67 ++++++++++- src/mintdb/test_perf_taler_mintdb.c | 8 +- 4 files changed, 188 insertions(+), 41 deletions(-) diff --git a/src/mintdb/perf_taler_mintdb.c b/src/mintdb/perf_taler_mintdb.c index 11ae6f526..80cb3069e 100644 --- a/src/mintdb/perf_taler_mintdb.c +++ b/src/mintdb/perf_taler_mintdb.c @@ -25,8 +25,8 @@ #define NB_DENOMINATION_INIT 15 #define NB_DENOMINATION_SAVE 15 -#define BIGGER 10 -#define BIG 10 +#define BIGGER 100000 +#define BIG 10000 #define NB_RESERVE_INIT BIGGER #define NB_RESERVE_SAVE BIG @@ -37,6 +37,9 @@ #define NB_WITHDRAW_INIT BIGGER #define NB_WITHDRAW_SAVE BIG +#define NB_REFRESH_INIT BIGGER +#define NB_REFRESH_SAVE BIG + /** * Runs the performances tests for the mint database * and logs the results using Gauger @@ -118,8 +121,21 @@ main (int argc, char ** argv) NB_DEPOSIT_SAVE), PERF_TALER_MINTDB_INIT_CMD_END_LOOP ("", "04 - deposit init loop"), - PERF_TALER_MINTDB_INIT_CMD_DEBUG ("End of initialization"), // End of deposit initialization + // Session initialization + PERF_TALER_MINTDB_INIT_CMD_LOOP ("05 - refresh session init loop", + NB_REFRESH_INIT), + PERF_TALER_MINTDB_INIT_CMD_START_TRANSACTION (""), + PERF_TALER_MINTDB_INIT_CMD_CREATE_REFRESH_SESSION ("05 - refresh session"), + PERF_TALER_MINTDB_INIT_CMD_SAVE_ARRAY ("05 - session array", + "05 - refresh session init loop", + "05 - refresh session", + NB_RESERVE_SAVE), + PERF_TALER_MINTDB_INIT_CMD_COMMIT_TRANSACTION (""), + PERF_TALER_MINTDB_INIT_CMD_END_LOOP ("05 - end", + "05 - refresh session init loop"), + + PERF_TALER_MINTDB_INIT_CMD_DEBUG ("End of initialization"), PERF_TALER_MINTDB_INIT_CMD_DEBUG ("Start of performances measuring"), PERF_TALER_MINTDB_INIT_CMD_GET_TIME ("05 - start"), diff --git a/src/mintdb/perf_taler_mintdb_interpreter.c b/src/mintdb/perf_taler_mintdb_interpreter.c index eee4e712e..8db141f67 100644 --- a/src/mintdb/perf_taler_mintdb_interpreter.c +++ b/src/mintdb/perf_taler_mintdb_interpreter.c @@ -94,7 +94,21 @@ data_free (struct PERF_TALER_MINTDB_Data *data) data->data.dki = NULL; break; - default: + case PERF_TALER_MINTDB_REFRESH_HASH: + if (NULL == data->data.session_hash) + break; + GNUNET_free (data->data.session_hash); + data->data.session_hash = NULL; + break; + + case PERF_TALER_MINTDB_REFRESH_MELT: + if (NULL == data->data.refresh_melt) + break; + PERF_TALER_MINTDB_refresh_melt_free (data->data.refresh_melt); + data->data.refresh_melt = NULL; + break; + + case PERF_TALER_MINTDB_NONE: break; } } @@ -138,8 +152,19 @@ data_copy (const struct PERF_TALER_MINTDB_Data *data, = PERF_TALER_MINTDB_denomination_copy (data->data.dki); return; - default: - return; + case PERF_TALER_MINTDB_REFRESH_HASH: + copy-> data.session_hash = GNUNET_new (struct GNUNET_HashCode); + *copy->data.session_hash + = *data->data.session_hash; + break; + + case PERF_TALER_MINTDB_REFRESH_MELT: + copy->data.refresh_melt + = PERF_TALER_MINTDB_refresh_melt_copy (data->data.refresh_melt); + break; + + case PERF_TALER_MINTDB_NONE: + break; } } @@ -719,6 +744,55 @@ cmd_init (struct PERF_TALER_MINTDB_Cmd cmd[]) } break; + case PERF_TALER_MINTDB_CMD_GET_REFRESH_SESSION: + { + int ret; + ret = cmd_find (cmd, + cmd[i].details.get_refresh_session.label_hash); + if (GNUNET_SYSERR != ret) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "%d:Undefined reference to %s\n", + i, + cmd[i].details.get_refresh_session.label_hash); + return GNUNET_SYSERR; + } + if (PERF_TALER_MINTDB_REFRESH_HASH != cmd[ret].exposed.type) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "%d:Wrong type reference to %s\n", + i, + cmd[i].details.get_refresh_session.label_hash); + return GNUNET_SYSERR; + } + cmd[i].details.get_refresh_session.index_hash = ret; + } + break; + + case PERF_TALER_MINTDB_CMD_GET_REFRESH_MELT: + { + int ret; + ret = cmd_find (cmd, + cmd[i].details.get_refresh_melt.label_hash); + if (GNUNET_SYSERR != ret) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "%d:Undefined reference to %s\n", + i, + cmd[i].details.get_refresh_melt.label_hash); + return GNUNET_SYSERR; + } + if (PERF_TALER_MINTDB_REFRESH_HASH != cmd[ret].exposed.type) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "%d:Wrong type reference to %s\n", + i, + cmd[i].details.get_refresh_melt.label_hash); + return GNUNET_SYSERR; + } + cmd[i].details.get_refresh_melt.index_hash = ret; + } + break; case PERF_TALER_MINTDB_CMD_END: case PERF_TALER_MINTDB_CMD_DEBUG: @@ -733,6 +807,7 @@ cmd_init (struct PERF_TALER_MINTDB_Cmd cmd[]) default: break; + } } return GNUNET_OK; @@ -1217,15 +1292,16 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) case PERF_TALER_MINTDB_CMD_CREATE_REFRESH_SESSION: { - struct GNUNET_HashCode hash; + struct GNUNET_HashCode *hash; struct TALER_MINTDB_RefreshSession *refresh_session; + hash = GNUNET_new (struct GNUNET_HashCode); refresh_session = PERF_TALER_MINTDB_refresh_session_init (); GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, - &hash); + hash); state->plugin->create_refresh_session (state->session, state->session, - &hash, + hash, refresh_session); state->cmd[state->i].exposed.data.session_hash = hash; PERF_TALER_MINTDB_refresh_session_free (refresh_session); @@ -1235,16 +1311,15 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) case PERF_TALER_MINTDB_CMD_GET_REFRESH_SESSION: { - int hash_index; - struct GNUNET_HashCode hash; + unsigned int hash_index; + struct GNUNET_HashCode *hash; struct TALER_MINTDB_RefreshSession refresh; - hash_index = cmd_find (state->cmd, - state->cmd[state->i].details.get_refresh_session.label_hash); + hash_index = state->cmd[state->i].details.get_refresh_session.index_hash; hash = state->cmd[hash_index].exposed.data.session_hash; state->plugin->get_refresh_session (state->session, state->session, - &hash, + hash, &refresh); } break; @@ -1253,19 +1328,15 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) { int hash_index; int coin_index; - struct GNUNET_HashCode hash; + struct GNUNET_HashCode *hash; struct TALER_MINTDB_RefreshMelt *melt; struct PERF_TALER_MINTDB_Coin *coin; - hash_index = cmd_find (state->cmd, - state->cmd[state->i].details.insert_refresh_melt.label_hash); - coin_index = cmd_find (state->cmd, - state->cmd[state->i].details.insert_refresh_melt.label_coin); - GNUNET_assert (GNUNET_SYSERR != hash_index); - GNUNET_assert (GNUNET_SYSERR != coin_index); + hash_index = state->cmd[state->i].details.insert_refresh_melt.index_hash; + coin_index = state->cmd[state->i].details.insert_refresh_melt.index_coin; hash = state->cmd[hash_index].exposed.data.session_hash; coin = state->cmd[coin_index].exposed.data.coin; - melt = PERF_TALER_MINTDB_refresh_melt_init (&hash, + melt = PERF_TALER_MINTDB_refresh_melt_init (hash, coin); state->plugin->insert_refresh_melt (state->plugin->cls, state->session, @@ -1278,7 +1349,7 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) case PERF_TALER_MINTDB_CMD_GET_REFRESH_MELT: { int hash_index; - struct GNUNET_HashCode hash; + struct GNUNET_HashCode *hash; struct TALER_MINTDB_RefreshMelt melt; hash_index = cmd_find (state->cmd, @@ -1286,7 +1357,7 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) hash = state->cmd[hash_index].exposed.data.session_hash; state->plugin->get_refresh_melt (state->plugin->cls, state->session, - &hash, + hash, 1, &melt); } @@ -1296,20 +1367,17 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) { int hash_index; int denom_index; - struct GNUNET_HashCode session_hash; + struct GNUNET_HashCode *session_hash; struct TALER_MINTDB_DenominationKeyIssueInformation *denom; - hash_index = cmd_find (state->cmd, - state->cmd[state->i].details.insert_refresh_order.label_hash); - GNUNET_assert (GNUNET_SYSERR != hash_index); - denom_index = cmd_find (state->cmd, - state->cmd[state->i].details.insert_refresh_order.label_denom); + hash_index = state->cmd[state->i].details.insert_refresh_order.index_hash; + denom_index = state->cmd[state->i].details.insert_refresh_order.index_denom; GNUNET_assert (GNUNET_SYSERR != denom_index); session_hash = state->cmd[hash_index].exposed.data.session_hash; denom = state->cmd[denom_index].exposed.data.dki; state->plugin->insert_refresh_order (state->plugin->cls, state->session, - &session_hash, + session_hash, 1, &denom->denom_pub); @@ -1319,16 +1387,14 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) case PERF_TALER_MINTDB_CMD_GET_REFRESH_ORDER: { int hash_index; - struct GNUNET_HashCode hash; + struct GNUNET_HashCode *hash; struct TALER_DenominationPublicKey denom_pub; - hash_index = cmd_find (state->cmd, - state->cmd[state->i].details.get_refresh_order.label_hash); - GNUNET_assert (GNUNET_SYSERR != hash_index); + hash_index = state->cmd[state->i].details.get_refresh_order.index_hash; hash = state->cmd[hash_index].exposed.data.session_hash; state->plugin->get_refresh_order (state->plugin->cls, state->session, - &hash, + hash, 1, &denom_pub); } diff --git a/src/mintdb/perf_taler_mintdb_interpreter.h b/src/mintdb/perf_taler_mintdb_interpreter.h index 3a410fd52..5f982cbd9 100644 --- a/src/mintdb/perf_taler_mintdb_interpreter.h +++ b/src/mintdb/perf_taler_mintdb_interpreter.h @@ -450,7 +450,65 @@ _label_coin), \ PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT (_label "insert", \ _label "deposit") +/** + * Insert informations about a refresh session + * melts one coin into another + * + * @param _label the label of the command + */ +#define PERF_TALER_MINTDB_INIT_CMD_CREATE_REFRESH_SESSION(_label) \ +{ \ + .command = PERF_TALER_MINTDB_CMD_CREATE_REFRESH_SESSION, \ + .label = _label, \ + .exposed.type = PERF_TALER_MINTDB_REFRESH_HASH \ +} +/** + * Get informations about a refresh session + * + * @param _label the label of the command + * @param _label_hash the label of the hash to search + */ +#define PERF_TALER_MINTDB_INIT_CMD_GET_REFRESH_SESSION(_label, \ + _label_hash) \ +{ \ + .command = PERF_TALER_MINTDB_CMD_GET_REFRESH_SESSION, \ + .label = _label, \ + .exposed.type = PERF_TALER_MINTDB_REFRESH_MELT \ +} + +/** + * Insert a melt operation in the database + * + * @param _label the label of the command + * @param _label_hash the label of the hash of the session + * @param _label_coin the label of the coin to melt + */ +#define PERF_TALER_MINTDB_INIT_CMD_INSERT_REFRESH_MELT(_label, \ + _label_hash, \ + _label_coin), \ +{ \ + .command = PERF_TALER_MINTDB_CMD_INSERT_REFRESH_MELT, \ + .label = _label, \ + .details.insert_refresh_melt.label_hash = _label_hash, \ + .details.insert_refresh_melt.label_coin = _label_coin, \ + .exposed.type = PERF_TALER_MINTDB_NONE \ +} + +/** + * Get informations about a melt operation + * + * @param _label the label of the command + * @param _label_hash the label of the hash of the refresh session + */ +#define PERF_TALER_MINTDB_INIT_CMD_GET_REFRESH_MELT(_label, \ + _label_hash) \ +{ \ + .command = PERF_TALER_MINTDB_CMD_GET_REFRESH_MELT, \ + .label = _label, \ + .detail.get_refresh_melt.label_hash = _label_hash, \ + .exposed.type = PERF_TALER_MINTDB_NONE \ +} /** * The type of data stored in #PERF_TALER_MINTDB_Memory @@ -463,7 +521,8 @@ enum PERF_TALER_MINTDB_Type PERF_TALER_MINTDB_RESERVE, PERF_TALER_MINTDB_COIN, PERF_TALER_MINTDB_DEPOSIT, - PERF_TALER_MINTDB_REFRESH_HASH + PERF_TALER_MINTDB_REFRESH_HASH, + PERF_TALER_MINTDB_REFRESH_MELT }; @@ -491,7 +550,9 @@ struct PERF_TALER_MINTDB_Data /** #PERF_TALER_MINTDB_DENOMINATION_INFO */ struct TALER_MINTDB_DenominationKeyIssueInformation *dki; /** #PERF_TALER_MINTDB_REFRESH_HASH */ - struct GNUNET_HashCode session_hash; + struct GNUNET_HashCode *session_hash; + /** #PERF_TALER_MINTDB_REFRESH_MELT */ + struct TALER_MINTDB_RefreshMelt *refresh_melt; } data; }; @@ -1037,7 +1098,7 @@ union PERF_TALER_MINTDB_CMD_Details * The label of the coin to melt */ const char *label_coin; - const char coin; + unsigned int index_coin; } insert_refresh_melt; /** diff --git a/src/mintdb/test_perf_taler_mintdb.c b/src/mintdb/test_perf_taler_mintdb.c index 396c03cc3..4397bc71b 100644 --- a/src/mintdb/test_perf_taler_mintdb.c +++ b/src/mintdb/test_perf_taler_mintdb.c @@ -125,9 +125,11 @@ main (int argc, char ** argv) PERF_TALER_MINTDB_INIT_CMD_LOAD_ARRAY ("03 - reserve load", "03 - init withdraw loop", "02 - save reserve"), - PERF_TALER_MINTDB_INIT_CMD_INSERT_WITHDRAW ("03 - withdraw", + PERF_TALER_MINTDB_INIT_CMD_CREATE_WITHDRAW ("03 - withdraw", "03 - denomination load", "03 - reserve load"), + PERF_TALER_MINTDB_INIT_CMD_INSERT_WITHDRAW ("03 - insert withdraw", + "03 - withdraw"), PERF_TALER_MINTDB_INIT_CMD_COMMIT_TRANSACTION ("03 - commit transaction"), PERF_TALER_MINTDB_INIT_CMD_SAVE_ARRAY ("03 - coin array", "03 - init withdraw loop", @@ -145,8 +147,10 @@ main (int argc, char ** argv) PERF_TALER_MINTDB_INIT_CMD_LOAD_ARRAY ("04 - coin load", "04 - deposit init loop", "03 - coin array"), - PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT ("04 - deposit", + PERF_TALER_MINTDB_INIT_CMD_CREATE_DEPOSIT ("04 - deposit", "04 - coin load"), + PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT ("04 - insert deposit", + "04 - deposit"), PERF_TALER_MINTDB_INIT_CMD_COMMIT_TRANSACTION ("04 - commit transaction"), PERF_TALER_MINTDB_INIT_CMD_SAVE_ARRAY ("04 - deposit array", "04 - deposit init loop",