stats.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /* Netfs support statistics
  3. *
  4. * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
  5. * Written by David Howells (dhowells@redhat.com)
  6. */
  7. #include <linux/export.h>
  8. #include <linux/seq_file.h>
  9. #include "internal.h"
  10. atomic_t netfs_n_rh_dio_read;
  11. atomic_t netfs_n_rh_readahead;
  12. atomic_t netfs_n_rh_read_folio;
  13. atomic_t netfs_n_rh_read_single;
  14. atomic_t netfs_n_rh_rreq;
  15. atomic_t netfs_n_rh_sreq;
  16. atomic_t netfs_n_rh_download;
  17. atomic_t netfs_n_rh_download_done;
  18. atomic_t netfs_n_rh_download_failed;
  19. atomic_t netfs_n_rh_download_instead;
  20. atomic_t netfs_n_rh_read;
  21. atomic_t netfs_n_rh_read_done;
  22. atomic_t netfs_n_rh_read_failed;
  23. atomic_t netfs_n_rh_zero;
  24. atomic_t netfs_n_rh_short_read;
  25. atomic_t netfs_n_rh_write;
  26. atomic_t netfs_n_rh_write_begin;
  27. atomic_t netfs_n_rh_write_done;
  28. atomic_t netfs_n_rh_write_failed;
  29. atomic_t netfs_n_rh_write_zskip;
  30. atomic_t netfs_n_rh_retry_read_req;
  31. atomic_t netfs_n_rh_retry_read_subreq;
  32. atomic_t netfs_n_wh_buffered_write;
  33. atomic_t netfs_n_wh_writethrough;
  34. atomic_t netfs_n_wh_dio_write;
  35. atomic_t netfs_n_wh_writepages;
  36. atomic_t netfs_n_wh_copy_to_cache;
  37. atomic_t netfs_n_wh_wstream_conflict;
  38. atomic_t netfs_n_wh_upload;
  39. atomic_t netfs_n_wh_upload_done;
  40. atomic_t netfs_n_wh_upload_failed;
  41. atomic_t netfs_n_wh_write;
  42. atomic_t netfs_n_wh_write_done;
  43. atomic_t netfs_n_wh_write_failed;
  44. atomic_t netfs_n_wh_retry_write_req;
  45. atomic_t netfs_n_wh_retry_write_subreq;
  46. atomic_t netfs_n_wb_lock_skip;
  47. atomic_t netfs_n_wb_lock_wait;
  48. atomic_t netfs_n_folioq;
  49. int netfs_stats_show(struct seq_file *m, void *v)
  50. {
  51. seq_printf(m, "Reads : DR=%u RA=%u RF=%u RS=%u WB=%u WBZ=%u\n",
  52. atomic_read(&netfs_n_rh_dio_read),
  53. atomic_read(&netfs_n_rh_readahead),
  54. atomic_read(&netfs_n_rh_read_folio),
  55. atomic_read(&netfs_n_rh_read_single),
  56. atomic_read(&netfs_n_rh_write_begin),
  57. atomic_read(&netfs_n_rh_write_zskip));
  58. seq_printf(m, "Writes : BW=%u WT=%u DW=%u WP=%u 2C=%u\n",
  59. atomic_read(&netfs_n_wh_buffered_write),
  60. atomic_read(&netfs_n_wh_writethrough),
  61. atomic_read(&netfs_n_wh_dio_write),
  62. atomic_read(&netfs_n_wh_writepages),
  63. atomic_read(&netfs_n_wh_copy_to_cache));
  64. seq_printf(m, "ZeroOps: ZR=%u sh=%u sk=%u\n",
  65. atomic_read(&netfs_n_rh_zero),
  66. atomic_read(&netfs_n_rh_short_read),
  67. atomic_read(&netfs_n_rh_write_zskip));
  68. seq_printf(m, "DownOps: DL=%u ds=%u df=%u di=%u\n",
  69. atomic_read(&netfs_n_rh_download),
  70. atomic_read(&netfs_n_rh_download_done),
  71. atomic_read(&netfs_n_rh_download_failed),
  72. atomic_read(&netfs_n_rh_download_instead));
  73. seq_printf(m, "CaRdOps: RD=%u rs=%u rf=%u\n",
  74. atomic_read(&netfs_n_rh_read),
  75. atomic_read(&netfs_n_rh_read_done),
  76. atomic_read(&netfs_n_rh_read_failed));
  77. seq_printf(m, "UpldOps: UL=%u us=%u uf=%u\n",
  78. atomic_read(&netfs_n_wh_upload),
  79. atomic_read(&netfs_n_wh_upload_done),
  80. atomic_read(&netfs_n_wh_upload_failed));
  81. seq_printf(m, "CaWrOps: WR=%u ws=%u wf=%u\n",
  82. atomic_read(&netfs_n_wh_write),
  83. atomic_read(&netfs_n_wh_write_done),
  84. atomic_read(&netfs_n_wh_write_failed));
  85. seq_printf(m, "Retries: rq=%u rs=%u wq=%u ws=%u\n",
  86. atomic_read(&netfs_n_rh_retry_read_req),
  87. atomic_read(&netfs_n_rh_retry_read_subreq),
  88. atomic_read(&netfs_n_wh_retry_write_req),
  89. atomic_read(&netfs_n_wh_retry_write_subreq));
  90. seq_printf(m, "Objs : rr=%u sr=%u foq=%u wsc=%u\n",
  91. atomic_read(&netfs_n_rh_rreq),
  92. atomic_read(&netfs_n_rh_sreq),
  93. atomic_read(&netfs_n_folioq),
  94. atomic_read(&netfs_n_wh_wstream_conflict));
  95. seq_printf(m, "WbLock : skip=%u wait=%u\n",
  96. atomic_read(&netfs_n_wb_lock_skip),
  97. atomic_read(&netfs_n_wb_lock_wait));
  98. return fscache_stats_show(m);
  99. }
  100. EXPORT_SYMBOL(netfs_stats_show);