All of lore.kernel.org
 help / color / mirror / Atom feed
* AIO!!
@ 2005-10-10 13:39 Karthik Sarangan
  2005-10-10 16:08 ` AIO!! Benjamin LaHaise
  0 siblings, 1 reply; 4+ messages in thread
From: Karthik Sarangan @ 2005-10-10 13:39 UTC (permalink / raw)
  To: Linux Kernel Mailing List

I wrote a small program to do Async IO from a raw disk
open has no problems.
My program gets stuck up at aio_read(paio);
!!WHY!!

-----------------------------------------------
#define _GNU_SOURCE
#include <aio.h>
#include <unistd.h>
#include <fcntl.h>

#define AIOLEN (256 * 1024)

int main(void)
{
   /* Allocate resources /
   struct aiocb *paio = (struct aiocb *) malloc(sizeof(struct aiocb));
   paio->aio_buf = malloc(AIOLEN);
   paio->aio_fildes = open("/dev/raw/raw1", O_DIRECT | O_RDWR);

   paio->aio_nbytes = AIOLEN;
   paio->aio_reqprio = 0; paio->aio_sigevent.sigev_notify = SIGEV_NONE;

   aio_read(paio);

   /* My program gets stuck here in this loop.  !!WHY!!  */
   while(aio_error(paio))
   {
     sched_yield();
   }

   aio_return(paio);

   /* Return all resources to Linux */
   close(paio->aio_fildes);
   free(paio->aio_buf);
   free(paio);

   return 0;
}
-----------------------------------------------

I also have tried inserting an 'aio_fsync' between 'aio_read' and the 
'while' loop ... to no avail.

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

* Re: AIO!!
  2005-10-10 13:39 AIO!! Karthik Sarangan
@ 2005-10-10 16:08 ` Benjamin LaHaise
  2005-10-11  5:04   ` AIO!! Karthik Sarangan
  0 siblings, 1 reply; 4+ messages in thread
From: Benjamin LaHaise @ 2005-10-10 16:08 UTC (permalink / raw)
  To: Karthik Sarangan; +Cc: Linux Kernel Mailing List

On Mon, Oct 10, 2005 at 07:09:08PM +0530, Karthik Sarangan wrote:
> I wrote a small program to do Async IO from a raw disk
> open has no problems.
> My program gets stuck up at aio_read(paio);
> !!WHY!!

O_DIRECT buffers must be aligned on block sized boundaries (minimum 512 
bytes).  Check the actual return code from the aiocb and you'll find that 
it is likely -EINVAL, no -EINPROGRESS.  See the man page for 
posix_memalign() to properly align the pointer.

		-ben

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

* Re: AIO!!
  2005-10-10 16:08 ` AIO!! Benjamin LaHaise
@ 2005-10-11  5:04   ` Karthik Sarangan
  2005-10-11  9:25     ` AIO!! Denis Vlasenko
  0 siblings, 1 reply; 4+ messages in thread
From: Karthik Sarangan @ 2005-10-11  5:04 UTC (permalink / raw)
  To: Benjamin LaHaise; +Cc: Linux Kernel Mailing List, Linux SCSI Mailing List

 > Benjamin LaHaise wrote:
> O_DIRECT buffers must be aligned on block sized boundaries (minimum 512 
> bytes).  Check the actual return code from the aiocb and you'll find that 
> it is likely -EINVAL, no -EINPROGRESS.  See the man page for 
> posix_memalign() to properly align the pointer.
> 

EEP!! I forgot all about buffer alignment!! Thanks for pointing it out

:)

------------------

Two more questions.

1. Is aio_fsync of any use while 'aio_read'ing and 'aio_write'ing to
    a 'raw' device or a '/dev/sdb' with O_DIRECT?

2. I have an Ultra320 SCSI disk whose datasheet says it has a max.
    possible throughput of 78MBps

    I did a 'aio_write' onto '/dev/sdb' with O_DIRECT.
    Following are some throughput values.

    Buffer for IO   |  Avg Speed
    (in KBytes)     |
    ----------------O-----------
    Upto 512KB      |  69MBps
    1024KB          |  125MBps
    2048KB          |  250MBps
    4096KB          |  500MBps
    8192KB          |  1GBps		-- What the !! --

    Buffer cache does not come into consideration.

    Does this mean that the SCSI lower layer (aic79xx) can transfer data
    only upto 512 KB?


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

* Re: AIO!!
  2005-10-11  5:04   ` AIO!! Karthik Sarangan
@ 2005-10-11  9:25     ` Denis Vlasenko
  0 siblings, 0 replies; 4+ messages in thread
From: Denis Vlasenko @ 2005-10-11  9:25 UTC (permalink / raw)
  To: Karthik Sarangan
  Cc: Benjamin LaHaise, Linux Kernel Mailing List,
	Linux SCSI Mailing List

On Tuesday 11 October 2005 08:04, Karthik Sarangan wrote:
>  > Benjamin LaHaise wrote:
> > O_DIRECT buffers must be aligned on block sized boundaries (minimum 512 
> > bytes).  Check the actual return code from the aiocb and you'll find that 
> > it is likely -EINVAL, no -EINPROGRESS.  See the man page for 
> > posix_memalign() to properly align the pointer.
> 
> EEP!! I forgot all about buffer alignment!! Thanks for pointing it out

Why do you constantly shout?

> ------------------
> Two more questions.
> 
> 1. Is aio_fsync of any use while 'aio_read'ing and 'aio_write'ing to
>     a 'raw' device or a '/dev/sdb' with O_DIRECT?

I suspect you did not do some research first.

> 2. I have an Ultra320 SCSI disk whose datasheet says it has a max.
>     possible throughput of 78MBps
> 
>     I did a 'aio_write' onto '/dev/sdb' with O_DIRECT.
>     Following are some throughput values.
> 
>     Buffer for IO   |  Avg Speed
>     (in KBytes)     |
>     ----------------O-----------
>     Upto 512KB      |  69MBps
>     1024KB          |  125MBps
>     2048KB          |  250MBps
>     4096KB          |  500MBps
>     8192KB          |  1GBps		-- What the !! --

Most probably bug in your program.

>     Buffer cache does not come into consideration.
> 
>     Does this mean that the SCSI lower layer (aic79xx) can transfer data
>     only upto 512 KB?

It means that you are in dire need of reading this:

http://www.catb.org/~esr/faqs/smart-questions.html

--
vda

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

end of thread, other threads:[~2005-10-11  9:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-10 13:39 AIO!! Karthik Sarangan
2005-10-10 16:08 ` AIO!! Benjamin LaHaise
2005-10-11  5:04   ` AIO!! Karthik Sarangan
2005-10-11  9:25     ` AIO!! Denis Vlasenko

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.