17 Oct, 2008

1 commit


28 Jul, 2008

2 commits

  • Simplify the code of include/linux/task_io_accounting.h.

    It is also more reasonable to have all the task i/o-related statistics in a
    single struct (task_io_accounting).

    Signed-off-by: Andrea Righi
    Signed-off-by: Oleg Nesterov
    Signed-off-by: Linus Torvalds

    Andrea Righi
     
  • Put all i/o statistics in struct proc_io_accounting and use inline functions to
    initialize and increment statistics, removing a lot of single variable
    assignments.

    This also reduces the kernel size as following (with CONFIG_TASK_XACCT=y and
    CONFIG_TASK_IO_ACCOUNTING=y).

    text data bss dec hex filename
    11651 0 0 11651 2d83 kernel/exit.o.before
    11619 0 0 11619 2d63 kernel/exit.o.after
    10886 132 136 11154 2b92 kernel/fork.o.before
    10758 132 136 11026 2b12 kernel/fork.o.after

    3082029 807968 4818600 8708597 84e1f5 vmlinux.o.before
    3081869 807968 4818600 8708437 84e155 vmlinux.o.after

    Signed-off-by: Andrea Righi
    Acked-by: Oleg Nesterov
    Signed-off-by: Linus Torvalds

    Andrea Righi
     

11 Dec, 2006

1 commit

  • The present per-task IO accounting isn't very useful. It simply counts the
    number of bytes passed into read() and write(). So if a process reads 1MB
    from an already-cached file, it is accused of having performed 1MB of I/O,
    which is wrong.

    (David Wright had some comments on the applicability of the present logical IO accounting:

    For billing purposes it is useless but for workload analysis it is very
    useful

    read_bytes/read_calls average read request size
    write_bytes/write_calls average write request size

    read_bytes/read_blocks ie logical/physical can indicate hit rate or thrashing
    write_bytes/write_blocks ie logical/physical guess since pdflush writes can
    be missed

    I often look for logical larger than physical to see filesystem cache
    problems. And the bytes/cpusec can help find applications that are
    dominating the cache and causing slow interactive response from page cache
    contention.

    I want to find the IO intensive applications and make sure they are doing
    efficient IO. Thus the acctcms(sysV) or csacms command would give the high
    IO commands).

    This patchset adds new accounting which tries to be more accurate. We account
    for three things:

    reads:

    attempt to count the number of bytes which this process really did cause
    to be fetched from the storage layer. Done at the submit_bio() level, so it
    is accurate for block-backed filesystems. I also attempt to wire up NFS and
    CIFS.

    writes:

    attempt to count the number of bytes which this process caused to be sent
    to the storage layer. This is done at page-dirtying time.

    The big inaccuracy here is truncate. If a process writes 1MB to a file
    and then deletes the file, it will in fact perform no writeout. But it will
    have been accounted as having caused 1MB of write.

    So...

    cancelled_writes:

    account the number of bytes which this process caused to not happen, by
    truncating pagecache.

    We _could_ just subtract this from the process's `write' accounting. But
    that means that some processes would be reported to have done negative
    amounts of write IO, which is silly.

    So we just report the raw number and punt this decision up to userspace.

    Now, we _could_ account for writes at the physical I/O level. But

    - This would require that we track memory-dirtying tasks at the per-page
    level (would require a new pointer in struct page).

    - It would mean that IO statistics for a process are usually only available
    long after that process has exitted. Which means that we probably cannot
    communicate this info via taskstats.

    This patch:

    Wire up the kernel-private data structures and the accessor functions to
    manipulate them.

    Cc: Jay Lan
    Cc: Shailabh Nagar
    Cc: Balbir Singh
    Cc: Chris Sturtivant
    Cc: Tony Ernst
    Cc: Guillaume Thouvenin
    Cc: David Wright
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton