Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
node
caches.cpp
Go to the documentation of this file.
1
// Copyright (c) 2021-present 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 <
node/caches.h
>
6
7
#include <
common/args.h
>
8
#include <
common/system.h
>
9
#include <
index/txindex.h
>
10
#include <
index/txospenderindex.h
>
11
#include <
kernel/caches.h
>
12
#include <logging.h>
13
#include <
node/interface_ui.h
>
14
#include <
tinyformat.h
>
15
#include <
util/byte_units.h
>
16
17
#include <algorithm>
18
#include <string>
19
20
// Unlike for the UTXO database, for the txindex scenario the leveldb cache make
21
// a meaningful difference: https://github.com/bitcoin/bitcoin/pull/8273#issuecomment-229601991
23
static
constexpr
size_t
MAX_TX_INDEX_CACHE
{1024_MiB};
25
static
constexpr
size_t
MAX_FILTER_INDEX_CACHE
{1024_MiB};
27
static
constexpr
size_t
MAX_TXOSPENDER_INDEX_CACHE
{1024_MiB};
29
static
constexpr
size_t
MAX_32BIT_DBCACHE
{1024_MiB};
31
static
constexpr
size_t
HIGH_DEFAULT_DBCACHE
{1024_MiB};
33
static
constexpr
uint64_t
HIGH_DEFAULT_DBCACHE_MIN_TOTAL_RAM
{4096ULL << 20};
34
35
namespace
node
{
36
size_t
GetDefaultDBCache
()
37
{
38
if
constexpr
(
sizeof
(
void
*) >= 8) {
39
if
(
GetTotalRAM
().value_or(0) >=
HIGH_DEFAULT_DBCACHE_MIN_TOTAL_RAM
) {
40
return
HIGH_DEFAULT_DBCACHE
;
41
}
42
}
43
return
DEFAULT_DB_CACHE
;
44
}
45
46
size_t
CalculateDbCacheBytes
(
const
ArgsManager
&
args
)
47
{
48
if
(
auto
db_cache{
args
.GetIntArg(
"-dbcache"
)}) {
49
if
(*db_cache < 0) db_cache = 0;
50
const
uint64_t db_cache_bytes{
SaturatingLeftShift<uint64_t>
(*db_cache, 20)};
51
constexpr
auto
max_db_cache{
sizeof
(
void
*) == 4 ?
MAX_32BIT_DBCACHE
: std::numeric_limits<size_t>::max()};
52
return
std::max<size_t>(
MIN_DB_CACHE
, std::min<uint64_t>(db_cache_bytes, max_db_cache));
53
}
54
return
GetDefaultDBCache
();
55
}
56
57
CacheSizes
CalculateCacheSizes
(
const
ArgsManager
&
args
,
size_t
n_indexes)
58
{
59
size_t
total_cache{
CalculateDbCacheBytes
(
args
)};
60
61
IndexCacheSizes
index_sizes;
62
index_sizes.
tx_index
= std::min(total_cache / 8,
args
.GetBoolArg(
"-txindex"
,
DEFAULT_TXINDEX
) ?
MAX_TX_INDEX_CACHE
: 0);
63
total_cache -= index_sizes.
tx_index
;
64
index_sizes.
txospender_index
= std::min(total_cache / 8,
args
.GetBoolArg(
"-txospenderindex"
,
DEFAULT_TXOSPENDERINDEX
) ?
MAX_TXOSPENDER_INDEX_CACHE
: 0);
65
total_cache -= index_sizes.
txospender_index
;
66
if
(n_indexes > 0) {
67
size_t
max_cache = std::min(total_cache / 8,
MAX_FILTER_INDEX_CACHE
);
68
index_sizes.
filter_index
= max_cache / n_indexes;
69
total_cache -= index_sizes.
filter_index
* n_indexes;
70
}
71
return
{index_sizes,
kernel::CacheSizes
{total_cache}};
72
}
73
74
void
LogOversizedDbCache
(
const
ArgsManager
&
args
)
noexcept
75
{
76
if
(
const
auto
total_ram{
GetTotalRAM
()}) {
77
const
size_t
db_cache{
CalculateDbCacheBytes
(
args
)};
78
if
(
ShouldWarnOversizedDbCache
(db_cache, *total_ram)) {
79
InitWarning
(
bilingual_str
{
tfm::format
(
_
(
"A %zu MiB dbcache may be too large for a system memory of only %zu MiB."
),
80
db_cache >> 20, *total_ram >> 20)});
81
}
82
}
83
}
84
}
// namespace node
args.h
args
ArgsManager & args
Definition
bitcoind.cpp:277
byte_units.h
MAX_32BIT_DBCACHE
static constexpr size_t MAX_32BIT_DBCACHE
Maximum dbcache size on 32-bit systems.
Definition
caches.cpp:29
HIGH_DEFAULT_DBCACHE
static constexpr size_t HIGH_DEFAULT_DBCACHE
Larger default dbcache on 64-bit systems with enough RAM.
Definition
caches.cpp:31
MAX_TXOSPENDER_INDEX_CACHE
static constexpr size_t MAX_TXOSPENDER_INDEX_CACHE
Max memory allocated to tx spenderindex DB specific cache in bytes.
Definition
caches.cpp:27
HIGH_DEFAULT_DBCACHE_MIN_TOTAL_RAM
static constexpr uint64_t HIGH_DEFAULT_DBCACHE_MIN_TOTAL_RAM
Minimum detected RAM required for HIGH_DEFAULT_DBCACHE.
Definition
caches.cpp:33
MAX_FILTER_INDEX_CACHE
static constexpr size_t MAX_FILTER_INDEX_CACHE
Max memory allocated to all block filter index caches combined in bytes.
Definition
caches.cpp:25
MAX_TX_INDEX_CACHE
static constexpr size_t MAX_TX_INDEX_CACHE
Max memory allocated to tx index DB specific cache in bytes.
Definition
caches.cpp:23
ArgsManager
Definition
args.h:103
GetTotalRAM
std::optional< size_t > GetTotalRAM()
Return the total RAM available on the current system, if detectable.
Definition
system.cpp:114
InitWarning
void InitWarning(const bilingual_str &str)
Show warning message.
Definition
interface_ui.cpp:80
interface_ui.h
caches.h
node
Definition
messages.h:21
node::ShouldWarnOversizedDbCache
constexpr bool ShouldWarnOversizedDbCache(size_t dbcache, size_t total_ram) noexcept
Definition
caches.h:32
node::CalculateDbCacheBytes
size_t CalculateDbCacheBytes(const ArgsManager &args)
Definition
caches.cpp:46
node::CalculateCacheSizes
CacheSizes CalculateCacheSizes(const ArgsManager &args, size_t n_indexes)
Definition
caches.cpp:57
node::LogOversizedDbCache
void LogOversizedDbCache(const ArgsManager &args) noexcept
Definition
caches.cpp:74
node::GetDefaultDBCache
size_t GetDefaultDBCache()
Definition
caches.cpp:36
tinyformat::format
void format(std::ostream &out, FormatStringCheck< sizeof...(Args)> fmt, const Args &... args)
Format list of arguments to the stream according to given format string.
Definition
tinyformat.h:1079
caches.h
MIN_DB_CACHE
static constexpr size_t MIN_DB_CACHE
min. -dbcache (bytes)
Definition
caches.h:16
DEFAULT_DB_CACHE
static constexpr size_t DEFAULT_DB_CACHE
-dbcache default (bytes)
Definition
caches.h:18
SaturatingLeftShift
constexpr T SaturatingLeftShift(T input, unsigned shift) noexcept
Left bit shift with safe minimum and maximum values.
Definition
overflow.h:86
bilingual_str
Bilingual messages:
Definition
translation.h:24
kernel::CacheSizes
Definition
caches.h:23
node::CacheSizes
Definition
caches.h:27
node::IndexCacheSizes
Definition
caches.h:22
node::IndexCacheSizes::tx_index
size_t tx_index
Definition
caches.h:23
node::IndexCacheSizes::filter_index
size_t filter_index
Definition
caches.h:24
node::IndexCacheSizes::txospender_index
size_t txospender_index
Definition
caches.h:25
system.h
tinyformat.h
_
consteval auto _(util::TranslatedLiteral str)
Definition
translation.h:79
txindex.h
DEFAULT_TXINDEX
static constexpr bool DEFAULT_TXINDEX
Definition
txindex.h:19
txospenderindex.h
DEFAULT_TXOSPENDERINDEX
static constexpr bool DEFAULT_TXOSPENDERINDEX
Definition
txospenderindex.h:24
Generated on
for Bitcoin Core by
1.17.0