From 1e278d55c4dc0a9ae7b5b4511904202824e5c5df Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 2 Apr 2024 19:36:35 +1100 Subject: tweak db performance - leveldb cache pinned to spiram - actually use it during indexing lol - all up, saves about 10ms per file (amortised) for an incremental reindex --- lib/leveldb/util/cache.cc | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'lib/leveldb') diff --git a/lib/leveldb/util/cache.cc b/lib/leveldb/util/cache.cc index ad1e9a28..043b37a3 100644 --- a/lib/leveldb/util/cache.cc +++ b/lib/leveldb/util/cache.cc @@ -8,6 +8,7 @@ #include #include +#include "esp_heap_caps.h" #include "port/port.h" #include "port/thread_annotations.h" #include "util/hash.h" @@ -157,7 +158,9 @@ class LRUCache { void SetCapacity(size_t capacity) { capacity_ = capacity; } // Like Cache methods, but with an extra "hash" parameter. - Cache::Handle* Insert(const Slice& key, uint32_t hash, void* value, + Cache::Handle* Insert(const Slice& key, + uint32_t hash, + void* value, size_t charge, void (*deleter)(const Slice& key, void* value)); Cache::Handle* Lookup(const Slice& key, uint32_t hash); @@ -264,14 +267,16 @@ void LRUCache::Release(Cache::Handle* handle) { Unref(reinterpret_cast(handle)); } -Cache::Handle* LRUCache::Insert(const Slice& key, uint32_t hash, void* value, +Cache::Handle* LRUCache::Insert(const Slice& key, + uint32_t hash, + void* value, size_t charge, void (*deleter)(const Slice& key, void* value)) { MutexLock l(&mutex_); - LRUHandle* e = - reinterpret_cast(malloc(sizeof(LRUHandle) - 1 + key.size())); + LRUHandle* e = reinterpret_cast( + heap_caps_malloc(sizeof(LRUHandle) - 1 + key.size(), MALLOC_CAP_SPIRAM)); e->value = value; e->deleter = deleter; e->charge = charge; @@ -356,7 +361,9 @@ class ShardedLRUCache : public Cache { } } ~ShardedLRUCache() override {} - Handle* Insert(const Slice& key, void* value, size_t charge, + Handle* Insert(const Slice& key, + void* value, + size_t charge, void (*deleter)(const Slice& key, void* value)) override { const uint32_t hash = HashSlice(key); return shard_[Shard(hash)].Insert(key, hash, value, charge, deleter); @@ -396,6 +403,8 @@ class ShardedLRUCache : public Cache { } // end anonymous namespace -Cache* NewLRUCache(size_t capacity) { return new ShardedLRUCache(capacity); } +Cache* NewLRUCache(size_t capacity) { + return new ShardedLRUCache(capacity); +} } // namespace leveldb -- cgit v1.2.3