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

Re: Perfromance issues



* Steve Grubb (sgrubb redhat com) wrote:
> +++ linux-2.6.9~pre75/fs/attr.c
> @@ -68,6 +69,8 @@
>         unsigned int ia_valid = attr->ia_valid;
>         int error = 0;
> 
> +       audit_notify_watch(inode, MAY_WRITE);
> +
>         if (ia_valid & ATTR_SIZE) {
>                 if (attr->ia_size != i_size_read(inode)) {
>                         error = vmtruncate(inode, attr->ia_size);
> 
> +void audit_notify_watch(struct inode *inode, int mask)
> +{
> +       struct audit_inode_data *data;
> +
> +       if (likely(!audit_enabled))
> +               return;
> 
> This means that the variables have to be pushed onto the stack, a call 
> performed, the enabled test, do a return instruction, and then pop the stack. 
> Its probably faster to do:
> 
> +       if (unlikely(audit_enabled))
> +              audit_notify_watch(inode, MAY_WRITE);
> +

Any micro optimisation needs to be benchmarked to show whether it's really
useful (I'd expect this one to be in the noise even though assembly
inspection should show improvement).  IMO, a better choice would be
a static inline stub to keep from cluttering call sites.  Smth. like:

static inline void audit_notify_watch(struct inode *inode, int mask)
{
	if (likely(!audit_enabled))
		return;
	__audit_notify_watch(inode, mask);
}

thanks,
-chris


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