lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 3 Jun 2010 07:28:06 +0530
From:	Balbir Singh <balbir@...ux.vnet.ibm.com>
To:	Rafael Tinoco <tinhocas@...il.com>
Cc:	LKML <linux-kernel@...r.kernel.org>,
	Scrum - Linux <scrum-linux@...aweb.com.br>,
	Juliano Martinez <juliano.martinez@...aweb.com.br>,
	Gleicon Moraes <gleicon.moraes@...aweb.com.br>
Subject: Re: [PATCH] task_io_accounting, taskstats

* Rafael Tinoco <tinhocas@...il.com> [2010-06-02 18:56:43]:

> Hello,
> 
> I'm proposing this patch to extend taskstats capability of
> IO_ACCOUTING based on socket msg size.
> Already discussed with Balbir about it. The idea was to keep the
> "socket" accounting generic.
> Not taking in consideration witch type of socket or protocol is used.
> I'm using this in a user land tool called ustats for uid accounting
> with very low overhead (cn_msg and taskstats through netlink).
> 

Hi, Rafael

You've not signed-off on the patch. The coding style/patch seems off.
Could you please run scripts/checkpatch.pl to verify the patch.

Other comments

1. Test results are good to see in the posting
2. Documentation Update
3. User space component updates - getdelays.c

Also cc'ing netdev for more feedback.


> diff --git a/include/linux/task_io_accounting.h
> b/include/linux/task_io_accounting.h
> index bdf855c..ed54fab 100644
> --- a/include/linux/task_io_accounting.h
> +++ b/include/linux/task_io_accounting.h
> @@ -41,5 +41,16 @@ struct task_io_accounting {
>  	 * information loss in doing that.
>  	 */
>  	u64 cancelled_write_bytes;
> +
> +	/*
> +	 * The number of bytes which this task has read from a socket
> +	 */
> +	u64 read_net_bytes;
> +
> +        /*
> +	 * The number of bytes which this task has written to a socket
> +	 */
> +	u64 write_net_bytes;
> +
>  #endif /* CONFIG_TASK_IO_ACCOUNTING */
>  };
> diff --git a/include/linux/task_io_accounting_ops.h
> b/include/linux/task_io_accounting_ops.h
> index 4d090f9..f28aa4c 100644
> --- a/include/linux/task_io_accounting_ops.h
> +++ b/include/linux/task_io_accounting_ops.h
> @@ -12,6 +12,11 @@ static inline void task_io_account_read(size_t bytes)
>  	current->ioac.read_bytes += bytes;
>  }
> 
> +static inline void task_io_account_read_net(size_t bytes)
> +{
> +        current->ioac.read_net_bytes += bytes;
> +}
> +
>  /*
>   * We approximate number of blocks, because we account bytes only.
>   * A 'block' is 512 bytes
> @@ -26,6 +31,11 @@ static inline void task_io_account_write(size_t bytes)
>  	current->ioac.write_bytes += bytes;
>  }
> 
> +static inline void task_io_account_write_net(size_t bytes)
> +{
> +        current->ioac.write_net_bytes += bytes;
> +}
> +
>  /*
>   * We approximate number of blocks, because we account bytes only.
>   * A 'block' is 512 bytes
> @@ -59,6 +69,10 @@ static inline void task_io_account_read(size_t bytes)
>  {
>  }
> 
> +static inline void task_io_account_read_net(size_t bytes)
> +{
> +}
> +
>  static inline unsigned long task_io_get_inblock(const struct task_struct *p)
>  {
>  	return 0;
> @@ -68,6 +82,10 @@ static inline void task_io_account_write(size_t bytes)
>  {
>  }
> 
> +static inline void task_io_account_write_net(size_t bytes)
> +{
> +}
> +
>  static inline unsigned long task_io_get_oublock(const struct task_struct *p)
>  {
>  	return 0;
> diff --git a/include/linux/taskstats.h b/include/linux/taskstats.h
> index 341dddb..5067376 100644
> --- a/include/linux/taskstats.h
> +++ b/include/linux/taskstats.h
> @@ -163,6 +163,10 @@ struct taskstats {
>  	/* Delay waiting for memory reclaim */
>  	__u64	freepages_count;
>  	__u64	freepages_delay_total;
> +
> +        /* Per-task network I/O accounting */
> +        __u64   read_net_bytes;         /* bytes of socket read I/O */
> +        __u64   write_net_bytes;        /* bytes of socket write I/O */
>  };
> 
> 
> diff --git a/net/socket.c b/net/socket.c
> index 769c386..93507a3 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -103,6 +103,8 @@
>  #include <linux/sockios.h>
>  #include <linux/atalk.h>
> 
> +#include <linux/task_io_accounting_ops.h>
> +
>  static int sock_no_open(struct inode *irrelevant, struct file *dontcare);
>  static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
>  			 unsigned long nr_segs, loff_t pos);
> @@ -550,6 +552,9 @@ static inline int __sock_sendmsg(struct kiocb
> *iocb, struct socket *sock,
>  	if (err)
>  		return err;
> 
> +        if(size > 0)
> +            task_io_account_read_net(size);
> +
>  	return sock->ops->sendmsg(iocb, sock, msg, size);
>  }
> 
> @@ -666,6 +671,7 @@ EXPORT_SYMBOL_GPL(sock_recv_ts_and_drops);
>  static inline int __sock_recvmsg_nosec(struct kiocb *iocb, struct socket *sock,
>  				       struct msghdr *msg, size_t size, int flags)
>  {
> +        int ret = 0;
>  	struct sock_iocb *si = kiocb_to_siocb(iocb);
> 
>  	si->sock = sock;
> @@ -674,7 +680,12 @@ static inline int __sock_recvmsg_nosec(struct
> kiocb *iocb, struct socket *sock,
>  	si->size = size;
>  	si->flags = flags;
> 
> -	return sock->ops->recvmsg(iocb, sock, msg, size, flags);
> +        ret = sock->ops->recvmsg(iocb, sock, msg, size, flags);
> +
> +        if(ret > 0)
> +            task_io_account_read_net(ret);
> +
> +        return ret;
>  }
> 
>  static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock,

-- 
	Three Cheers,
	Balbir
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ