netfs: Add some write-side stats and clean up some stat names
authorDavid Howells <dhowells@redhat.com>
Tue, 26 Mar 2024 08:48:44 +0000 (08:48 +0000)
committerDavid Howells <dhowells@redhat.com>
Wed, 1 May 2024 17:07:36 +0000 (18:07 +0100)
Add some write-side stats to count buffered writes, buffered writethrough,
and writepages calls.

Whilst we're at it, clean up the naming on some of the existing stats
counters and organise the output into two sets.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org

fs/netfs/buffered_read.c
fs/netfs/buffered_write.c
fs/netfs/direct_write.c
fs/netfs/internal.h
fs/netfs/stats.c
fs/netfs/write_issue.c

index 47603f08680e4988061eb4c8b12ebcc48397fd3d..a6bb03bea920cba098447a1cd50ec84ed96728a3 100644 (file)
@@ -282,7 +282,7 @@ int netfs_read_folio(struct file *file, struct folio *folio)
        if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
                goto discard;
 
-       netfs_stat(&netfs_n_rh_readpage);
+       netfs_stat(&netfs_n_rh_read_folio);
        trace_netfs_read(rreq, rreq->start, rreq->len, netfs_read_trace_readpage);
 
        /* Set up the output buffer */
index 84ac95ee4b4d6511aa32cc04aad7306f7a8c0f0c..33ea4c20e7e7c4c572fed4ba0cedc41b42fcccf6 100644 (file)
@@ -210,6 +210,9 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                if (!is_sync_kiocb(iocb))
                        wreq->iocb = iocb;
                wreq->cleanup = netfs_cleanup_buffered_write;
+               netfs_stat(&netfs_n_wh_writethrough);
+       } else {
+               netfs_stat(&netfs_n_wh_buffered_write);
        }
 
        do {
index 2b81cd4aae6efff89056611ec36214f11a1df6ab..36b6db504500872b3394c06cba8fc5606c2c668b 100644 (file)
@@ -145,7 +145,7 @@ ssize_t netfs_unbuffered_write_iter(struct kiocb *iocb, struct iov_iter *from)
                return 0;
 
        trace_netfs_write_iter(iocb, from);
-       netfs_stat(&netfs_n_rh_dio_write);
+       netfs_stat(&netfs_n_wh_dio_write);
 
        ret = netfs_start_io_direct(inode);
        if (ret < 0)
index dc11d1f673630dba112b3cc49ba82a8b9de216c6..5d3f74a70fa7439b44ce998d9246da58e51cb5d2 100644 (file)
@@ -106,9 +106,8 @@ int netfs_end_writethrough(struct netfs_io_request *wreq, struct kiocb *iocb);
  */
 #ifdef CONFIG_NETFS_STATS
 extern atomic_t netfs_n_rh_dio_read;
-extern atomic_t netfs_n_rh_dio_write;
 extern atomic_t netfs_n_rh_readahead;
-extern atomic_t netfs_n_rh_readpage;
+extern atomic_t netfs_n_rh_read_folio;
 extern atomic_t netfs_n_rh_rreq;
 extern atomic_t netfs_n_rh_sreq;
 extern atomic_t netfs_n_rh_download;
@@ -125,6 +124,10 @@ extern atomic_t netfs_n_rh_write_begin;
 extern atomic_t netfs_n_rh_write_done;
 extern atomic_t netfs_n_rh_write_failed;
 extern atomic_t netfs_n_rh_write_zskip;
+extern atomic_t netfs_n_wh_buffered_write;
+extern atomic_t netfs_n_wh_writethrough;
+extern atomic_t netfs_n_wh_dio_write;
+extern atomic_t netfs_n_wh_writepages;
 extern atomic_t netfs_n_wh_wstream_conflict;
 extern atomic_t netfs_n_wh_upload;
 extern atomic_t netfs_n_wh_upload_done;
index deeba9f9dcf5d55f7bf0692ecdf5991334a848ea..0892768eea320e16d828a8a6027e1c7b725b21a8 100644 (file)
@@ -10,9 +10,8 @@
 #include "internal.h"
 
 atomic_t netfs_n_rh_dio_read;
-atomic_t netfs_n_rh_dio_write;
 atomic_t netfs_n_rh_readahead;
-atomic_t netfs_n_rh_readpage;
+atomic_t netfs_n_rh_read_folio;
 atomic_t netfs_n_rh_rreq;
 atomic_t netfs_n_rh_sreq;
 atomic_t netfs_n_rh_download;
@@ -29,6 +28,10 @@ atomic_t netfs_n_rh_write_begin;
 atomic_t netfs_n_rh_write_done;
 atomic_t netfs_n_rh_write_failed;
 atomic_t netfs_n_rh_write_zskip;
+atomic_t netfs_n_wh_buffered_write;
+atomic_t netfs_n_wh_writethrough;
+atomic_t netfs_n_wh_dio_write;
+atomic_t netfs_n_wh_writepages;
 atomic_t netfs_n_wh_wstream_conflict;
 atomic_t netfs_n_wh_upload;
 atomic_t netfs_n_wh_upload_done;
@@ -39,13 +42,17 @@ atomic_t netfs_n_wh_write_failed;
 
 int netfs_stats_show(struct seq_file *m, void *v)
 {
-       seq_printf(m, "Netfs  : DR=%u DW=%u RA=%u RP=%u WB=%u WBZ=%u\n",
+       seq_printf(m, "Netfs  : DR=%u RA=%u RF=%u WB=%u WBZ=%u\n",
                   atomic_read(&netfs_n_rh_dio_read),
-                  atomic_read(&netfs_n_rh_dio_write),
                   atomic_read(&netfs_n_rh_readahead),
-                  atomic_read(&netfs_n_rh_readpage),
+                  atomic_read(&netfs_n_rh_read_folio),
                   atomic_read(&netfs_n_rh_write_begin),
                   atomic_read(&netfs_n_rh_write_zskip));
+       seq_printf(m, "Netfs  : BW=%u WT=%u DW=%u WP=%u\n",
+                  atomic_read(&netfs_n_wh_buffered_write),
+                  atomic_read(&netfs_n_wh_writethrough),
+                  atomic_read(&netfs_n_wh_dio_write),
+                  atomic_read(&netfs_n_wh_writepages));
        seq_printf(m, "Netfs  : ZR=%u sh=%u sk=%u\n",
                   atomic_read(&netfs_n_rh_zero),
                   atomic_read(&netfs_n_rh_short_read),
index 1b2e69934fbdf60eafd1021d9f8514b74ec6a374..7ea86e33382ce018f22bc685c5a6bfa5a93a09df 100644 (file)
@@ -519,6 +519,7 @@ int new_netfs_writepages(struct address_space *mapping,
        }
 
        trace_netfs_write(wreq, netfs_write_trace_writeback);
+       netfs_stat(&netfs_n_wh_writepages);
 
        do {
                _debug("wbiter %lx %llx", folio->index, wreq->start + wreq->submitted);