mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 2.5.73-mm2] aio O_DIRECT no readahead
@ 2003-07-01  1:19 Daniel McNeil
  2003-07-01  3:18 ` Suparna Bhattacharya
  2003-07-03 14:30 ` Suparna Bhattacharya
  0 siblings, 2 replies; 3+ messages in thread
From: Daniel McNeil @ 2003-07-01  1:19 UTC (permalink / raw)
  To: Andrew Morton, Suparna Bhattacharya, Benjamin LaHaise, linux-aio,
	Linux Kernel Mailing List

[-- Attachment #1: Type: text/plain, Size: 1188 bytes --]

More testing on AIO with O_DIRECT and /dev/raw/.  Doing AIO reads was
using a lot more cpu time than using dd on the raw partition even with
the io_queue_wait patch.  Found out that aio is doing readahead even
for O_DIRECT.  Here's a patch that fixes it.  Here are some output
from time on reading a 90mb partition on a raw device with 32k i/o:

CMD             Kernel                  I/O     real    user    sys
RUN             version                 size
===             ======                  ===     ====    ====    ===
dd              2.5.73-mm2:             32k     2.514s  0.000s  0.200s
aio (1 iocb)    2.5.73-mm2:             32k     3.408s  1.120s  2.250s
aio (32 iocb)   2.5.73-mm2:             32k     2.994s  0.830s  2.160s
aio (1 iocb)    2.5.73-mm2+patch.aiodio 32k     2.509s  0.850s  1.660s
aio (1 iocb)    2.5.73-mm2+patch.aiodio
                   +patch.io_queue_wait 32k     2.566s  0.010s  0.240s
aio (32 iocb)   2.5.73-mm2+patch.aiodio
                   +patch.io_queue_wait 32k     2.465s  0.010s  0.080s

With this patch and my previous io_queue_wait patch the cpu time
drops down to very little when doing AIO with O_DIRECT.

Daniel McNeil <daniel@osdl.org>

[-- Attachment #2: patch-2.5.73-mm2.aiodio --]
[-- Type: text/plain, Size: 1107 bytes --]

--- linux-2.5.73-mm2/fs/aio.c	2003-06-30 16:39:15.874216228 -0700
+++ linux-2.5.73-mm2.aiodio/fs/aio.c	2003-06-30 15:38:46.000000000 -0700
@@ -1380,15 +1380,20 @@ ssize_t aio_setup_iocb(struct kiocb *kio
 			break;
 		ret = -EINVAL;
 		if (file->f_op->aio_read) {
-			struct address_space *mapping =
-				file->f_dentry->d_inode->i_mapping;
-			unsigned long index = kiocb->ki_pos >> PAGE_CACHE_SHIFT;
-			unsigned long end = (kiocb->ki_pos + kiocb->ki_left)
-				>> PAGE_CACHE_SHIFT;
-
-			for (; index < end; index++) {
-				page_cache_readahead(mapping, &file->f_ra,
-							file, index);
+			/*
+			 * Do not do readahead for DIRECT i/o
+			 */
+			if (!(file->f_flags & O_DIRECT)) {
+				struct address_space *mapping =
+					file->f_dentry->d_inode->i_mapping;
+				unsigned long index = kiocb->ki_pos >> PAGE_CACHE_SHIFT;
+				unsigned long end = (kiocb->ki_pos + kiocb->ki_left)
+					>> PAGE_CACHE_SHIFT;
+
+				for (; index < end; index++) {
+					page_cache_readahead(mapping, &file->f_ra,
+								file, index);
+				}
 			}
 			kiocb->ki_retry = aio_pread;
 		}

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-07-03 14:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-07-01  1:19 [PATCH 2.5.73-mm2] aio O_DIRECT no readahead Daniel McNeil
2003-07-01  3:18 ` Suparna Bhattacharya
2003-07-03 14:30 ` Suparna Bhattacharya

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®