From: Eric Dumazet <dada1@cosmosbay.com>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Ulrich Drepper <drepper@redhat.com>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [patch 1/8] fdmap v2 - fdmap core
Date: Thu, 07 Jun 2007 08:54:15 +0200 [thread overview]
Message-ID: <4667AB97.8090603@cosmosbay.com> (raw)
In-Reply-To: <send-serie.davidel@xmailserver.org.4625.1181169031.1>
Davide Libenzi a écrit :
> Core code for the fdmap implementation. Random allocation, exact allocation,
> de-allocation and lookup are all O(1) operations. It also support the "legacy"
> sequential (compact) file descriptor allocation, that is O(N) like the old
> fdtable implementation.
> Like the old "struct fdtable", fdmap is RCU friendly too.
>
Hi Davide
I just took a 10 minutes look before running away this morning, I'll try to
test this to get performance numbers in about 12 hours.
> + */
> +int fdmap_newfd_seq(struct fd_map *fmap, unsigned int start,
> + unsigned int limit, unsigned long flags)
> +{
> + int fd;
> +
> + if (unlikely(start))
> + start = start - fmap->base;
> + if (likely(start < fmap->fdnext))
> + start = fmap->fdnext;
> + fd = find_next_zero_bit(fmap->map, fmap->size, start);
> + if (unlikely(fd >= limit))
> + return -EMFILE;
> + if (unlikely(fd >= fmap->size))
> + return -ENOSPC;
> + fmap->fdnext = fd + 1;
Here you broke POSIX I'm afraid.
You might need some test like
if (start <= fmap->fdnext)
fmap->fdnext = fd + 1;
Also I'm not sure the first unlikely() and likely() are worth it.
They probably match the user code you wrote yourself :)
Best thing is probably let the compiler generate a 50/50 code and let CPU uses
its predictors.
> +
> + return fdmap_alloc_tail(fmap, fd, flags);
> +}
/*
* untested prog
* should not fail if/when (ulimit -n 1024)
*/
#include <fcntl.h>
int main()
{
int highfd = fcntl(0, F_DUPFD, 1023);
int fd = open("/dev/null", O_RDONLY);
if (fd == -1) {
perror("open /dev/null");
return 1;
}
return 0;
}
next prev parent reply other threads:[~2007-06-07 6:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-06 22:30 [patch 1/8] fdmap v2 - fdmap core Davide Libenzi
2007-06-07 6:54 ` Eric Dumazet [this message]
2007-06-07 7:10 ` Davide Libenzi
2007-06-07 10:39 ` [patch 7/8] fdmap v2 - implement sys_socket2 Eric Dumazet
2007-06-07 15:42 ` Davide Libenzi
2007-06-08 4:54 ` [patch 1/8] fdmap v2 - fdmap core Eric Dumazet
2007-06-08 5:00 ` Eric Dumazet
2007-06-08 5:22 ` Davide Libenzi
2007-06-08 5:25 ` Davide Libenzi
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=4667AB97.8090603@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@linux-foundation.org \
--cc=davidel@xmailserver.org \
--cc=drepper@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=torvalds@linux-foundation.org \
/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.