mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-10 12:43:30 +01:00
Merge bitcoin/bitcoin#30396: random: add benchmarks and drop unnecessary Shuffle function
6ecda04fefrandom: drop ad-hoc Shuffle in favor of std::shuffle (Pieter Wuille)da28a26aaebench random: benchmark more functions, and add InsecureRandomContext (Pieter Wuille)0a9bbc64c1random bench refactor: move to new bench/random.cpp (Pieter Wuille) Pull request description: This adds benchmarks for various operations on `FastRandomContext` and `InsecureRandomContext`, and then removes the ad-hoc `Shuffle` functions, now that it appears that standard library `std::shuffle` has comparable performance. The other reason for keeping `Shuffle`, namely the fact that libstdc++ used self-move (which debug mode panics on) has been fixed as well (see https://github.com/bitcoin/bitcoin/pull/29625#discussion_r1658344049). ACKs for top commit: achow101: ACK6ecda04fefhodlinator: ACK6ecda04fefdergoegge: Code review ACK6ecda04fefTree-SHA512: 2560b7312410581ff2b9bd0716e0f1558d910b5eadb9544785c972384985ac0f11f72d6b2797cfe2e7eb71fa57c30cffd98cc009cb4ee87a18b1524694211417
This commit is contained in:
@@ -415,7 +415,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
|
||||
if (pszDest) {
|
||||
std::vector<CService> resolved{Lookup(pszDest, default_port, fNameLookup && !HaveNameProxy(), 256)};
|
||||
if (!resolved.empty()) {
|
||||
Shuffle(resolved.begin(), resolved.end(), FastRandomContext());
|
||||
std::shuffle(resolved.begin(), resolved.end(), FastRandomContext());
|
||||
// If the connection is made by name, it can be the case that the name resolves to more than one address.
|
||||
// We don't want to connect any more of them if we are already connected to one
|
||||
for (const auto& r : resolved) {
|
||||
@@ -2212,7 +2212,7 @@ void CConnman::ThreadDNSAddressSeed()
|
||||
|
||||
FastRandomContext rng;
|
||||
std::vector<std::string> seeds = m_params.DNSSeeds();
|
||||
Shuffle(seeds.begin(), seeds.end(), rng);
|
||||
std::shuffle(seeds.begin(), seeds.end(), rng);
|
||||
int seeds_right_now = 0; // Number of seeds left before testing if we have enough connections
|
||||
|
||||
if (gArgs.GetBoolArg("-forcednsseed", DEFAULT_FORCEDNSSEED)) {
|
||||
@@ -2439,7 +2439,7 @@ bool CConnman::MultipleManualOrFullOutboundConns(Network net) const
|
||||
bool CConnman::MaybePickPreferredNetwork(std::optional<Network>& network)
|
||||
{
|
||||
std::array<Network, 5> nets{NET_IPV4, NET_IPV6, NET_ONION, NET_I2P, NET_CJDNS};
|
||||
Shuffle(nets.begin(), nets.end(), FastRandomContext());
|
||||
std::shuffle(nets.begin(), nets.end(), FastRandomContext());
|
||||
|
||||
LOCK(m_nodes_mutex);
|
||||
for (const auto net : nets) {
|
||||
|
||||
Reference in New Issue
Block a user