FIELD(internal_error, "Internal error", FLAG_ERROR),
FIELD(local_storage_hit, nullptr),
FIELD(local_storage_miss, nullptr),
+ FIELD(local_storage_read_hit, nullptr),
+ FIELD(local_storage_read_miss, nullptr),
+ FIELD(local_storage_write, nullptr),
FIELD(missing_cache_file, "Missing cache file", FLAG_ERROR),
FIELD(multiple_source_files, "Multiple source files", FLAG_UNCACHEABLE),
FIELD(no_input_file, "No input file", FLAG_UNCACHEABLE),
FIELD(remote_storage_error, nullptr),
FIELD(remote_storage_hit, nullptr),
FIELD(remote_storage_miss, nullptr),
+ FIELD(remote_storage_read_hit, nullptr),
+ FIELD(remote_storage_read_miss, nullptr),
+ FIELD(remote_storage_write, nullptr),
FIELD(remote_storage_timeout, nullptr),
FIELD(stats_zeroed_timestamp, nullptr),
FIELD(
const uint64_t g = 1'000'000'000;
const uint64_t local_hits = S(local_storage_hit);
const uint64_t local_misses = S(local_storage_miss);
+ const uint64_t local_reads =
+ S(local_storage_read_hit) + S(local_storage_read_miss);
+ const uint64_t local_writes = S(local_storage_write);
const uint64_t local_size = S(cache_size_kibibyte) * 1024;
const uint64_t cleanups = S(cleanups_performed);
- table.add_heading("Local storage:");
- add_ratio_row(table, " Hits:", local_hits, local_hits + local_misses);
- add_ratio_row(table, " Misses:", local_misses, local_hits + local_misses);
+ const uint64_t remote_hits = S(remote_storage_hit);
+ const uint64_t remote_misses = S(remote_storage_miss);
+ const uint64_t remote_reads =
+ S(remote_storage_read_hit) + S(remote_storage_read_miss);
+ const uint64_t remote_writes = S(remote_storage_write);
+ const uint64_t remote_errors = S(remote_storage_error);
+ const uint64_t remote_timeouts = S(remote_storage_timeout);
+ table.add_heading("Local storage:");
if (!from_log) {
std::vector<C> size_cells{
" Cache size (GB):",
table.add_row({" Cleanups:", cleanups});
}
}
-
- const uint64_t remote_hits = S(remote_storage_hit);
- const uint64_t remote_misses = S(remote_storage_miss);
- const uint64_t remote_errors = S(remote_storage_error);
- const uint64_t remote_timeouts = S(remote_storage_timeout);
+ if (verbosity > 0 || (remote_hits + remote_misses) > 0) {
+ add_ratio_row(table, " Hits:", local_hits, local_hits + local_misses);
+ add_ratio_row(table, " Misses:", local_misses, local_hits + local_misses);
+ }
+ if (verbosity > 0) {
+ table.add_row({" Reads:", local_reads});
+ table.add_row({" Writes:", local_writes});
+ }
if (verbosity > 1
|| remote_hits + remote_misses + remote_errors + remote_timeouts > 0) {
add_ratio_row(table, " Hits:", remote_hits, remote_hits + remote_misses);
add_ratio_row(
table, " Misses:", remote_misses, remote_hits + remote_misses);
+ if (verbosity > 0) {
+ table.add_row({" Reads:", remote_reads});
+ table.add_row({" Writes:", remote_writes});
+ }
if (verbosity > 1 || remote_errors > 0) {
table.add_row({" Errors:", remote_errors});
}
expect_stat cache_miss 1
expect_stat files_in_cache 2
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2 # result + manifest
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2 # result + manifest
+ expect_stat local_storage_write 2 # result + manifest
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 2 # result + manifest
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 2 # result + manifest
+ expect_stat remote_storage_write 2 # result + manifest
expect_exists remote/CACHEDIR.TAG
subdirs=$(find remote -type d | wc -l)
if [ "${subdirs}" -lt 2 ]; then # "remote" itself counts as one
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 1
expect_stat cache_miss 1
- expect_stat local_storage_hit 2 # result + manifest
- expect_stat local_storage_miss 2 # result + manifest
+ expect_stat local_storage_hit 1
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 2 # result + manifest
+ expect_stat local_storage_read_miss 2 # result + manifest
+ expect_stat local_storage_write 2 # result + manifest
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 2 # result + manifest
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2
expect_stat files_in_cache 2
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 2
expect_stat cache_miss 1
- expect_stat local_storage_hit 2
- expect_stat local_storage_miss 4 # 2 * (result + manifest)
- expect_stat remote_storage_hit 2 # result + manifest
- expect_stat remote_storage_miss 2 # result + manifest
+ expect_stat local_storage_hit 1
+ expect_stat local_storage_miss 2
+ expect_stat local_storage_read_hit 2 # result + manifest
+ expect_stat local_storage_read_miss 4 # 2 * (result + manifest)
+ expect_stat local_storage_write 4 # 2 * (result + manifest)
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 2 # result + manifest
+ expect_stat remote_storage_read_miss 2 # result + manifest
+ expect_stat remote_storage_write 2 # result + manifest
expect_stat files_in_cache 2 # fetched from remote
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 3
expect_stat cache_miss 1
- expect_stat local_storage_hit 4
- expect_stat local_storage_miss 4 # 2 * (result + manifest)
- expect_stat remote_storage_hit 2 # result + manifest
- expect_stat remote_storage_miss 2 # result + manifest
+ expect_stat local_storage_hit 2
+ expect_stat local_storage_miss 2
+ expect_stat local_storage_read_hit 4 # 2 * (result + manifest)
+ expect_stat local_storage_read_miss 4 # 2 * (result + manifest)
+ expect_stat local_storage_write 4 # 2 * (result + manifest)
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 2 # result + manifest
+ expect_stat remote_storage_read_miss 2 # result + manifest
+ expect_stat remote_storage_write 2 # result + manifest
expect_stat files_in_cache 2 # fetched from remote
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
expect_stat cache_miss 1
expect_stat files_in_cache 2
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 0
expect_missing remote
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 1
expect_stat cache_miss 1
- expect_stat local_storage_hit 2
- expect_stat local_storage_miss 2
+ expect_stat local_storage_hit 1
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 2
+ expect_stat local_storage_read_miss 2
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 0
expect_missing remote
CCACHE_RESHARE=1 $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 2
expect_stat cache_miss 1
- expect_stat local_storage_hit 4
- expect_stat local_storage_miss 2
+ expect_stat local_storage_hit 2
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 4
+ expect_stat local_storage_read_miss 2
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 2
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
$CCACHE -C >/dev/null
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 3
expect_stat cache_miss 1
- expect_stat local_storage_hit 4
- expect_stat local_storage_miss 4
- expect_stat remote_storage_hit 2
+ expect_stat local_storage_hit 2
+ expect_stat local_storage_miss 2
+ expect_stat local_storage_read_hit 4
+ expect_stat local_storage_read_miss 4
+ expect_stat local_storage_write 4
+ expect_stat remote_storage_hit 1
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 2
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 2
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
# -------------------------------------------------------------------------
CCACHE_RECACHE=1 $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 0
expect_stat direct_cache_miss 0
+ expect_stat preprocessed_cache_miss 0
expect_stat cache_miss 0
expect_stat recache 1
expect_stat files_in_cache 2
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 1 # Try to read manifest for updating
+ expect_stat local_storage_miss 0
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 1 # Try to read manifest for updating
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 1 # Try to read manifest for updating
+ expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 1 # Try to read manifest for updating
+ expect_stat remote_storage_write 2
expect_file_count 3 '*' remote # CACHEDIR.TAG + result + manifest
$CCACHE -C >/dev/null
CCACHE_RECACHE=1 $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 0
+
expect_stat direct_cache_miss 0
+ expect_stat preprocessed_cache_miss 0
expect_stat cache_miss 0
expect_stat recache 2
expect_stat files_in_cache 2
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2 # Try to read manifest for updating
- expect_stat remote_storage_hit 1 # Read manifest for updating
- expect_stat remote_storage_miss 1
+ expect_stat local_storage_miss 0
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2 # Try to read manifest for updating
+ expect_stat local_storage_write 4
+ expect_stat remote_storage_hit 0
+ expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 1 # Read manifest for updating
+ expect_stat remote_storage_read_miss 1
+ expect_stat remote_storage_write 3 # Not 4 since result key already present
# -------------------------------------------------------------------------
if touch test.c && ln test.c test-if-fs-supports-hard-links.c 2>/dev/null; then
expect_stat cache_miss 1
expect_stat files_in_cache 3
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2 # result + manifest
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 0
CCACHE_RESHARE=1 $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 1
expect_stat cache_miss 1
expect_stat files_in_cache 3
- expect_stat local_storage_hit 2
- expect_stat local_storage_miss 2 # result + manifest
+ expect_stat local_storage_hit 1
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 2
+ expect_stat local_storage_read_miss 2
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
expect_stat remote_storage_miss 0
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 0
+ expect_stat remote_storage_write 1 # result not saved since not self-contained
expect_file_count 2 '*' remote # CACHEDIR.TAG + manifest, not result
fi
expect_stat direct_cache_hit 0
expect_stat cache_miss 1
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2 # miss: manifest + result
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2 # miss: manifest + result
+ expect_stat local_storage_write 2 # manifest + result
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 2 # miss: manifest + result
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2 # miss: manifest + result
# Both local and remote now have an "int x;" key in the manifest.
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 0
expect_stat cache_miss 2
- expect_stat local_storage_hit 1 # hit: manifest without key
- expect_stat local_storage_miss 3 # miss: result
- expect_stat remote_storage_hit 1 # his: manifest without key
- expect_stat remote_storage_miss 3 # miss: result
+ expect_stat local_storage_hit 0
+ expect_stat local_storage_miss 2
+ expect_stat local_storage_read_hit 1 # hit: manifest without key
+ expect_stat local_storage_read_miss 3 # miss: result
+ expect_stat local_storage_write 5 # miss: merged manifest + new manifest entry + result
+ expect_stat remote_storage_hit 0
+ expect_stat remote_storage_miss 2
+ expect_stat remote_storage_read_hit 1 # # hit: manifest without key
+ expect_stat remote_storage_read_miss 3 # miss: result
+ expect_stat remote_storage_write 4 # miss: manifest + result
# Both local and remote now have "int x;" and "int y;" keys in the manifest.
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 1
expect_stat cache_miss 2
- expect_stat local_storage_hit 1
- expect_stat local_storage_miss 5 # miss: manifest + result
- expect_stat remote_storage_hit 3 # hit: manifest + result
- expect_stat remote_storage_miss 3
+ expect_stat local_storage_hit 0
+ expect_stat local_storage_miss 3
+ expect_stat local_storage_read_hit 1
+ expect_stat local_storage_read_miss 5 # miss: manifest + result
+ expect_stat local_storage_write 7 # miss: manifest + result
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 2
+ expect_stat remote_storage_read_hit 3
+ expect_stat remote_storage_read_miss 3
+ expect_stat remote_storage_write 4
# Should be able to get remote hit without involving local.
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 2
expect_stat cache_miss 2
- expect_stat local_storage_hit 2 # hit: manifest with key (downloaded from previous step)
- expect_stat local_storage_miss 6 # miss: result
- expect_stat remote_storage_hit 4 # hit: result
- expect_stat remote_storage_miss 3
+ expect_stat local_storage_hit 0
+ expect_stat local_storage_miss 4
+ expect_stat local_storage_read_hit 2 # hit: manifest with key (downloaded from previous step)
+ expect_stat local_storage_read_miss 6 # miss: manifest + result
+ expect_stat local_storage_write 8 # miss: result
+ expect_stat remote_storage_hit 2
+ expect_stat remote_storage_miss 2
+ expect_stat remote_storage_read_hit 4 # hit: result
+ expect_stat remote_storage_read_miss 3
+ expect_stat remote_storage_write 4
# -------------------------------------------------------------------------
TEST "Manifest merging"
expect_stat direct_cache_hit 0
expect_stat cache_miss 1
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 2 # miss: manifest + result
+ expect_stat local_storage_miss 1
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 2 # miss: manifest + result
+ expect_stat local_storage_write 2
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 2 # miss: manifest + result
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 2 # miss: manifest + result 3
+ expect_stat remote_storage_write 2
$CCACHE -C >/dev/null
expect_stat direct_cache_hit 0
expect_stat cache_miss 2
expect_stat local_storage_hit 0
- expect_stat local_storage_miss 4 # miss: manifest + result
+ expect_stat local_storage_miss 2
+ expect_stat local_storage_read_hit 0
+ expect_stat local_storage_read_miss 4 # miss: manifest + result
+ expect_stat local_storage_write 4
expect_stat remote_storage_hit 0
- expect_stat remote_storage_miss 2
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 0
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2
# Now local has "int y;" while remote still has "int x;".
$CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 1
expect_stat cache_miss 2
- expect_stat local_storage_hit 1 # hit: manifest without key
- expect_stat local_storage_miss 5 # miss: result
- expect_stat remote_storage_hit 2 # hit: manifest + result
- expect_stat remote_storage_miss 2
+ expect_stat local_storage_hit 0
+ expect_stat local_storage_miss 3
+ expect_stat local_storage_read_hit 1 # hit: manifest without key
+ expect_stat local_storage_read_miss 5 # miss: result
+ expect_stat local_storage_write 6
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 2 # hit: manifest + result
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2
# Local manifest with "int y;" was merged with remote's "int x;" above, so
# we should now be able to get "int x;" and "int y;" hits locally.
CCACHE_REMOTE_STORAGE= $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 2
expect_stat cache_miss 2
- expect_stat local_storage_hit 3 # hit: manifest + result
- expect_stat local_storage_miss 5
- expect_stat remote_storage_hit 2
- expect_stat remote_storage_miss 2
+ expect_stat local_storage_hit 1
+ expect_stat local_storage_miss 3
+ expect_stat local_storage_read_hit 3 # hit: manifest + result
+ expect_stat local_storage_read_miss 5 # miss: result
+ expect_stat local_storage_write 6
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 2
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2
echo 'int x;' >test.h
backdate test.h
CCACHE_REMOTE_STORAGE= $CCACHE_COMPILE -c test.c
expect_stat direct_cache_hit 3
expect_stat cache_miss 2
- expect_stat local_storage_hit 5 # hit: manifest + result
- expect_stat local_storage_miss 5
- expect_stat remote_storage_hit 2
- expect_stat remote_storage_miss 2
+ expect_stat local_storage_hit 2
+ expect_stat local_storage_miss 3
+ expect_stat local_storage_read_hit 5 # hit: manifest + result
+ expect_stat local_storage_read_miss 5 # miss: result
+ expect_stat local_storage_write 6
+ expect_stat remote_storage_hit 1
+ expect_stat remote_storage_miss 1
+ expect_stat remote_storage_read_hit 2
+ expect_stat remote_storage_read_miss 2
+ expect_stat remote_storage_write 2
}