mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-04 11:15:56 +00:00
fix node size estimation (#4536)
Fix a bug in the `NODE_SIZE` auto-detection feature in `Config.cpp`. Specifically, this patch corrects the calculation for the total amount of RAM available, which was previously returned in bytes, but is now being returned in units of the system's memory unit. Additionally, the patch adjusts the node size based on the number of available hardware threads of execution.
This commit is contained in:
@@ -68,10 +68,8 @@ namespace detail {
|
||||
[[nodiscard]] std::uint64_t
|
||||
getMemorySize()
|
||||
{
|
||||
struct sysinfo si;
|
||||
|
||||
if (sysinfo(&si) == 0)
|
||||
return static_cast<std::uint64_t>(si.totalram);
|
||||
if (struct sysinfo si; sysinfo(&si) == 0)
|
||||
return static_cast<std::uint64_t>(si.totalram) * si.mem_unit;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -128,7 +126,7 @@ sizedItems
|
||||
{SizedItem::lgrDBCache, {{ 4, 8, 16, 32, 128 }}},
|
||||
{SizedItem::openFinalLimit, {{ 8, 16, 32, 64, 128 }}},
|
||||
{SizedItem::burstSize, {{ 4, 8, 16, 32, 48 }}},
|
||||
{SizedItem::ramSizeGB, {{ 8, 12, 16, 24, 32 }}},
|
||||
{SizedItem::ramSizeGB, {{ 6, 8, 12, 24, 0 }}},
|
||||
{SizedItem::accountIdCacheSize, {{ 20047, 50053, 77081, 150061, 300007 }}}
|
||||
}};
|
||||
|
||||
@@ -265,7 +263,8 @@ getEnvVar(char const* name)
|
||||
}
|
||||
|
||||
Config::Config()
|
||||
: j_(beast::Journal::getNullSink()), ramSize_(detail::getMemorySize())
|
||||
: j_(beast::Journal::getNullSink())
|
||||
, ramSize_(detail::getMemorySize() / (1024 * 1024 * 1024))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -290,22 +289,18 @@ Config::setupControl(bool bQuiet, bool bSilent, bool bStandalone)
|
||||
threshold.second.begin(),
|
||||
threshold.second.end(),
|
||||
[this](std::size_t limit) {
|
||||
return (ramSize_ / (1024 * 1024 * 1024)) < limit;
|
||||
return (limit == 0) || (ramSize_ < limit);
|
||||
});
|
||||
|
||||
assert(ns != threshold.second.end());
|
||||
|
||||
if (ns != threshold.second.end())
|
||||
NODE_SIZE = std::distance(threshold.second.begin(), ns);
|
||||
|
||||
// Adjust the size based on the number of hardware threads of
|
||||
// execution available to us:
|
||||
if (auto const hc = std::thread::hardware_concurrency())
|
||||
{
|
||||
if (hc == 1)
|
||||
NODE_SIZE = 0;
|
||||
|
||||
if (hc < 4)
|
||||
NODE_SIZE = std::min<std::size_t>(NODE_SIZE, 1);
|
||||
}
|
||||
if (auto const hc = std::thread::hardware_concurrency(); hc != 0)
|
||||
NODE_SIZE = std::min<std::size_t>(hc / 2, NODE_SIZE);
|
||||
}
|
||||
|
||||
assert(NODE_SIZE <= 4);
|
||||
|
||||
Reference in New Issue
Block a user