Bitcoin Core
32.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bench
asmap.cpp
Go to the documentation of this file.
1
// Copyright (c) The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
util/asmap.h
>
6
7
#include <
bench/bench.h
>
8
#include <
netaddress.h
>
9
#include <
netbase.h
>
10
#include <
netgroup.h
>
11
#include <node/data/ip_asn.dat.h>
12
#include <random.h>
13
#include <
util/check.h
>
14
15
#include <algorithm>
16
#include <array>
17
#include <cstddef>
18
#include <optional>
19
#include <span>
20
#include <string>
21
#include <vector>
22
23
static
void
BenchGetMappedAS
(
benchmark::Bench
& bench, std::span<const CNetAddr> addrs,
bool
check =
true
)
24
{
25
std::span<const std::byte> asmap{node::data::ip_asn};
26
assert
(!asmap.empty() &&
CheckStandardAsmap
(asmap));
27
auto
netgroupman{
NetGroupManager::WithEmbeddedAsmap
(asmap)};
28
29
bench.
batch
(addrs.size()).
run
([&] {
30
for
(
const
CNetAddr
& addr : addrs) {
31
// The embedded ASMap file might change over time and cause some
32
// addresses to become unmapped. We check the mapping to ensure
33
// the addresses are actually mapped.
34
assert
((netgroupman.GetMappedAS(addr) > 0) == check);
35
}
36
});
37
}
38
39
static
CNetAddr
LookupAddr
(
const
std::string& address) {
return
LookupHost
(address,
/*fAllowLookup=*/
false
).value(); }
40
41
static
void
ASMapGetMappedASQuad9v4
(
benchmark::Bench
& bench)
42
{
43
std::vector<CNetAddr> addrs{
LookupAddr
(
"9.9.9.9"
)};
44
BenchGetMappedAS
(bench, addrs);
45
}
46
47
static
void
ASMapGetMappedASQuad9v6
(
benchmark::Bench
& bench)
48
{
49
std::vector<CNetAddr> addrs{
LookupAddr
(
"2620:fe::fe"
)};
50
BenchGetMappedAS
(bench, addrs);
51
}
52
53
static
void
ASMapGetMappedASCloudflarev4
(
benchmark::Bench
& bench)
54
{
55
std::vector<CNetAddr> addrs{
LookupAddr
(
"1.1.1.1"
)};
56
BenchGetMappedAS
(bench, addrs);
57
}
58
59
static
void
ASMapGetMappedASCloudflarev6
(
benchmark::Bench
& bench)
60
{
61
std::vector<CNetAddr> addrs{
LookupAddr
(
"2606:4700:4700::1111"
)};
62
BenchGetMappedAS
(bench, addrs);
63
}
64
65
static
void
ASMapGetMappedASGooglev4
(
benchmark::Bench
& bench)
66
{
67
std::vector<CNetAddr> addrs{
LookupAddr
(
"8.8.8.8"
)};
68
BenchGetMappedAS
(bench, addrs);
69
}
70
71
static
void
ASMapGetMappedASGooglev6
(
benchmark::Bench
& bench)
72
{
73
std::vector<CNetAddr> addrs{
LookupAddr
(
"2001:4860:4860::8888"
)};
74
BenchGetMappedAS
(bench, addrs);
75
}
76
77
static
void
ASMapGetMappedASUnmappedv4
(
benchmark::Bench
& bench)
78
{
79
// Reserved as per RFC 5737 (unmapped)
80
std::vector<CNetAddr> addrs{
LookupAddr
(
"203.0.113.0"
)};
81
BenchGetMappedAS
(bench, addrs,
/*check=*/
false
);
82
}
83
84
static
void
ASMapGetMappedASUnmappedv6
(
benchmark::Bench
& bench)
85
{
86
// Reserved as per RFC 9637 (unmapped)
87
std::vector<CNetAddr> addrs{
LookupAddr
(
"3fff::1"
)};
88
BenchGetMappedAS
(bench, addrs,
/*check=*/
false
);
89
}
90
91
static
void
ASMapGetMappedASMulti
(
benchmark::Bench
& bench)
92
{
93
// A list of 25 IPv4 and 25 IPv6 addresses randomly sampled across
94
// 50 ASNs to have a mix of different lookup times. These have been
95
// masked to /24 and /64 respectively. Some of these could become
96
// unmapped when updating the embedded ASMap file, which will cause
97
// the benchmarks to assert and the IPs will need to be changed out.
98
std::array addrs{
99
LookupAddr
(
"5.8.10.1"
),
100
LookupAddr
(
"14.53.20.1"
),
101
LookupAddr
(
"34.86.160.1"
),
102
LookupAddr
(
"67.68.205.1"
),
103
LookupAddr
(
"68.163.58.1"
),
104
LookupAddr
(
"69.138.189.1"
),
105
LookupAddr
(
"72.211.58.1"
),
106
LookupAddr
(
"73.124.158.1"
),
107
LookupAddr
(
"77.179.43.1"
),
108
LookupAddr
(
"80.79.125.1"
),
109
LookupAddr
(
"81.217.170.1"
),
110
LookupAddr
(
"82.216.149.1"
),
111
LookupAddr
(
"84.52.201.1"
),
112
LookupAddr
(
"87.184.174.1"
),
113
LookupAddr
(
"90.221.151.1"
),
114
LookupAddr
(
"95.31.136.1"
),
115
LookupAddr
(
"99.234.174.1"
),
116
LookupAddr
(
"105.98.199.1"
),
117
LookupAddr
(
"146.190.174.1"
),
118
LookupAddr
(
"154.16.157.1"
),
119
LookupAddr
(
"172.81.183.1"
),
120
LookupAddr
(
"173.24.74.1"
),
121
LookupAddr
(
"195.99.226.1"
),
122
LookupAddr
(
"213.197.14.1"
),
123
LookupAddr
(
"220.255.248.1"
),
124
125
LookupAddr
(
"2001:16a2:c0b0:58b7::1"
),
126
LookupAddr
(
"2001:67c:e60:c0c::1"
),
127
LookupAddr
(
"2001:99a:213:27f0::1"
),
128
LookupAddr
(
"2001:9e8:894b:be00::1"
),
129
LookupAddr
(
"2406:2d40:1ebc:3508::1"
),
130
LookupAddr
(
"2600:1015:a020:1e00::1"
),
131
LookupAddr
(
"2600:1700:4228:a800::1"
),
132
LookupAddr
(
"2601:603:5000:3309::1"
),
133
LookupAddr
(
"2601:cd:ce01:9610::1"
),
134
LookupAddr
(
"2603:800c:25f0:8350::1"
),
135
LookupAddr
(
"2604:3d09:f89:d100::1"
),
136
LookupAddr
(
"2607:fb90:236f:821f::1"
),
137
LookupAddr
(
"2800:2331:5440:ba3::1"
),
138
LookupAddr
(
"2a00:16e0:1012:c108::1"
),
139
LookupAddr
(
"2a00:23c6:9d44:7801::1"
),
140
LookupAddr
(
"2a00:79c0:609:4900::1"
),
141
LookupAddr
(
"2a01:4f8:13a:1f8d::1"
),
142
LookupAddr
(
"2a01:e0a:8a3:ab90::1"
),
143
LookupAddr
(
"2a02:810b:449e:c900::1"
),
144
LookupAddr
(
"2a02:8308:20d:e800::1"
),
145
LookupAddr
(
"2a0a:ef40:331:4401::1"
),
146
LookupAddr
(
"2a0c:5a86:a002:e700::1"
),
147
LookupAddr
(
"2a10:3781:1d7:1::1"
),
148
LookupAddr
(
"2a12:26c0:3303:a100::1"
),
149
LookupAddr
(
"2a12:a800:2:1::1"
),
150
};
151
152
FastRandomContext
rng
{
/*fDeterministic=*/
true
};
153
std::ranges::shuffle(addrs,
rng
);
154
155
BenchGetMappedAS
(bench, addrs,
/*check=*/
true
);
156
}
157
158
BENCHMARK
(
ASMapGetMappedASQuad9v4
);
159
BENCHMARK
(
ASMapGetMappedASQuad9v6
);
160
BENCHMARK
(
ASMapGetMappedASCloudflarev4
);
161
BENCHMARK
(
ASMapGetMappedASCloudflarev6
);
162
BENCHMARK
(
ASMapGetMappedASGooglev4
);
163
BENCHMARK
(
ASMapGetMappedASGooglev6
);
164
BENCHMARK
(
ASMapGetMappedASUnmappedv4
);
165
BENCHMARK
(
ASMapGetMappedASUnmappedv6
);
166
BENCHMARK
(
ASMapGetMappedASMulti
);
asmap.h
LookupAddr
static CNetAddr LookupAddr(const std::string &address)
Definition
asmap.cpp:39
ASMapGetMappedASUnmappedv4
static void ASMapGetMappedASUnmappedv4(benchmark::Bench &bench)
Definition
asmap.cpp:77
ASMapGetMappedASQuad9v4
static void ASMapGetMappedASQuad9v4(benchmark::Bench &bench)
Definition
asmap.cpp:41
ASMapGetMappedASCloudflarev4
static void ASMapGetMappedASCloudflarev4(benchmark::Bench &bench)
Definition
asmap.cpp:53
BenchGetMappedAS
static void BenchGetMappedAS(benchmark::Bench &bench, std::span< const CNetAddr > addrs, bool check=true)
Definition
asmap.cpp:23
ASMapGetMappedASUnmappedv6
static void ASMapGetMappedASUnmappedv6(benchmark::Bench &bench)
Definition
asmap.cpp:84
ASMapGetMappedASCloudflarev6
static void ASMapGetMappedASCloudflarev6(benchmark::Bench &bench)
Definition
asmap.cpp:59
ASMapGetMappedASGooglev4
static void ASMapGetMappedASGooglev4(benchmark::Bench &bench)
Definition
asmap.cpp:65
ASMapGetMappedASGooglev6
static void ASMapGetMappedASGooglev6(benchmark::Bench &bench)
Definition
asmap.cpp:71
ASMapGetMappedASMulti
static void ASMapGetMappedASMulti(benchmark::Bench &bench)
Definition
asmap.cpp:91
ASMapGetMappedASQuad9v6
static void ASMapGetMappedASQuad9v6(benchmark::Bench &bench)
Definition
asmap.cpp:47
bench.h
BENCHMARK
#define BENCHMARK(n)
Definition
bench.h:69
check.h
CNetAddr
Network address.
Definition
netaddress.h:113
FastRandomContext
Fast randomness source.
Definition
random.h:386
NetGroupManager::WithEmbeddedAsmap
static NetGroupManager WithEmbeddedAsmap(std::span< const std::byte > asmap)
Definition
netgroup.h:24
ankerl::nanobench::Bench
Main entry point to nanobench's benchmarking facility.
Definition
nanobench.h:649
ankerl::nanobench::Bench::run
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition
nanobench.h:1308
ankerl::nanobench::Bench::batch
Bench & batch(T b) noexcept
Sets the batch size.
Definition
nanobench.h:1332
netaddress.h
LookupHost
std::vector< CNetAddr > LookupHost(const std::string &name, unsigned int nMaxSolutions, bool fAllowLookup, DNSLookupFn dns_lookup_function)
Resolve a host string to its corresponding network addresses.
Definition
netbase.cpp:173
netbase.h
netgroup.h
rng
FastRandomContext rng
Definition
dbwrapper.cpp:413
CheckStandardAsmap
bool CheckStandardAsmap(const std::span< const std::byte > data)
Provides a safe interface for validating ASMap data before use.
Definition
asmap.cpp:308
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.18.0