mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
getrusage(): fill ru_inblock and ru_oublock fields if possible
If CONFIG_TASK_IO_ACCOUNTING is defined, we update io accounting counters for each task. This patch permits reporting of values using the well known getrusage() syscall, filling ru_inblock and ru_oublock instead of null values. As TASK_IO_ACCOUNTING currently counts bytes counts, we approximate blocks count doing : nr_blocks = nr_bytes / 512 Example of use : ---------------------- After patch is applied, /usr/bin/time command can now give a good approximation of IO that the process had to do. $ /usr/bin/time grep tototo /usr/include/* Command exited with non-zero status 1 0.00user 0.02system 0:02.11elapsed 1%CPU (0avgtext+0avgdata 0maxresident)k 24288inputs+0outputs (0major+259minor)pagefaults 0swaps $ /usr/bin/time dd if=/dev/zero of=/tmp/testfile count=1000 1000+0 enregistrements lus 1000+0 enregistrements écrits 512000 octets (512 kB) copiés, 0,00326601 seconde, 157 MB/s 0.00user 0.00system 0:00.00elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+3000outputs (0major+299minor)pagefaults 0swaps Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
02239c2996
commit
6eaeeaba39
5 changed files with 46 additions and 0 deletions
|
@ -10,11 +10,29 @@ static inline void task_io_account_read(size_t bytes)
|
|||
current->ioac.read_bytes += bytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* We approximate number of blocks, because we account bytes only.
|
||||
* A 'block' is 512 bytes
|
||||
*/
|
||||
static inline unsigned long task_io_get_inblock(const struct task_struct *p)
|
||||
{
|
||||
return p->ioac.read_bytes >> 9;
|
||||
}
|
||||
|
||||
static inline void task_io_account_write(size_t bytes)
|
||||
{
|
||||
current->ioac.write_bytes += bytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* We approximate number of blocks, because we account bytes only.
|
||||
* A 'block' is 512 bytes
|
||||
*/
|
||||
static inline unsigned long task_io_get_oublock(const struct task_struct *p)
|
||||
{
|
||||
return p->ioac.write_bytes >> 9;
|
||||
}
|
||||
|
||||
static inline void task_io_account_cancelled_write(size_t bytes)
|
||||
{
|
||||
current->ioac.cancelled_write_bytes += bytes;
|
||||
|
@ -31,10 +49,20 @@ static inline void task_io_account_read(size_t bytes)
|
|||
{
|
||||
}
|
||||
|
||||
static inline unsigned long task_io_get_inblock(const struct task_struct *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void task_io_account_write(size_t bytes)
|
||||
{
|
||||
}
|
||||
|
||||
static inline unsigned long task_io_get_oublock(const struct task_struct *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void task_io_account_cancelled_write(size_t bytes)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue