The patch titled io-accounting: remove current io accounting has been removed from the -mm tree. Its filename was io-accounting-remove-current-io-accounting.patch This patch was dropped because it is obsolete ------------------------------------------------------ Subject: io-accounting: remove current io accounting From: Andrew Morton <akpm@xxxxxxxx> The present per-task IO accounting is unusable. 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 hopelessly wrong. This patchset removes the old IO accounting and replaces it with 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 writes: attempt to count the number of bytes which this process caused to be sent to the storage layer. 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. There are some open questions: - What the heck's going on with userspace? The example getdelays.c appears to exercise no more than a fraction of the taskstats interface. How do I get at my numbers? - Missing accounting of filesystem metadata reads - Filesystems which implement private a_ops.readpages might need work. - What to do about things like NFS? It will probably presently account _some_ IO, but it'll be wrong. This patch: Remove the old IO accounting, but leave the fields in the taskstats structure in-place, but zeroed. Cc: Jay Lan <jlan@xxxxxxx> Cc: Shailabh Nagar <nagar@xxxxxxxxxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxx> Cc: Chris Sturtivant <csturtiv@xxxxxxx> Cc: Tony Ernst <tee@xxxxxxx> Cc: Guillaume Thouvenin <guillaume.thouvenin@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/read_write.c | 18 ++---------------- include/linux/sched.h | 4 ++-- kernel/fork.c | 2 -- kernel/tsacct.c | 4 ++-- 4 files changed, 6 insertions(+), 22 deletions(-) diff -puN fs/read_write.c~io-accounting-remove-current-io-accounting fs/read_write.c --- a/fs/read_write.c~io-accounting-remove-current-io-accounting +++ a/fs/read_write.c @@ -272,10 +272,8 @@ ssize_t vfs_read(struct file *file, char ret = file->f_op->read(file, buf, count, pos); else ret = do_sync_read(file, buf, count, pos); - if (ret > 0) { + if (ret > 0) fsnotify_access(file->f_dentry); - current->rchar += ret; - } current->syscr++; } } @@ -330,10 +328,8 @@ ssize_t vfs_write(struct file *file, con ret = file->f_op->write(file, buf, count, pos); else ret = do_sync_write(file, buf, count, pos); - if (ret > 0) { + if (ret > 0) fsnotify_modify(file->f_dentry); - current->wchar += ret; - } current->syscw++; } } @@ -675,9 +671,6 @@ sys_readv(unsigned long fd, const struct file_pos_write(file, pos); fput_light(file, fput_needed); } - - if (ret > 0) - current->rchar += ret; current->syscr++; return ret; } @@ -696,9 +689,6 @@ sys_writev(unsigned long fd, const struc file_pos_write(file, pos); fput_light(file, fput_needed); } - - if (ret > 0) - current->wchar += ret; current->syscw++; return ret; } @@ -780,10 +770,6 @@ static ssize_t do_sendfile(int out_fd, i retval = in_file->f_op->sendfile(in_file, ppos, count, file_send_actor, out_file); - if (retval > 0) { - current->rchar += retval; - current->wchar += retval; - } current->syscr++; current->syscw++; diff -puN include/linux/sched.h~io-accounting-remove-current-io-accounting include/linux/sched.h --- a/include/linux/sched.h~io-accounting-remove-current-io-accounting +++ a/include/linux/sched.h @@ -1002,8 +1002,8 @@ struct task_struct { * to a stack based synchronous wait) if its doing sync IO. */ wait_queue_t *io_wait; -/* i/o counters(bytes read/written, #syscalls */ - u64 rchar, wchar, syscr, syscw; + u64 syscr; /* number of read syscalls */ + u64 syscw; /* number of write syscalls */ #if defined(CONFIG_TASK_XACCT) u64 acct_rss_mem1; /* accumulated rss usage */ u64 acct_vm_mem1; /* accumulated virtual memory usage */ diff -puN kernel/fork.c~io-accounting-remove-current-io-accounting kernel/fork.c --- a/kernel/fork.c~io-accounting-remove-current-io-accounting +++ a/kernel/fork.c @@ -1051,8 +1051,6 @@ static struct task_struct *copy_process( p->utime = cputime_zero; p->stime = cputime_zero; p->sched_time = 0; - p->rchar = 0; /* I/O counter: bytes read */ - p->wchar = 0; /* I/O counter: bytes written */ p->syscr = 0; /* I/O counter: read syscalls */ p->syscw = 0; /* I/O counter: write syscalls */ acct_clear_integrals(p); diff -puN kernel/tsacct.c~io-accounting-remove-current-io-accounting kernel/tsacct.c --- a/kernel/tsacct.c~io-accounting-remove-current-io-accounting +++ a/kernel/tsacct.c @@ -92,8 +92,8 @@ void xacct_add_tsk(struct taskstats *sta stats->hiwater_vm = mm->hiwater_vm * PAGE_SIZE / KB; mmput(mm); } - stats->read_char = p->rchar; - stats->write_char = p->wchar; + stats->read_char = 0; + stats->write_char = 0; stats->read_syscalls = p->syscr; stats->write_syscalls = p->syscw; } _ Patches currently in -mm which might be from akpm@xxxxxxxx are origin.patch tty-signal-tty-locking.patch pktcdvd-bio-write-congestion-using-blk_congestion_wait.patch fsstack-introduce-fsstack_copy_attrinode_.patch log2-implement-a-general-integer-log2-facility-in-the-kernel.patch add-process_session-helper-routine-deprecate-old-field.patch mxser-session-warning-fix.patch mxser-workqueue-fixes.patch tty-switch-to-ktermios-and-new-framework.patch tty-switch-to-ktermios.patch tty_ioctl-use-termios-for-the-old-structure-and-termios2.patch drivers-isdn-handcrafted-min-max-macro-removal.patch fault-injection-capabilities-infrastructure.patch fault-injection-Kconfig-cleanup.patch fault-injection-stacktrace-filtering-kconfig-fix.patch sysctl-fix-sys_sysctl-interface-of-ipc-sysctls.patch video-get-the-default-mode-from-the-right-database.patch various-fbdev-files-mark-structs.patch backlight-lcd-remove-dependenct-from-the-framebuffer-layer.patch gxfb-fixups-for-the-amd-geode-gx.patch gxfb-support-flat-panel-timings.patch gxfb-support-command-line-options.patch proc_misc-build-fix.patch revert-generic_file_buffered_write-handle-zero-length-iovec-segments.patch revert-generic_file_buffered_write-deadlock-on-vectored-write.patch generic_file_buffered_write-cleanup.patch mm-fix-pagecache-write-deadlocks.patch fs-prepare_write-fixes-fuse-fix.patch fs-prepare_write-fixes-fat-fix.patch macintosh-mangle-caps-lock-events-on-adb-keyboards.patch git-acpi.patch git-acpi-fixup.patch acpi-dont-select-pm.patch implementation-of-acpi_video_get_next_level.patch video-sysfs-support-take-2-add-dev-argument-for-backlight_device_register.patch sony_apci-resume.patch video-sysfs-support-take-2-add-dev-argument-for-backlight_device_register-sony_acpi-fix.patch git-alsa.patch git-alsa-fixup.patch alsa-workqueue-fixes.patch git-cpufreq-prep.patch git-cpufreq.patch git-cpufreq-fixup.patch platform_driver_probe-can-save-codespace-save-codespace.patch git-drm.patch git-dvb.patch git-dvb-fixup.patch git-input-vs-git-alsa.patch kbuild-fix-rr-is-now-default.patch pata_cs5530-suspend-resume-support-tweak.patch pata_sil680-suspend-resume-tidy.patch pata_via-suspend-resume-support-fix.patch pata_it8213-add-new-driver-for-the-it8213-card.patch git-lxdialog-fixup.patch git-mmc-fixup.patch git-mmc-tifm_sd-warning-fix.patch git-mtd.patch git-mtd-ssfdc-build-fix.patch git-ubi.patch ubi-versus-add-include-linux-freezerh-and-move-definitions-from.patch update-smc91x-driver-with-arm-versatile-board-info.patch drivers-net-ns83820c-add-paramter-to-disable-auto.patch net-use-bitrev8.patch net-uninline-skb_put.patch ioat-warning-fix.patch pci-fix-multiple-problems-with-via-hardware.patch pci-legacy-resource-fix-tidy.patch git-s390.patch s390-workqueue-fixes.patch drivers-scsi-mca_53c9xc-save_flags-cli-removal.patch scsi-in2000-scsi_cmnd-convertion.patch aic79xx-wrong-max-memory-at-driver-init.patch scsi-cover-up-bugs-fix-up-compiler-warnings-in-megaraid-driver-fix.patch git-qla3xxx-fixup.patch nokia-e70-is-an-unusual-device.patch revert-x86_64-mm-add-genapic_force.patch revert-x86_64-mm-fix-the-irqbalance-quirk-for-e7320-e7520-e7525.patch x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code-tidy.patch x86_64-fix-boot-hang-due-to-nmi-watchdog-init-code-tidy-tidy-2.patch touchkit-ps-2-touchscreen-driver.patch node-aware-skb-allocation-fix-for-device-tree-changes.patch congestion-wait-dont-wait-when-there-are-no-pages-under-writeback.patch slab-use-a-multiply-instead-of-a-divide-in-obj_to_index-tweaks.patch deprecate-smbfs-in-favour-of-cifs.patch edac-new-opteron-athlon64-memory-controller-driver.patch drivers-add-lcd-support-3-Kconfig-fix.patch drivers-add-lcd-support-workqueue-fixups.patch touch_atime-cleanup.patch ocfs2-relative-atime-support-tweaks.patch optimize-o_direct-on-block-device-v3-tweak.patch add-retain_initrd-boot-option-tweak.patch workqueue-tweaks.patch workqueue-dont-hold-workqueue_mutex-in-flush_scheduled_work.patch implement-flush_work.patch aio-use-flush_work.patch kblockd-use-flush_work.patch relayfs-use-flush_keventd_work.patch tg3-use-flush_keventd_work.patch e1000-use-flush_keventd_work.patch libata-use-flush_work.patch phy-use-flush_work.patch bridge-avoid-using-noautorel-workqueues.patch io-accounting-core-statistics.patch clean-up-__set_page_dirty_nobuffers.patch io-accounting-write-accounting.patch io-accounting-write-cancel-accounting.patch io-accounting-read-accounting-2.patch io-accounting-read-accounting-nfs-fix.patch io-accounting-read-accounting-cifs-fix.patch io-accounting-direct-io.patch io-accounting-report-in-procfs.patch cleanup-taskstatsh.patch io-accounting-via-taskstats.patch getdelays-various-fixes.patch io-accounting-add-to-getdelays.patch move-page-writeback-acounting-out-of-macros.patch per-backing_dev-dirty-and-writeback-page-accounting.patch ext2-reservations.patch bug-test-1.patch sched-add-option-to-serialize-load-balancing-fix.patch kernel-schedc-whitespace-cleanups-more.patch sched2-sched-domain-sysctl-use-ctl_unnumbered.patch mm-implement-swap-prefetching-use-ctl_unnumbered.patch swap_prefetch-vs-zoned-counters.patch add-include-linux-freezerh-and-move-definitions-from-prefetch.patch readahead-kconfig-options-fix.patch readahead-minmax_ra_pages.patch readahead-sysctl-parameters.patch readahead-sysctl-parameters-use-ctl_unnumbered.patch readahead-context-based-method-locking-fix.patch readahead-context-based-method-locking-fix-2.patch readahead-call-scheme-ifdef-fix.patch readahead-call-scheme-build-fix.patch readahead-nfsd-case-fix.patch make-copy_from_user_inatomic-not-zero-the-tail-on-i386-vs-reiser4.patch resier4-add-include-linux-freezerh-and-move-definitions-from.patch make-kmem_cache_destroy-return-void-reiser4.patch reiser4-hardirq-include-fix.patch reiser4-run-truncate_inode_pages-in-reiser4_delete_inode.patch reiser4-get_sb_dev-fix.patch reiser4-vs-zoned-allocator.patch reiser4-temp-fix.patch reiser4-kmem_cache_t-removal.patch hpt3xx-rework-rate-filtering-tidy.patch jmicron-warning-fix.patch md-allow-reads-that-have-bypassed-the-cache-to-be-retried-on-failure-fix.patch statistics-infrastructure-fix-buffer-overflow-in-histogram-with-linear-tidy.patch extend-notifier_call_chain-to-count-nr_calls-made.patch extend-notifier_call_chain-to-count-nr_calls-made-fixes-2.patch define-and-use-new-eventscpu_lock_acquire-and-cpu_lock_release-fix.patch eliminate-lock_cpu_hotplug-in-kernel-schedc-fix.patch gtod-persistent-clock-support-i386.patch hrtimers-clean-up-locking-fix.patch updated-hrtimers-state-tracking.patch updated-i386-convert-to-clock-event-devices.patch updated-i386-convert-to-clock-event-devices-fix.patch updated-gtod-mark-tsc-unusable-for-highres-timers.patch round_jiffies-infrastructure-fix.patch clocksource-small-cleanup-2-fix.patch kvm-make-the-vcpu-execution-loop-an-arch-operation-build-fix.patch kvm-make-__set_efer-an-arch-operation-build-fix.patch slim-main-include-fix.patch nr_blockdev_pages-in_interrupt-warning.patch device-suspend-debug.patch mutex-subsystem-synchro-test-module-fix.patch slab-leaks3-default-y.patch x86-kmap_atomic-debugging.patch vdso-print-fatal-signals-use-ctl_unnumbered.patch restore-rogue-readahead-printk.patch put_bh-debug.patch e1000-printk-warning-fixes.patch acpi_format_exception-debug.patch add-debugging-aid-for-memory-initialisation-problems-fix.patch zeromap_pte_range-debug.patch squash-ipc-warnings.patch squash-udf-warnings.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html