All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Baron <jbaron@akamai.com>
To: Eric Wong <normalperson@yhbt.net>
Cc: Jason Baron <jbaron@akamai.com>, Nathan Zimmer <nzimmer@sgi.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: [RFC] eventpoll: Move a kmem_cache_alloc and kmem_cache_free
Date: Mon, 23 Sep 2013 11:45:46 -0400	[thread overview]
Message-ID: <5240622A.5010305@akamai.com> (raw)
In-Reply-To: <20130922204137.GA1612@dcvr.yhbt.net>

On 09/22/2013 04:41 PM, Eric Wong wrote:
> Jason Baron <jbaron@akamai.com> wrote:
>>     epoll: reduce usage of global 'epmutex' lock
>>
>>     Epoll file descriptors that are 1 link from a wakeup source and
>>     are not nested within other epoll descriptors, or pointing to
>>     other epoll descriptors, don't need to check for loop creation or
>>     the creation of wakeup storms. Because of this we can avoid taking
>>     the global 'epmutex' in these cases. This state for the epoll file
>>     descriptor is marked as 'EVENTPOLL_BASIC'. Once the epoll file
>>     descriptor is attached to another epoll file descriptor it is
>>     labeled as 'EVENTPOLL_COMPLEX', and full loop checking and wakeup
>>     storm creation are checked using the the global 'epmutex'. It does
>>     not transition back. Hopefully, this is a common usecase...
> 
> Cool.  I was thinking about doing the same thing down the line (for
> EPOLL_CTL_ADD, too)
> 
>> @@ -166,6 +167,14 @@ struct epitem {
>>  
>>  	/* The structure that describe the interested events and the source fd */
>>  	struct epoll_event event;
>> +
>> +	/* TODO: really necessary? */
>> +	int on_list;
> 
> There's some things we can overload to avoid increasing epitem size
> (.ep, .ffd.fd, ...), so on_list should be unnecessary.

Even with 'on_list' the size of 'epitem' stayed at 128 bytes. Not sure if
there are certain compile options though that can move it over that you
are concerned about...so I think that change is ok.

The biggest hack here was using 'struct rb_node' instead of a proper
'struct rcu_head', so as not to increase the size of epitem. I think this
is safe and I've added build time checks to ensure that 'struct rb_node'
is never smaller than 'struct rcu_head'. But its rather hacky. I will
probably break this change out separately when I re-post so it can be
reviewed independently...

Thanks,

-Jason

      reply	other threads:[~2013-09-23 15:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-13 15:54 [RFC] eventpoll: Move a kmem_cache_alloc and kmem_cache_free Nathan Zimmer
2013-09-18 19:09 ` Jason Baron
2013-09-19 16:37   ` Nathan Zimmer
2013-09-23 15:17     ` Jason Baron
2013-09-23 16:47       ` Nathan Zimmer
2013-09-24 19:30         ` Nathan Zimmer
2013-09-22 20:41   ` Eric Wong
2013-09-23 15:45     ` Jason Baron [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5240622A.5010305@akamai.com \
    --to=jbaron@akamai.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    --cc=nzimmer@sgi.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.