};
enum {
- BRW_R_PAGES = 0,
- BRW_W_PAGES,
- BRW_R_RPC_HIST,
- BRW_W_RPC_HIST,
- BRW_R_IO_TIME,
- BRW_W_IO_TIME,
- BRW_R_DISCONT_PAGES,
- BRW_W_DISCONT_PAGES,
- BRW_R_DISCONT_BLOCKS,
- BRW_W_DISCONT_BLOCKS,
- BRW_R_DISK_IOSIZE,
- BRW_W_DISK_IOSIZE,
- BRW_R_DIO_FRAGS,
- BRW_W_DIO_FRAGS,
- BRW_LAST,
-};
-
-struct brw_stats {
- struct obd_histogram hist[BRW_LAST];
-};
-
-enum {
RENAME_SAMEDIR_SIZE = 0,
RENAME_CROSSDIR_SRC_SIZE,
RENAME_CROSSDIR_TGT_SIZE,
};
struct rename_stats {
- struct obd_histogram hist[RENAME_LAST];
+ ktime_t rs_init;
+ struct obd_histogram rs_hist[RENAME_LAST];
};
/* An lprocfs counter can be configured using the enum bit masks below.
/* 1 + the biggest cpu # whose ls_percpu slot has been allocated */
unsigned short ls_biggest_alloc_num;
enum lprocfs_stats_flags ls_flags;
+ ktime_t ls_init;
/* Lock used when there are no percpu stats areas; For percpu stats,
* it is used to protect ls_biggest_alloc_num change */
spinlock_t ls_lock;
EXTRA_LAST_OPC
};
+#ifdef HAVE_SERVER_SUPPORT
+enum brw_rw_stats {
+ BRW_R_PAGES = 0,
+ BRW_W_PAGES,
+ BRW_R_DISCONT_PAGES,
+ BRW_W_DISCONT_PAGES,
+ BRW_R_DISCONT_BLOCKS,
+ BRW_W_DISCONT_BLOCKS,
+ BRW_R_DIO_FRAGS,
+ BRW_W_DIO_FRAGS,
+ BRW_R_RPC_HIST,
+ BRW_W_RPC_HIST,
+ BRW_R_IO_TIME,
+ BRW_W_IO_TIME,
+ BRW_R_DISK_IOSIZE,
+ BRW_W_DISK_IOSIZE,
+ BRW_RW_STATS_NUM,
+};
+
+struct brw_stats_props {
+ const char *bsp_name;
+ const char *bsp_units;
+ bool bsp_scale;
+};
+
+struct brw_stats {
+ ktime_t bs_init;
+ struct obd_histogram bs_hist[BRW_RW_STATS_NUM];
+ struct brw_stats_props bs_props[BRW_RW_STATS_NUM / 2];
+};
+
+void ldebugfs_register_osd_stats(struct dentry *parent,
+ struct brw_stats *brw_stats,
+ struct lprocfs_stats *stats);
+#endif /* HAVE_SERVER_SUPPORT */
+
#define EXTRA_FIRST_OPC LDLM_GLIMPSE_ENQUEUE
/* class_obd.c */
extern struct proc_dir_entry *proc_lustre_root;
extern struct kset *lustre_kset;
struct obd_device;
-struct obd_histogram;
#define JOBSTATS_JOBID_VAR_MAX_LEN 20
#define JOBSTATS_DISABLE "disable"
struct cfs_hash *ojs_hash; /* hash of jobids */
struct list_head ojs_list; /* list of job_stat structs */
rwlock_t ojs_lock; /* protect ojs_list/js_list */
- unsigned int ojs_cleanup_interval;/* seconds before expiry */
- time64_t ojs_last_cleanup; /* previous cleanup time */
+ ktime_t ojs_cleanup_interval;/* 1/2 expiry seconds */
+ ktime_t ojs_cleanup_last;/* previous cleanup time */
cntr_init_callback ojs_cntr_init_fn;/* lprocfs_stats initializer */
unsigned short ojs_cntr_num; /* number of stats in struct */
bool ojs_cleaning; /* currently expiring stats */
extern int lprocfs_obd_seq_create(struct obd_device *obd, const char *name,
mode_t mode, const struct proc_ops *seq_fops,
void *data);
+extern void lprocfs_stats_header(struct seq_file *seq, ktime_t now,
+ ktime_t ts_init, int width, const char *colon,
+ bool show_units);
/* Generic callbacks */
extern int lprocfs_uuid_seq_show(struct seq_file *m, void *data);
ssize_t lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *off);
-int lprocfs_obd_short_io_bytes_seq_show(struct seq_file *m, void *data);
-ssize_t lprocfs_obd_short_io_bytes_seq_write(struct file *file,
- const char __user *buffer,
- size_t count, loff_t *off);
ssize_t short_io_bytes_show(struct kobject *kobj, struct attribute *attr,
char *buf);
ssize_t short_io_bytes_store(struct kobject *kobj, struct attribute *attr,