From: "Aaron Wiebe" <epiphani@gmail.com>
To: linux-kernel@vger.kernel.org
Subject: slow open() calls and o_nonblock
Date: Sun, 3 Jun 2007 14:52:24 -0400 [thread overview]
Message-ID: <e7ca40f70706031152q4e9630aq3c29623bd56fe0e5@mail.gmail.com> (raw)
Greetings all. I'm not on this list, so I apologize if this subject
has been covered before. (Also, please cc me in the response.)
I've spent the last several months trying to work around the lack of a
decent disk AIO interface. I'm starting to wonder if one exists
anywhere. The short version:
I have written a daemon that needs to open several thousand files a
minute and write a small amount of data to each file. After extensive
research, I ended up going with the POSIX AIO kludgy pthreads wrapper
in glibc to handle my writes due to the time constraints of writing my
own pthreads handler into the application.
The problem with this equation is that opens, closes and non-readwrite
operations (fchmod, fcntl, etc) have no interface in posix aio. Now I
was under the assumption that given open and close operations are
comparatively less common than the write operations, this wouldn't be
a huge problem. My tests seemed to reflect that.
I went to production with this yesterday to discover that under
production load, our filesystems (nfs on netapps) were substantially
slower than I was expecting. open() calls are taking upwards of 2
seconds on occation, and usually ~20ms.
Now, Netapp speed aside, O_NONBLOCK and O_DIRECT seem to make zero
difference to my open times. Example:
open("/somefile", O_WRONLY|O_NONBLOCK|O_CREAT, 0644) = 1621 <0.415147>
Now, I'm a userspace guy so I can be pretty dense, but shouldn't a
call with a nonblocking flag return EAGAIN if its going to take
anywhere near 415ms? Is there a way I can force opens to EAGAIN if
they take more than 10ms?
Thanks for any help you folks can offer.
-Aaron Wiebe
(ps. having come from the socket side of the fence, its incredibly
frustrating to be unable to poll() or epoll regular file FDs --
Especially knowing that the kernel is translating them into a TCP
socket to do NFS anyway. Please add regular files to epoll and give
me a way to do the opens in the same fasion as connects!)
next reply other threads:[~2007-06-03 18:52 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-03 18:52 Aaron Wiebe [this message]
2007-06-03 19:16 ` slow open() calls and o_nonblock Davide Libenzi
2007-06-03 23:56 ` John Stoffel
2007-06-04 1:05 ` Aaron Wiebe
2007-06-04 1:20 ` Neil Brown
2007-06-04 13:59 ` Aaron Wiebe
2007-06-04 1:25 ` Bernd Eckenfels
2007-06-04 0:27 ` David Schwartz
2007-06-04 1:05 ` Al Viro
2007-06-04 1:19 ` Bernd Eckenfels
2007-06-04 13:49 ` Alan Cox
2007-06-04 14:04 ` Aaron Wiebe
2007-06-04 14:17 ` John Stoffel
2007-06-04 14:24 ` Aaron Wiebe
2007-06-04 14:20 ` Aaron Wiebe
2007-06-04 15:42 ` Trond Myklebust
2007-06-04 15:59 ` Aaron Wiebe
2007-06-04 16:26 ` Aaron Wiebe
2007-06-04 19:46 ` Trond Myklebust
2007-06-04 20:32 ` David Schwartz
2007-06-04 14:39 ` Aaron Wiebe
-- strict thread matches above, loose matches on Subject: below --
2007-06-04 3:57 Albert Cahalan
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=e7ca40f70706031152q4e9630aq3c29623bd56fe0e5@mail.gmail.com \
--to=epiphani@gmail.com \
--cc=linux-kernel@vger.kernel.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.