util/disk_cache: enable Mesa-DB disk cache by default

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22339>
This commit is contained in:
Daniel Schürmann
2023-04-06 16:57:31 +02:00
committed by Marge Bot
parent 5e8bb93ea3
commit bd4fbdf510
3 changed files with 27 additions and 28 deletions

View File

@@ -205,8 +205,8 @@ Core Mesa environment variables
if set, determines the directory to be used for the on-disk cache of if set, determines the directory to be used for the on-disk cache of
compiled shader programs. If this variable is not set, then the cache compiled shader programs. If this variable is not set, then the cache
will be stored in ``$XDG_CACHE_HOME/mesa_shader_cache`` (if that will be stored in ``$XDG_CACHE_HOME/mesa_shader_cache_db`` (if that
variable is set), or else within ``.cache/mesa_shader_cache`` within variable is set), or else within ``.cache/mesa_shader_cache_db`` within
the user's home directory. the user's home directory.
.. envvar:: MESA_SHADER_CACHE_SHOW_STATS .. envvar:: MESA_SHADER_CACHE_SHOW_STATS
@@ -217,10 +217,9 @@ Core Mesa environment variables
.. envvar:: MESA_DISK_CACHE_SINGLE_FILE .. envvar:: MESA_DISK_CACHE_SINGLE_FILE
if set to 1, enables the single file Fossilize DB on-disk shader if set to 1, enables the single file Fossilize DB on-disk shader
cache implementation instead of the default multi-file cache cache implementation instead of the default Mesa-DB cache
implementation. This implementation reduces the overall disk usage by implementation. This implementation allows for loading of precompiled
the shader cache and also allows for loading of precompiled cache cache DBs via :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS` or
DBs via :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS` or
:envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`. This :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`. This
implementation does not support cache size limits via implementation does not support cache size limits via
:envvar:`MESA_SHADER_CACHE_MAX_SIZE`. If :envvar:`MESA_SHADER_CACHE_MAX_SIZE`. If
@@ -229,6 +228,16 @@ Core Mesa environment variables
or else within ``.cache/mesa_shader_cache_sf`` within the user's home or else within ``.cache/mesa_shader_cache_sf`` within the user's home
directory. directory.
.. envvar:: MESA_DISK_CACHE_MULTI_FILE
if set to 1, enables the multi file on-disk shader cache implementation
instead of the default Mesa-DB cache implementation.
This implementation increases the overall disk usage.
If :envvar:`MESA_SHADER_CACHE_DIR` is not set, the cache will be stored
in ``$XDG_CACHE_HOME/mesa_shader_cache`` (if that variable is set)
or else within ``.cache/mesa_shader_cache`` within the user's home
directory.
.. envvar:: MESA_DISK_CACHE_READ_ONLY_FOZ_DBS .. envvar:: MESA_DISK_CACHE_READ_ONLY_FOZ_DBS
if set with :envvar:`MESA_DISK_CACHE_SINGLE_FILE` enabled, references if set with :envvar:`MESA_DISK_CACHE_SINGLE_FILE` enabled, references
@@ -240,18 +249,6 @@ Core Mesa environment variables
and ``filename1_idx.foz``. A limit of 8 DBs can be loaded and this limit and ``filename1_idx.foz``. A limit of 8 DBs can be loaded and this limit
is shared with :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`. is shared with :envvar:`MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST`.
.. envvar:: MESA_DISK_CACHE_DATABASE
if set to 1, enables the Mesa-DB single file on-disk shader cache
implementation instead of the default multi-file cache implementation.
Like :envvar:`MESA_DISK_CACHE_SINGLE_FILE`, Mesa-DB reduces overall
disk usage but Mesa-DB supports cache size limits via
:envvar:`MESA_SHADER_CACHE_MAX_SIZE`. If
:envvar:`MESA_SHADER_CACHE_DIR` is not set, the cache will be stored
in ``$XDG_CACHE_HOME/mesa_shader_cache_db`` (if that variable is set)
or else within ``.cache/mesa_shader_cache_db`` within the user's home
directory.
.. envvar:: MESA_DISK_CACHE_DATABASE_NUM_PARTS .. envvar:: MESA_DISK_CACHE_DATABASE_NUM_PARTS
specifies number of mesa-db cache parts, default is 50. specifies number of mesa-db cache parts, default is 50.

View File

@@ -271,10 +271,10 @@ disk_cache_create(const char *gpu_name, const char *driver_id,
if (debug_get_bool_option("MESA_DISK_CACHE_SINGLE_FILE", false)) if (debug_get_bool_option("MESA_DISK_CACHE_SINGLE_FILE", false))
cache_type = DISK_CACHE_SINGLE_FILE; cache_type = DISK_CACHE_SINGLE_FILE;
else if (debug_get_bool_option("MESA_DISK_CACHE_DATABASE", false)) else if (debug_get_bool_option("MESA_DISK_CACHE_MULTI_FILE", false))
cache_type = DISK_CACHE_DATABASE;
else
cache_type = DISK_CACHE_MULTI_FILE; cache_type = DISK_CACHE_MULTI_FILE;
else
cache_type = DISK_CACHE_DATABASE;
/* Create main writable cache. */ /* Create main writable cache. */
cache = disk_cache_type_create(gpu_name, driver_id, driver_flags, cache = disk_cache_type_create(gpu_name, driver_id, driver_flags,

View File

@@ -700,6 +700,8 @@ TEST_F(Cache, MultiFile)
bool compress = true; bool compress = true;
run_tests: run_tests:
setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1);
if (!compress) if (!compress)
driver_id = "make_check_uncompressed"; driver_id = "make_check_uncompressed";
else else
@@ -711,6 +713,8 @@ run_tests:
test_put_key_and_get_key(driver_id); test_put_key_and_get_key(driver_id);
setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1);
int err = rmrf_local(CACHE_TEST_TMP); int err = rmrf_local(CACHE_TEST_TMP);
EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again";
@@ -769,7 +773,6 @@ TEST_F(Cache, Database)
GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined.";
#else #else
setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "1", 1); setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "1", 1);
setenv("MESA_DISK_CACHE_DATABASE", "true", 1);
test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id); test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id);
@@ -793,7 +796,6 @@ TEST_F(Cache, Database)
test_put_and_get_between_instances_with_eviction(driver_id); test_put_and_get_between_instances_with_eviction(driver_id);
setenv("MESA_DISK_CACHE_DATABASE", "false", 1);
unsetenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS"); unsetenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS");
err = rmrf_local(CACHE_TEST_TMP); err = rmrf_local(CACHE_TEST_TMP);
@@ -820,7 +822,7 @@ TEST_F(Cache, Combined)
GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined.";
#else #else
setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1); setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1);
setenv("MESA_DISK_CACHE_DATABASE", "false", 1); setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1);
#ifdef SHADER_CACHE_DISABLE_BY_DEFAULT #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT
setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); setenv("MESA_SHADER_CACHE_DISABLE", "false", 1);
@@ -890,7 +892,7 @@ TEST_F(Cache, Combined)
EXPECT_EQ(unlink(foz_rw_idx_file), 0); EXPECT_EQ(unlink(foz_rw_idx_file), 0);
setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1); setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1);
setenv("MESA_DISK_CACHE_DATABASE", "true", 1); setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1);
/* Create MESA-DB cache with enabled retrieval from the read-only /* Create MESA-DB cache with enabled retrieval from the read-only
* cache. */ * cache. */
@@ -959,7 +961,7 @@ TEST_F(Cache, Combined)
disk_cache_destroy(cache_mesa_db); disk_cache_destroy(cache_mesa_db);
/* Create default multi-file cache. */ /* Create default multi-file cache. */
setenv("MESA_DISK_CACHE_DATABASE", "false", 1); setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1);
/* Enable read-only cache. */ /* Enable read-only cache. */
setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", 1); setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", 1);
@@ -1017,6 +1019,8 @@ TEST_F(Cache, Combined)
disk_cache_destroy(cache_multifile); disk_cache_destroy(cache_multifile);
unsetenv("MESA_DISK_CACHE_MULTI_FILE");
int err = rmrf_local(CACHE_TEST_TMP); int err = rmrf_local(CACHE_TEST_TMP);
EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again";
#endif #endif
@@ -1269,14 +1273,12 @@ TEST_F(Cache, DatabaseMultipartEviction)
GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined.";
#else #else
setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "3", 1); setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "3", 1);
setenv("MESA_DISK_CACHE_DATABASE", "true", 1);
test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id); test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id);
test_multipart_eviction(driver_id); test_multipart_eviction(driver_id);
unsetenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS"); unsetenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS");
unsetenv("MESA_DISK_CACHE_DATABASE");
int err = rmrf_local(CACHE_TEST_TMP); int err = rmrf_local(CACHE_TEST_TMP);
EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again";