caches.h raw
1 // Copyright (c) 2024-present The Limenka 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 #ifndef LIMENKA_KERNEL_CACHES_H
6 #define LIMENKA_KERNEL_CACHES_H
7
8 #include <util/byte_units.h>
9
10 #include <algorithm>
11
12 //! Suggested default amount of cache reserved for the kernel (bytes)
13 static constexpr size_t DEFAULT_KERNEL_CACHE{450_MiB};
14 //! Max memory allocated to block tree DB specific cache (bytes)
15 static constexpr size_t MAX_BLOCK_DB_CACHE{2_MiB};
16 //! Max memory allocated to coin DB specific cache (bytes)
17 static constexpr size_t MAX_COINS_DB_CACHE{8_MiB};
18
19 namespace kernel {
20 struct CacheSizes {
21 size_t block_tree_db;
22 size_t coins_db;
23 size_t coins;
24
25 CacheSizes(size_t total_cache)
26 {
27 block_tree_db = std::min(total_cache / 8, MAX_BLOCK_DB_CACHE);
28 total_cache -= block_tree_db;
29 coins_db = std::min(total_cache / 2, MAX_COINS_DB_CACHE);
30 total_cache -= coins_db;
31 coins = total_cache; // the rest goes to the coins cache
32 }
33 };
34 } // namespace kernel
35
36 #endif // LIMENKA_KERNEL_CACHES_H
37