util/disk_cache: Switch to multipart mesa-db cache
Replace single file mesa-db cache with multipart mesa-db cache. Each part of the multipart cache essentially is a single file mesa-db cache, aka database shard. Multipart cache brings much more optimized cache eviction times in comparison to a single file cache. Acked-by: Timothy Arceri <tarceri@itsqueeze.com> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20256>
This commit is contained in:

committed by
Marge Bot

parent
fd9f7b748e
commit
4fe2247be5
@@ -190,7 +190,7 @@ disk_cache_type_create(const char *gpu_name,
|
||||
cache->max_size = max_size;
|
||||
|
||||
if (cache->type == DISK_CACHE_DATABASE)
|
||||
mesa_cache_db_set_size_limit(&cache->cache_db, cache->max_size);
|
||||
mesa_cache_db_multipart_set_size_limit(&cache->cache_db, cache->max_size);
|
||||
|
||||
/* 4 threads were chosen below because just about all modern CPUs currently
|
||||
* available that run Mesa have *at least* 4 cores. For these CPUs allowing
|
||||
@@ -318,7 +318,7 @@ disk_cache_destroy(struct disk_cache *cache)
|
||||
foz_destroy(&cache->foz_db);
|
||||
|
||||
if (cache->type == DISK_CACHE_DATABASE)
|
||||
mesa_cache_db_close(&cache->cache_db);
|
||||
mesa_cache_db_multipart_close(&cache->cache_db);
|
||||
|
||||
disk_cache_destroy_mmap(cache);
|
||||
}
|
||||
@@ -336,7 +336,7 @@ void
|
||||
disk_cache_remove(struct disk_cache *cache, const cache_key key)
|
||||
{
|
||||
if (cache->type == DISK_CACHE_DATABASE) {
|
||||
mesa_cache_db_entry_remove(&cache->cache_db, key);
|
||||
mesa_cache_db_multipart_entry_remove(&cache->cache_db, key);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -1054,8 +1054,8 @@ disk_cache_db_load_item(struct disk_cache *cache, const cache_key key,
|
||||
size_t *size)
|
||||
{
|
||||
size_t cache_tem_size = 0;
|
||||
void *cache_item = mesa_cache_db_read_entry(&cache->cache_db, key,
|
||||
&cache_tem_size);
|
||||
void *cache_item = mesa_cache_db_multipart_read_entry(&cache->cache_db,
|
||||
key, &cache_tem_size);
|
||||
if (!cache_item)
|
||||
return NULL;
|
||||
|
||||
@@ -1075,8 +1075,9 @@ disk_cache_db_write_item_to_disk(struct disk_cache_put_job *dc_job)
|
||||
if (!create_cache_item_header_and_blob(dc_job, &cache_blob))
|
||||
return false;
|
||||
|
||||
bool r = mesa_cache_db_entry_write(&dc_job->cache->cache_db, dc_job->key,
|
||||
cache_blob.data, cache_blob.size);
|
||||
bool r = mesa_cache_db_multipart_entry_write(&dc_job->cache->cache_db,
|
||||
dc_job->key, cache_blob.data,
|
||||
cache_blob.size);
|
||||
|
||||
blob_finish(&cache_blob);
|
||||
return r;
|
||||
@@ -1085,7 +1086,7 @@ disk_cache_db_write_item_to_disk(struct disk_cache_put_job *dc_job)
|
||||
bool
|
||||
disk_cache_db_load_cache_index(void *mem_ctx, struct disk_cache *cache)
|
||||
{
|
||||
return mesa_cache_db_open(&cache->cache_db, cache->path);
|
||||
return mesa_cache_db_multipart_open(&cache->cache_db, cache->path);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "util/fossilize_db.h"
|
||||
#include "util/mesa_cache_db.h"
|
||||
#include "util/mesa_cache_db_multipart.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -64,7 +65,7 @@ struct disk_cache {
|
||||
|
||||
struct foz_db foz_db;
|
||||
|
||||
struct mesa_cache_db cache_db;
|
||||
struct mesa_cache_db_multipart cache_db;
|
||||
|
||||
enum disk_cache_type type;
|
||||
|
||||
|
Reference in New Issue
Block a user