Statistic Module Shuanglong Zhang 04/23/2013
Overview Device Mapper procfs bio control
Device Mapper A mechanism from linux 2.6 The base of LVM, RAID dm-linear dm-statistic
Can be infinite iteration Don't do this!
My implementation dm-statistic
procfs Used to "communicate" with user space /proc/statistic /proc/jiffies A drawback of procfs
Drawback Can not exceed one page size How to deal with large data seq_file
seq_file interface Deal with large data, work with procfs Abstract those data to a mount of items –(array, list, hash) Simplify the read operation
static struct seq_operations seq_ops = {.start = statistic_seq_start,.next = statistic_seq_next,.stop = statistic_seq_stop,.show = statistic_seq_show }; start->show->next->show->...->next->show->stop
static struct file_operations seq_fops = {.owner= THIS_MODULE,.open= statistic_open,.read= seq_read, //.write= seq_write,.llseek= seq_lseek,.release= seq_release, };
static int statistic_open(struct inode *inode, struct file *file) { return (seq_open(file, &seq_ops)); }
Control on bio Diffrent ways to do it –These kind of control can happen at any stage from a request begins to it ends. - VFS - FS - DM - BLOCK
In device mapper A bio comes in Map the bio to the dest –delay it if necessary(read, full) –until there is another room for a bio Go into block layer
Delay Create another list for write bio Track back to x bios or 1 second Wait till there is less then x bios in past second controled by a module parameter
User space tool dmsetup statistic
dmsetup dmsetup [linear/stripe/statistic] /dev/sda10 dmsetup remove /dev/mapper/statistic use sudo!
statistic Get the statistic info from /proc/statistic Two ways of querying –last x second –from x second to y second Total, Read, Write
Left Problems module parameter ioctl function(reset base_time) more info on bio
Demo
Q & A