[ovs-dev] [PATCH] ofproto-dpif-upcall: Batch upcalls.

Ethan Jackson ethan at nicira.com
Wed Aug 28 06:48:13 UTC 2013


I'm happy with it as long as we fix the race.

Ethan

On Tue, Aug 27, 2013 at 11:02 PM, Ben Pfaff <blp at nicira.com> wrote:
> On Tue, Aug 27, 2013 at 03:50:06PM -0700, Jarno Rajahalme wrote:
>>
>> On Aug 27, 2013, at 3:13 PM, Ben Pfaff <blp at nicira.com> wrote:
>>
>> > On Tue, Aug 27, 2013 at 03:04:54PM -0700, Jarno Rajahalme wrote:
>> >> Batching reduces overheads and enables upto 4 times the upcall processing
>> >> performance in a specialized test case.
>> >>
>> >> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
>> >
>> > Nice!
>> >
>> >> +    for (n = 0; n < udpif->n_handlers; ++n) {
>> >> +        handler = &udpif->handlers[n];
>> >> +        if (handler->n_new_upcalls) {
>> >> +            handler->n_new_upcalls = 0;
>> >> +            xpthread_cond_signal(&handler->wake_cond);
>> >> +        }
>> >
>> > Usually there's a race if one signals a condition variable without
>> > holding the corresponding mutex.  Did you check that there is no race
>> > here?
>>
>> I did not notice anything hanging or the like, if that's what you
>> mean. Documentation says:
>
> One specific race that I was concerned about is:
>
> 1. This code in udpif_miss_handler() checks n_upcalls and sees that it
>    is zero.
>
>         if (!handler->n_upcalls) {
>
> 2. This code in recv_upcalls() signals wake_cond:
>
>     for (n = 0; n < udpif->n_handlers; ++n) {
>         handler = &udpif->handlers[n];
>         if (handler->n_new_upcalls) {
>             handler->n_new_upcalls = 0;
>             xpthread_cond_signal(&handler->wake_cond);
>         }
>     }
>
> 3. This code in udpif_miss_handler() starts waiting on wake_cond:
>
>             ovs_mutex_cond_wait(&handler->wake_cond, &handler->mutex);
>
> Maybe this race cannot happen, because n_upcalls only changes with the
> mutex taken.  I guess that's the case.
>
> Ethan, unless you see something, I'm happy with this.  (I'll be at
> VMworld tomorrow and probably not continuing the conversation.)
>
> Acked-by: Ben Pfaff <blp at nicira.com>



More information about the dev mailing list