WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] Reduce overhead in find_domain_by_id() [0/2]

To: "Santos, Jose Renato G" <joserenato.santos@xxxxxx>
Subject: Re: [Xen-devel] [PATCH] Reduce overhead in find_domain_by_id() [0/2]
From: Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
Date: Wed, 6 Dec 2006 10:41:44 +0000
Cc: Yoshio Turner <yoshiotu@xxxxxxxxxx>, Jose Renato Santos <jsantos@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx, G John Janakiraman <john@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 06 Dec 2006 02:48:40 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <08CA2245AFCF444DB3AC415E47CC40AF50830E@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: "Santos, Jose Renato G" <joserenato.santos@xxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx, Yoshio Turner <yoshiotu@xxxxxxxxxx>, Jose Renato Santos <jsantos@xxxxxxxxxx>, G John Janakiraman <john@xxxxxxxxxxxxxxxxxxx>
References: <08CA2245AFCF444DB3AC415E47CC40AF50830E@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.4.1i
I also spotted find_domain_by_id() showing up rather high
in network intensive workloads. The CPU overhead of our
network I/O path is pretty large so it's worth trying to
address and if I remember, that one was oddly rather high
on the list of low hanging fruits.

Find_domain_by_id() is called from __gnttab_map_grant_ref()
which is typically called N times on an array of grant ops
from gnttab_map_grant_ref(). Perhaps we could find a way
to optimize the common case here and only lookup and hold
the domain once per OP array instead of once per op in the
multi op?

We could also cleanup some code while there:

    if ( unlikely((rd = find_domain_by_id(op->dom)) == NULL) )
    {
     vvvvvvvvvvvvvvvvvvvvvvvv
        if ( rd != NULL )
            put_domain(rd);
     ^^^^^^^^^^^^^^^^^^^^^^^^ WTF???
        DPRINTK("Could not find domain %d\n", op->dom);
        op->status = GNTST_bad_domain;
        return;
    }

It's a bit puzzling to me that grabbing the lock adds such an
overhead. Is this purely a lock operation overhead or is there
contention on the lock cache line (could find this out by
profiling for data cache line misses)?

Cheers,
Emmanuel.

On Tue, Dec 05, 2006 at 07:35:37PM -0600, Santos, Jose Renato G wrote:
> 
> This is a set of patches to improve performance of find_domain_by_id().
> find_domain_by_id shows up high in profiles for network I/O intensive
> workloads.
> Most of the cost for this function comes from 3 main functions (of
> aproximate equal costs): 1)read_lock(), 2)read_unlock() and
> 3)get_domain().
> These patches replace the lock used for accessing domain_list and
> domain_hash with a lock free RCU scheme. Experiments confirm that the
> cost of find_domain_by_id() is in fact reduced by 2/3. 
> The patches apply cleanly to changeset 12732.
> 
> Renato
> 
> Patches:
>   1/2 - Import linux RCU code into Xen
>   2/2 - replace domlist_lock operations by RCU operations
> 
> Signed-off-by: Jose Renato Santos <jsantos@xxxxxxxxxx>
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel