Perfromance issues
Chris Wright
chrisw at osdl.org
Thu Sep 8 17:28:57 UTC 2005
* Steve Grubb (sgrubb at 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
More information about the Linux-audit
mailing list