Re: [PATCH] per process I/O statistics for userspace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

 You're right. Also, this information differs from other ones. So,
putting it into another file makes sense.
  Here is the better one which puts statistics in a file called iostat.

================================================================
--- linux-2.6.13/fs/proc/array.c.org    2005-08-29 02:41:01.000000000 +0300
+++ linux-2.6.13/fs/proc/array.c        2005-09-14 22:05:16.000000000 +0300
@@ -482,3 +482,8 @@ int proc_pid_statm(struct task_struct *t
        return sprintf(buffer,"%d %d %d %d %d %d %d\n",
                       size, resident, shared, text, lib, data, 0);
 }
+
+int proc_pid_iostat(struct task_struct *task, char *buffer)
+{
+       return sprintf(buffer,"%llu %llu\n",task->rchar,task->wchar);
+}
--- linux-2.6.13/fs/proc/base.c.org     2005-08-29 02:41:01.000000000 +0300
+++ linux-2.6.13/fs/proc/base.c 2005-09-14 22:04:03.000000000 +0300
@@ -86,6 +86,7 @@ enum pid_directory_inos {
        PROC_TGID_FD_DIR,
        PROC_TGID_OOM_SCORE,
        PROC_TGID_OOM_ADJUST,
+       PROC_TGID_IOSTAT,
        PROC_TID_INO,
        PROC_TID_STATUS,
        PROC_TID_MEM,
@@ -123,6 +124,7 @@ enum pid_directory_inos {
        PROC_TID_FD_DIR = 0x8000,       /* 0x8000-0xffff */
        PROC_TID_OOM_SCORE,
        PROC_TID_OOM_ADJUST,
+       PROC_TID_IOSTAT,
 };

  struct pid_entry {
@@ -169,6 +171,7 @@ static struct pid_entry tgid_base_stuff[
  #ifdef CONFIG_AUDITSYSCALL
        E(PROC_TGID_LOGINUID, "loginuid", S_IFREG|S_IWUSR|S_IRUGO),
  #endif
+       E(PROC_TGID_IOSTAT,    "iostat",   S_IFREG|S_IRUGO),
        {0,0,NULL,0}
 };
  static struct pid_entry tid_base_stuff[] = {
@@ -205,6 +208,7 @@ static struct pid_entry tid_base_stuff[]
  #ifdef CONFIG_AUDITSYSCALL
        E(PROC_TID_LOGINUID, "loginuid", S_IFREG|S_IWUSR|S_IRUGO),
  #endif
+       E(PROC_TID_IOSTAT,     "iostat",   S_IFREG|S_IRUGO),
        {0,0,NULL,0}
 };

@@ -1596,6 +1600,11 @@ static struct dentry *proc_pident_lookup
                        inode->i_fop = &proc_loginuid_operations;
                        break;
  #endif
+               case PROC_TID_IOSTAT:
+               case PROC_TGID_IOSTAT:
+                       inode->i_fop = &proc_info_file_operations;
+                       ei->op.proc_read = proc_pid_iostat;
+                       break;
                default:
                        printk("procfs: impossible type (%d)",p->type);
                        iput(inode);
--- linux-2.6.13/fs/proc/internal.h.org 2005-09-14 22:07:07.000000000 +0300
+++ linux-2.6.13/fs/proc/internal.h     2005-09-14 22:06:41.000000000 +0300
@@ -36,6 +36,7 @@ extern int proc_tid_stat(struct task_str
  extern int proc_tgid_stat(struct task_struct *, char *);
  extern int proc_pid_status(struct task_struct *, char *);
  extern int proc_pid_statm(struct task_struct *, char *);
+extern int proc_pid_iostat(struct task_struct *, char *);

  static inline struct task_struct *proc_task(struct inode *inode)
 {
=================================================================

On 9/14/05, Pavel Machek <[email protected]> wrote:
> Hi!
> 
> > with following patch, userspace processes/utilities will be able to
> > access per process I/O statistics. for example, top like utilites can
> > use this information.
> 
> Nice, but should not this perhaps go into the other file? Adding more
> integers into long line does not seem nice...
>                                                                         Pavel
> 
> >
> > --- linux-2.6.13/fs/proc/array.c.org    2005-08-29 02:41:01.000000000 +0300
> > +++ linux-2.6.13/fs/proc/array.c        2005-09-12 10:22:55.000000000 +0300
> > @@ -408,7 +408,7 @@ static int do_task_stat(struct task_stru
> >
> >         res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \
> >  %lu %lu %lu %lu %lu %ld %ld %ld %ld %d %ld %llu %lu %ld %lu %lu %lu %lu %lu \
> > -%lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu\n",
> > +%lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu %llu %llu\n",
> >                 task->pid,
> >                 tcomm,
> >                 state,
> > @@ -453,7 +453,9 @@ static int do_task_stat(struct task_stru
> >                 task->exit_signal,
> >                 task_cpu(task),
> >                 task->rt_priority,
> > -               task->policy);
> > +               task->policy,
> > +               task->rchar,
> > +               task->wchar);
> >         if(mm)
> >                 mmput(mm);
> >         return res;
> > --
> > Signed-off-by: Levent Serinol <[email protected]>
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to [email protected]
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
> 
> --
> if you have sharp zaurus hardware you don't need... you know my address
> 


-- 

Stay out of the road, if you want to grow old. 
~ Pink Floyd ~.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux