~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/xfs/xfs_stats.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 /*
  3  * Copyright (c) 2000,2005 Silicon Graphics, Inc.
  4  * All Rights Reserved.
  5  */
  6 #ifndef __XFS_STATS_H__
  7 #define __XFS_STATS_H__
  8 
  9 
 10 #include <linux/percpu.h>
 11 
 12 /*
 13  * The btree stats arrays have fixed offsets for the different stats. We
 14  * store the base index in the btree cursor via XFS_STATS_CALC_INDEX() and
 15  * that allows us to use fixed offsets into the stats array for each btree
 16  * stat. These index offsets are defined in the order they will be emitted
 17  * in the stats files, so it is possible to add new btree stat types by
 18  * appending to the enum list below.
 19  */
 20 enum {
 21         __XBTS_lookup = 0,
 22         __XBTS_compare = 1,
 23         __XBTS_insrec = 2,
 24         __XBTS_delrec = 3,
 25         __XBTS_newroot = 4,
 26         __XBTS_killroot = 5,
 27         __XBTS_increment = 6,
 28         __XBTS_decrement = 7,
 29         __XBTS_lshift = 8,
 30         __XBTS_rshift = 9,
 31         __XBTS_split = 10,
 32         __XBTS_join = 11,
 33         __XBTS_alloc = 12,
 34         __XBTS_free = 13,
 35         __XBTS_moves = 14,
 36 
 37         __XBTS_MAX = 15,
 38 };
 39 
 40 /*
 41  * XFS global statistics
 42  */
 43 struct __xfsstats {
 44         uint32_t                xs_allocx;
 45         uint32_t                xs_allocb;
 46         uint32_t                xs_freex;
 47         uint32_t                xs_freeb;
 48         uint32_t                xs_abt_lookup;
 49         uint32_t                xs_abt_compare;
 50         uint32_t                xs_abt_insrec;
 51         uint32_t                xs_abt_delrec;
 52         uint32_t                xs_blk_mapr;
 53         uint32_t                xs_blk_mapw;
 54         uint32_t                xs_blk_unmap;
 55         uint32_t                xs_add_exlist;
 56         uint32_t                xs_del_exlist;
 57         uint32_t                xs_look_exlist;
 58         uint32_t                xs_cmp_exlist;
 59         uint32_t                xs_bmbt_lookup;
 60         uint32_t                xs_bmbt_compare;
 61         uint32_t                xs_bmbt_insrec;
 62         uint32_t                xs_bmbt_delrec;
 63         uint32_t                xs_dir_lookup;
 64         uint32_t                xs_dir_create;
 65         uint32_t                xs_dir_remove;
 66         uint32_t                xs_dir_getdents;
 67         uint32_t                xs_trans_sync;
 68         uint32_t                xs_trans_async;
 69         uint32_t                xs_trans_empty;
 70         uint32_t                xs_ig_attempts;
 71         uint32_t                xs_ig_found;
 72         uint32_t                xs_ig_frecycle;
 73         uint32_t                xs_ig_missed;
 74         uint32_t                xs_ig_dup;
 75         uint32_t                xs_ig_reclaims;
 76         uint32_t                xs_ig_attrchg;
 77         uint32_t                xs_log_writes;
 78         uint32_t                xs_log_blocks;
 79         uint32_t                xs_log_noiclogs;
 80         uint32_t                xs_log_force;
 81         uint32_t                xs_log_force_sleep;
 82         uint32_t                xs_try_logspace;
 83         uint32_t                xs_sleep_logspace;
 84         uint32_t                xs_push_ail;
 85         uint32_t                xs_push_ail_success;
 86         uint32_t                xs_push_ail_pushbuf;
 87         uint32_t                xs_push_ail_pinned;
 88         uint32_t                xs_push_ail_locked;
 89         uint32_t                xs_push_ail_flushing;
 90         uint32_t                xs_push_ail_restarts;
 91         uint32_t                xs_push_ail_flush;
 92         uint32_t                xs_xstrat_quick;
 93         uint32_t                xs_xstrat_split;
 94         uint32_t                xs_write_calls;
 95         uint32_t                xs_read_calls;
 96         uint32_t                xs_attr_get;
 97         uint32_t                xs_attr_set;
 98         uint32_t                xs_attr_remove;
 99         uint32_t                xs_attr_list;
100         uint32_t                xs_iflush_count;
101         uint32_t                xs_icluster_flushcnt;
102         uint32_t                xs_icluster_flushinode;
103         uint32_t                vn_active;      /* # vnodes not on free lists */
104         uint32_t                vn_alloc;       /* # times vn_alloc called */
105         uint32_t                vn_get;         /* # times vn_get called */
106         uint32_t                vn_hold;        /* # times vn_hold called */
107         uint32_t                vn_rele;        /* # times vn_rele called */
108         uint32_t                vn_reclaim;     /* # times vn_reclaim called */
109         uint32_t                vn_remove;      /* # times vn_remove called */
110         uint32_t                vn_free;        /* # times vn_free called */
111         uint32_t                xb_get;
112         uint32_t                xb_create;
113         uint32_t                xb_get_locked;
114         uint32_t                xb_get_locked_waited;
115         uint32_t                xb_busy_locked;
116         uint32_t                xb_miss_locked;
117         uint32_t                xb_page_retries;
118         uint32_t                xb_page_found;
119         uint32_t                xb_get_read;
120 /* Version 2 btree counters */
121         uint32_t                xs_abtb_2[__XBTS_MAX];
122         uint32_t                xs_abtc_2[__XBTS_MAX];
123         uint32_t                xs_bmbt_2[__XBTS_MAX];
124         uint32_t                xs_ibt_2[__XBTS_MAX];
125         uint32_t                xs_fibt_2[__XBTS_MAX];
126         uint32_t                xs_rmap_2[__XBTS_MAX];
127         uint32_t                xs_refcbt_2[__XBTS_MAX];
128         uint32_t                xs_rmap_mem_2[__XBTS_MAX];
129         uint32_t                xs_rcbag_2[__XBTS_MAX];
130         uint32_t                xs_qm_dqreclaims;
131         uint32_t                xs_qm_dqreclaim_misses;
132         uint32_t                xs_qm_dquot_dups;
133         uint32_t                xs_qm_dqcachemisses;
134         uint32_t                xs_qm_dqcachehits;
135         uint32_t                xs_qm_dqwants;
136         uint32_t                xs_qm_dquot;
137         uint32_t                xs_qm_dquot_unused;
138 /* Extra precision counters */
139         uint64_t                xs_xstrat_bytes;
140         uint64_t                xs_write_bytes;
141         uint64_t                xs_read_bytes;
142         uint64_t                defer_relog;
143 };
144 
145 #define xfsstats_offset(f)      (offsetof(struct __xfsstats, f)/sizeof(uint32_t))
146 
147 struct xfsstats {
148         union {
149                 struct __xfsstats       s;
150                 uint32_t                a[xfsstats_offset(xs_qm_dquot)];
151         };
152 };
153 
154 /*
155  * simple wrapper for getting the array index of s struct member offset
156  */
157 #define XFS_STATS_CALC_INDEX(member)    \
158         (offsetof(struct __xfsstats, member) / (int)sizeof(uint32_t))
159 
160 
161 int xfs_stats_format(struct xfsstats __percpu *stats, char *buf);
162 void xfs_stats_clearall(struct xfsstats __percpu *stats);
163 extern struct xstats xfsstats;
164 
165 #define XFS_STATS_INC(mp, v)                                    \
166 do {                                                            \
167         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v++;   \
168         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v++;        \
169 } while (0)
170 
171 #define XFS_STATS_DEC(mp, v)                                    \
172 do {                                                            \
173         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v--;   \
174         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v--;        \
175 } while (0)
176 
177 #define XFS_STATS_ADD(mp, v, inc)                                       \
178 do {                                                                    \
179         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v += (inc);    \
180         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v += (inc); \
181 } while (0)
182 
183 #define XFS_STATS_INC_OFF(mp, off)                              \
184 do {                                                            \
185         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off]++;        \
186         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off]++;     \
187 } while (0)
188 
189 #define XFS_STATS_DEC_OFF(mp, off)                                      \
190 do {                                                            \
191         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off];  \
192         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off];       \
193 } while (0)
194 
195 #define XFS_STATS_ADD_OFF(mp, off, inc)                                 \
196 do {                                                                    \
197         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off] += (inc); \
198         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off] += (inc);      \
199 } while (0)
200 
201 #if defined(CONFIG_PROC_FS)
202 
203 extern int xfs_init_procfs(void);
204 extern void xfs_cleanup_procfs(void);
205 
206 
207 #else   /* !CONFIG_PROC_FS */
208 
209 static inline int xfs_init_procfs(void)
210 {
211         return 0;
212 }
213 
214 static inline void xfs_cleanup_procfs(void)
215 {
216 }
217 
218 #endif  /* !CONFIG_PROC_FS */
219 
220 #endif /* __XFS_STATS_H__ */
221 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php