162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* FS-Cache statistics 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved. 562306a36Sopenharmony_ci * Written by David Howells (dhowells@redhat.com) 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define FSCACHE_DEBUG_LEVEL CACHE 962306a36Sopenharmony_ci#include <linux/proc_fs.h> 1062306a36Sopenharmony_ci#include <linux/seq_file.h> 1162306a36Sopenharmony_ci#include "internal.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * operation counters 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ciatomic_t fscache_n_volumes; 1762306a36Sopenharmony_ciatomic_t fscache_n_volumes_collision; 1862306a36Sopenharmony_ciatomic_t fscache_n_volumes_nomem; 1962306a36Sopenharmony_ciatomic_t fscache_n_cookies; 2062306a36Sopenharmony_ciatomic_t fscache_n_cookies_lru; 2162306a36Sopenharmony_ciatomic_t fscache_n_cookies_lru_expired; 2262306a36Sopenharmony_ciatomic_t fscache_n_cookies_lru_removed; 2362306a36Sopenharmony_ciatomic_t fscache_n_cookies_lru_dropped; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciatomic_t fscache_n_acquires; 2662306a36Sopenharmony_ciatomic_t fscache_n_acquires_ok; 2762306a36Sopenharmony_ciatomic_t fscache_n_acquires_oom; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciatomic_t fscache_n_invalidates; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciatomic_t fscache_n_updates; 3262306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_updates); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciatomic_t fscache_n_relinquishes; 3562306a36Sopenharmony_ciatomic_t fscache_n_relinquishes_retire; 3662306a36Sopenharmony_ciatomic_t fscache_n_relinquishes_dropped; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciatomic_t fscache_n_resizes; 3962306a36Sopenharmony_ciatomic_t fscache_n_resizes_null; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciatomic_t fscache_n_read; 4262306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_read); 4362306a36Sopenharmony_ciatomic_t fscache_n_write; 4462306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_write); 4562306a36Sopenharmony_ciatomic_t fscache_n_no_write_space; 4662306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_no_write_space); 4762306a36Sopenharmony_ciatomic_t fscache_n_no_create_space; 4862306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_no_create_space); 4962306a36Sopenharmony_ciatomic_t fscache_n_culled; 5062306a36Sopenharmony_ciEXPORT_SYMBOL(fscache_n_culled); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci/* 5362306a36Sopenharmony_ci * display the general statistics 5462306a36Sopenharmony_ci */ 5562306a36Sopenharmony_ciint fscache_stats_show(struct seq_file *m, void *v) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci seq_puts(m, "FS-Cache statistics\n"); 5862306a36Sopenharmony_ci seq_printf(m, "Cookies: n=%d v=%d vcol=%u voom=%u\n", 5962306a36Sopenharmony_ci atomic_read(&fscache_n_cookies), 6062306a36Sopenharmony_ci atomic_read(&fscache_n_volumes), 6162306a36Sopenharmony_ci atomic_read(&fscache_n_volumes_collision), 6262306a36Sopenharmony_ci atomic_read(&fscache_n_volumes_nomem) 6362306a36Sopenharmony_ci ); 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci seq_printf(m, "Acquire: n=%u ok=%u oom=%u\n", 6662306a36Sopenharmony_ci atomic_read(&fscache_n_acquires), 6762306a36Sopenharmony_ci atomic_read(&fscache_n_acquires_ok), 6862306a36Sopenharmony_ci atomic_read(&fscache_n_acquires_oom)); 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci seq_printf(m, "LRU : n=%u exp=%u rmv=%u drp=%u at=%ld\n", 7162306a36Sopenharmony_ci atomic_read(&fscache_n_cookies_lru), 7262306a36Sopenharmony_ci atomic_read(&fscache_n_cookies_lru_expired), 7362306a36Sopenharmony_ci atomic_read(&fscache_n_cookies_lru_removed), 7462306a36Sopenharmony_ci atomic_read(&fscache_n_cookies_lru_dropped), 7562306a36Sopenharmony_ci timer_pending(&fscache_cookie_lru_timer) ? 7662306a36Sopenharmony_ci fscache_cookie_lru_timer.expires - jiffies : 0); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci seq_printf(m, "Invals : n=%u\n", 7962306a36Sopenharmony_ci atomic_read(&fscache_n_invalidates)); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci seq_printf(m, "Updates: n=%u rsz=%u rsn=%u\n", 8262306a36Sopenharmony_ci atomic_read(&fscache_n_updates), 8362306a36Sopenharmony_ci atomic_read(&fscache_n_resizes), 8462306a36Sopenharmony_ci atomic_read(&fscache_n_resizes_null)); 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci seq_printf(m, "Relinqs: n=%u rtr=%u drop=%u\n", 8762306a36Sopenharmony_ci atomic_read(&fscache_n_relinquishes), 8862306a36Sopenharmony_ci atomic_read(&fscache_n_relinquishes_retire), 8962306a36Sopenharmony_ci atomic_read(&fscache_n_relinquishes_dropped)); 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci seq_printf(m, "NoSpace: nwr=%u ncr=%u cull=%u\n", 9262306a36Sopenharmony_ci atomic_read(&fscache_n_no_write_space), 9362306a36Sopenharmony_ci atomic_read(&fscache_n_no_create_space), 9462306a36Sopenharmony_ci atomic_read(&fscache_n_culled)); 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci seq_printf(m, "IO : rd=%u wr=%u\n", 9762306a36Sopenharmony_ci atomic_read(&fscache_n_read), 9862306a36Sopenharmony_ci atomic_read(&fscache_n_write)); 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci netfs_stats_show(m); 10162306a36Sopenharmony_ci return 0; 10262306a36Sopenharmony_ci} 103