From: Miod Vallat Date: Wed, 12 Feb 2025 11:45:27 +0000 (+0100) Subject: Disable read ahead in LMDB. X-Git-Tag: dnsdist-2.0.0-alpha1~100^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2eaf1e25e42dac6a9d2d62030d220a66fe3c8845;p=thirdparty%2Fpdns.git Disable read ahead in LMDB. This contributes to not degrading performance too much when the system memory is almost completely used, by preventing page thrashing due to the read ahead behaviour of the system. --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index d75ec27687..164192a8a3 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -738,7 +738,7 @@ LMDBBackend::LMDBBackend(const std::string& suffix) throw std::runtime_error("Somehow, we are not at schema version 5. Giving up"); } - d_tdomains = std::make_shared(getMDBEnv(getArg("filename").c_str(), MDB_NOSUBDIR | d_asyncFlag, 0600, mapSize), "domains_v5"); + d_tdomains = std::make_shared(getMDBEnv(getArg("filename").c_str(), MDB_NOSUBDIR | MDB_NORDAHEAD | d_asyncFlag, 0600, mapSize), "domains_v5"); d_tmeta = std::make_shared(d_tdomains->getEnv(), "metadata_v5"); d_tkdb = std::make_shared(d_tdomains->getEnv(), "keydata_v5"); d_ttsig = std::make_shared(d_tdomains->getEnv(), "tsig_v5"); @@ -800,7 +800,7 @@ LMDBBackend::LMDBBackend(const std::string& suffix) } if (!opened) { - d_tdomains = std::make_shared(getMDBEnv(getArg("filename").c_str(), MDB_NOSUBDIR | d_asyncFlag, 0600, mapSize), "domains_v5"); + d_tdomains = std::make_shared(getMDBEnv(getArg("filename").c_str(), MDB_NOSUBDIR | MDB_NORDAHEAD | d_asyncFlag, 0600, mapSize), "domains_v5"); d_tmeta = std::make_shared(d_tdomains->getEnv(), "metadata_v5"); d_tkdb = std::make_shared(d_tdomains->getEnv(), "keydata_v5"); d_ttsig = std::make_shared(d_tdomains->getEnv(), "tsig_v5"); @@ -1254,7 +1254,7 @@ std::shared_ptr LMDBBackend::getRecordsRWTran auto& shard = d_trecords[id % s_shards]; if (!shard.env) { shard.env = getMDBEnv((getArg("filename") + "-" + std::to_string(id % s_shards)).c_str(), - MDB_NOSUBDIR | d_asyncFlag, 0600); + MDB_NOSUBDIR | MDB_NORDAHEAD | d_asyncFlag, 0600); shard.dbi = shard.env->openDB("records_v5", MDB_CREATE); } auto ret = std::make_shared(shard.env->getRWTransaction()); @@ -1271,7 +1271,7 @@ std::shared_ptr LMDBBackend::getRecordsROTran throw DBException("attempting to start nested transaction without open parent env"); } shard.env = getMDBEnv((getArg("filename") + "-" + std::to_string(id % s_shards)).c_str(), - MDB_NOSUBDIR | d_asyncFlag, 0600); + MDB_NOSUBDIR | MDB_NORDAHEAD | d_asyncFlag, 0600); shard.dbi = shard.env->openDB("records_v5", MDB_CREATE); }