1/* 2 * coda_statis.h 3 * 4 * CODA operation statistics 5 * 6 * (c) March, 1998 7 * by Michihiro Kuramochi, Zhenyu Xia and Zhanyong Wan 8 * zhanyong.wan@yale.edu 9 * 10 */ 11 12#ifndef _CODA_PROC_H 13#define _CODA_PROC_H 14 15void coda_sysctl_init(void); 16void coda_sysctl_clean(void); 17void coda_upcall_stats(int opcode, unsigned long jiffies); 18 19#include <linux/sysctl.h> 20#include <linux/coda_fs_i.h> 21#include <linux/coda.h> 22 23/* these four files are presented to show the result of the statistics: 24 * 25 * /proc/fs/coda/vfs_stats 26 * upcall_stats 27 * permission_stats 28 * cache_inv_stats 29 * 30 * these four files are presented to reset the statistics to 0: 31 * 32 * /proc/sys/coda/vfs_stats 33 * upcall_stats 34 * permission_stats 35 * cache_inv_stats 36 */ 37 38/* VFS operation statistics */ 39struct coda_vfs_stats 40{ 41 /* file operations */ 42 int open; 43 int flush; 44 int release; 45 int fsync; 46 47 /* dir operations */ 48 int readdir; 49 50 /* inode operations */ 51 int create; 52 int lookup; 53 int link; 54 int unlink; 55 int symlink; 56 int mkdir; 57 int rmdir; 58 int rename; 59 int permission; 60 61 /* symlink operatoins*/ 62 int follow_link; 63 int readlink; 64}; 65 66struct coda_upcall_stats_entry 67{ 68 int count; 69 unsigned long time_sum; 70 unsigned long time_squared_sum; 71}; 72 73 74 75/* cache hits for permissions statistics */ 76struct coda_permission_stats 77{ 78 int count; 79 int hit_count; 80}; 81 82/* cache invalidation statistics */ 83struct coda_cache_inv_stats 84{ 85 int flush; 86 int purge_user; 87 int zap_dir; 88 int zap_file; 89 int zap_vnode; 90 int purge_fid; 91 int replace; 92}; 93 94/* these global variables hold the actual statistics data */ 95extern struct coda_vfs_stats coda_vfs_stat; 96extern struct coda_permission_stats coda_permission_stat; 97extern struct coda_cache_inv_stats coda_cache_inv_stat; 98extern int coda_upcall_timestamping; 99 100/* reset statistics to 0 */ 101void reset_coda_vfs_stats( void ); 102void reset_coda_upcall_stats( void ); 103void reset_coda_permission_stats( void ); 104void reset_coda_cache_inv_stats( void ); 105 106/* some utitlities to make it easier for you to do statistics for time */ 107void do_time_stats( struct coda_upcall_stats_entry * pentry, 108 unsigned long jiffy ); 109/* 110double get_time_average( const struct coda_upcall_stats_entry * pentry ); 111double get_time_std_deviation( const struct coda_upcall_stats_entry * pentry ); 112*/ 113unsigned long get_time_average( const struct coda_upcall_stats_entry * pentry ); 114unsigned long get_time_std_deviation( const struct coda_upcall_stats_entry * pentry ); 115 116/* like coda_dointvec, these functions are to be registered in the ctl_table 117 * data structure for /proc/sys/... files 118 */ 119int do_reset_coda_vfs_stats( ctl_table * table, int write, struct file * filp, 120 void * buffer, size_t * lenp ); 121int do_reset_coda_upcall_stats( ctl_table * table, int write, 122 struct file * filp, void * buffer, 123 size_t * lenp ); 124int do_reset_coda_permission_stats( ctl_table * table, int write, 125 struct file * filp, void * buffer, 126 size_t * lenp ); 127int do_reset_coda_cache_inv_stats( ctl_table * table, int write, 128 struct file * filp, void * buffer, 129 size_t * lenp ); 130 131/* these functions are called to form the content of /proc/fs/coda/... files */ 132int coda_vfs_stats_get_info( char * buffer, char ** start, off_t offset, 133 int length); 134int coda_upcall_stats_get_info( char * buffer, char ** start, off_t offset, 135 int length); 136int coda_permission_stats_get_info( char * buffer, char ** start, off_t offset, 137 int length); 138int coda_cache_inv_stats_get_info( char * buffer, char ** start, off_t offset, 139 int length); 140 141 142#endif /* _CODA_PROC_H */ 143