Listing all keys in the wallet was consuming >75% of profiling time. Displaying data in microseconds and doing more iterations.
This commit is contained in:
parent
399bff5c76
commit
e2bfd293d7
4 changed files with 31 additions and 24 deletions
|
|
@ -478,7 +478,9 @@ TEST (system, generate_send_existing)
|
|||
rai::transaction transaction (system.wallet (0)->store.environment, nullptr, false);
|
||||
ASSERT_FALSE (system.nodes [0]->store.account_get (transaction, rai::test_genesis_key.pub, info1));
|
||||
}
|
||||
system.generate_send_existing (*system.nodes [0]);
|
||||
std::vector <rai::account> accounts;
|
||||
accounts.push_back (rai::test_genesis_key.pub);
|
||||
system.generate_send_existing (*system.nodes [0], accounts);
|
||||
rai::account_info info2;
|
||||
{
|
||||
rai::transaction transaction (system.wallet (0)->store.environment, nullptr, false);
|
||||
|
|
@ -512,7 +514,9 @@ TEST (system, generate_send_new)
|
|||
++iterator1;
|
||||
ASSERT_EQ (system.nodes [0]->store.latest_end (), iterator1);
|
||||
}
|
||||
system.generate_send_new (*system.nodes [0]);
|
||||
std::vector <rai::account> accounts;
|
||||
accounts.push_back (rai::test_genesis_key.pub);
|
||||
system.generate_send_new (*system.nodes [0], accounts);
|
||||
rai::account new_account (0);
|
||||
{
|
||||
rai::transaction transaction (system.nodes [0]->store.environment, nullptr, false);
|
||||
|
|
|
|||
|
|
@ -94,13 +94,14 @@ public:
|
|||
{
|
||||
auto count_l (count - 1);
|
||||
count = count_l - 1;
|
||||
system.generate_activity (*node);
|
||||
system.generate_activity (*node, accounts);
|
||||
if (count_l > 0)
|
||||
{
|
||||
auto this_l (shared_from_this ());
|
||||
node->service.add (std::chrono::system_clock::now () + std::chrono::milliseconds (wait), [this_l] () {this_l->run ();});
|
||||
}
|
||||
}
|
||||
std::vector <rai::account> accounts;
|
||||
uint32_t count;
|
||||
uint32_t wait;
|
||||
std::shared_ptr <rai::node> node;
|
||||
|
|
@ -124,24 +125,23 @@ void rai::system::generate_usage_traffic (uint32_t count_a, uint32_t wait_a, siz
|
|||
generate->run ();
|
||||
}
|
||||
|
||||
void rai::system::generate_activity (rai::node & node_a)
|
||||
void rai::system::generate_activity (rai::node & node_a, std::vector <rai::account> & accounts_a)
|
||||
{
|
||||
auto what (random_pool.GenerateByte ());
|
||||
if (what < 0xc0)
|
||||
{
|
||||
generate_send_existing (node_a);
|
||||
generate_send_existing (node_a, accounts_a);
|
||||
}
|
||||
else
|
||||
{
|
||||
generate_send_new (node_a);
|
||||
generate_send_new (node_a, accounts_a);
|
||||
}
|
||||
}
|
||||
|
||||
rai::account rai::system::get_random_account (MDB_txn * transaction_a, rai::node & node_a)
|
||||
rai::account rai::system::get_random_account (std::vector <rai::account> & accounts_a)
|
||||
{
|
||||
auto accounts (wallet (0)->store.accounts (transaction_a));
|
||||
auto index (random_pool.GenerateWord32 (0, accounts.size () - 1));
|
||||
auto result (accounts [index]);
|
||||
auto index (random_pool.GenerateWord32 (0, accounts_a.size () - 1));
|
||||
auto result (accounts_a [index]);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ rai::uint128_t rai::system::get_random_amount (MDB_txn * transaction_a, rai::nod
|
|||
return result;
|
||||
}
|
||||
|
||||
void rai::system::generate_send_existing (rai::node & node_a)
|
||||
void rai::system::generate_send_existing (rai::node & node_a, std::vector <rai::account> & accounts_a)
|
||||
{
|
||||
rai::uint128_t amount;
|
||||
rai::account destination;
|
||||
|
|
@ -172,13 +172,13 @@ void rai::system::generate_send_existing (rai::node & node_a)
|
|||
}
|
||||
assert (entry != node_a.store.latest_end ());
|
||||
destination = rai::account (entry->first);
|
||||
source = get_random_account (transaction, node_a);
|
||||
source = get_random_account (accounts_a);
|
||||
amount = get_random_amount (transaction, node_a, source);
|
||||
}
|
||||
wallet (0)->send_sync (source, destination, amount);
|
||||
}
|
||||
|
||||
void rai::system::generate_send_new (rai::node & node_a)
|
||||
void rai::system::generate_send_new (rai::node & node_a, std::vector <rai::account> & accounts_a)
|
||||
{
|
||||
assert (node_a.wallets.items.size () == 1);
|
||||
rai::keypair key;
|
||||
|
|
@ -186,26 +186,30 @@ void rai::system::generate_send_new (rai::node & node_a)
|
|||
rai::account source;
|
||||
{
|
||||
rai::transaction transaction (node_a.store.environment, nullptr, false);
|
||||
source = get_random_account (transaction, node_a);
|
||||
source = get_random_account (accounts_a);
|
||||
amount = get_random_amount (transaction, node_a, source);
|
||||
}
|
||||
accounts_a.push_back (key.pub);
|
||||
node_a.wallets.items.begin ()->second->insert (key.prv);
|
||||
node_a.wallets.items.begin ()->second->send_sync (source, key.pub, amount);
|
||||
}
|
||||
|
||||
void rai::system::generate_mass_activity (uint32_t count_a, rai::node & node_a)
|
||||
{
|
||||
std::vector <rai::account> accounts;
|
||||
wallet (0)->insert (rai::test_genesis_key.prv);
|
||||
accounts.push_back (rai::test_genesis_key.pub);
|
||||
auto previous (std::chrono::system_clock::now ());
|
||||
for (uint32_t i (0); i < count_a; ++i)
|
||||
{
|
||||
if ((i & 0x3ff) == 0)
|
||||
if ((i & 0xfff) == 0)
|
||||
{
|
||||
auto now (std::chrono::system_clock::now ());
|
||||
auto ms (std::chrono::duration_cast <std::chrono::milliseconds> (now - previous).count ());
|
||||
std::cerr << boost::str (boost::format ("Mass activity iteration %1% ms %2% ms/t %3%\n") % i % ms % (ms / 256));
|
||||
auto us (std::chrono::duration_cast <std::chrono::microseconds> (now - previous).count ());
|
||||
std::cerr << boost::str (boost::format ("Mass activity iteration %1% us %2% us/t %3%\n") % i % us % (us / 256));
|
||||
previous = now;
|
||||
}
|
||||
generate_activity (node_a);
|
||||
generate_activity (node_a, accounts);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,14 +9,14 @@ class system
|
|||
public:
|
||||
system (uint16_t, size_t);
|
||||
~system ();
|
||||
void generate_activity (rai::node &);
|
||||
void generate_activity (rai::node &, std::vector <rai::account> &);
|
||||
void generate_mass_activity (uint32_t, rai::node &);
|
||||
void generate_usage_traffic (uint32_t, uint32_t, size_t);
|
||||
void generate_usage_traffic (uint32_t, uint32_t);
|
||||
rai::account get_random_account (MDB_txn *, rai::node &);
|
||||
rai::account get_random_account (std::vector <rai::account> &);
|
||||
rai::uint128_t get_random_amount (MDB_txn *, rai::node &, rai::account const &);
|
||||
void generate_send_new (rai::node &);
|
||||
void generate_send_existing (rai::node &);
|
||||
void generate_send_new (rai::node &, std::vector <rai::account> &);
|
||||
void generate_send_existing (rai::node &, std::vector <rai::account> &);
|
||||
std::shared_ptr <rai::wallet> wallet (size_t);
|
||||
rai::account account (MDB_txn *, size_t);
|
||||
void poll ();
|
||||
|
|
|
|||
|
|
@ -183,8 +183,7 @@ int main (int argc, char * const * argv)
|
|||
else if (vm.count ("debug_mass_activity"))
|
||||
{
|
||||
rai::system system (24000, 1);
|
||||
system.wallet (0)->insert (rai::test_genesis_key.prv);
|
||||
size_t count (10000);
|
||||
size_t count (1000000);
|
||||
system.generate_mass_activity (count, *system.nodes [0]);
|
||||
}
|
||||
else if (vm.count ("debug_profile_kdf"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue