ocfs2: Use hrtimer to track ocfs2 fs lock stats
Patch makes use of the hrtimer to track times in ocfs2 lock stats. The patch is a bit involved to ensure no additional impact on the memory footprint. The size of ocfs2_inode_cache remains 1280 bytes on 32-bit systems. A related change was to modify the unit of the max wait time from nanosec to microsec allowing us to track max time larger than 4 secs. This change necessitated the bumping of the output version in the debugfs file, locking_state, from 2 to 3. Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com> Signed-off-by: Joel Becker <jlbec@evilplan.org>
此提交包含在:
@@ -147,6 +147,17 @@ struct ocfs2_lock_res_ops;
|
||||
|
||||
typedef void (*ocfs2_lock_callback)(int status, unsigned long data);
|
||||
|
||||
#ifdef CONFIG_OCFS2_FS_STATS
|
||||
struct ocfs2_lock_stats {
|
||||
u64 ls_total; /* Total wait in NSEC */
|
||||
u32 ls_gets; /* Num acquires */
|
||||
u32 ls_fail; /* Num failed acquires */
|
||||
|
||||
/* Storing max wait in usecs saves 24 bytes per inode */
|
||||
u32 ls_max; /* Max wait in USEC */
|
||||
};
|
||||
#endif
|
||||
|
||||
struct ocfs2_lock_res {
|
||||
void *l_priv;
|
||||
struct ocfs2_lock_res_ops *l_ops;
|
||||
@@ -182,15 +193,9 @@ struct ocfs2_lock_res {
|
||||
struct list_head l_debug_list;
|
||||
|
||||
#ifdef CONFIG_OCFS2_FS_STATS
|
||||
unsigned long long l_lock_num_prmode; /* PR acquires */
|
||||
unsigned long long l_lock_num_exmode; /* EX acquires */
|
||||
unsigned int l_lock_num_prmode_failed; /* Failed PR gets */
|
||||
unsigned int l_lock_num_exmode_failed; /* Failed EX gets */
|
||||
unsigned long long l_lock_total_prmode; /* Tot wait for PR */
|
||||
unsigned long long l_lock_total_exmode; /* Tot wait for EX */
|
||||
unsigned int l_lock_max_prmode; /* Max wait for PR */
|
||||
unsigned int l_lock_max_exmode; /* Max wait for EX */
|
||||
unsigned int l_lock_refresh; /* Disk refreshes */
|
||||
struct ocfs2_lock_stats l_lock_prmode; /* PR mode stats */
|
||||
u32 l_lock_refresh; /* Disk refreshes */
|
||||
struct ocfs2_lock_stats l_lock_exmode; /* EX mode stats */
|
||||
#endif
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
struct lockdep_map l_lockdep_map;
|
||||
|
新增問題並參考
封鎖使用者