* Using DMA in read/write, setting block size for I/O
@ 2005-10-04 13:51 Karthik Sarangan
2005-10-04 14:33 ` Arjan van de Ven
2005-10-04 15:34 ` Using DMA in read/write, setting block size for I/O linux-os (Dick Johnson)
0 siblings, 2 replies; 7+ messages in thread
From: Karthik Sarangan @ 2005-10-04 13:51 UTC (permalink / raw)
To: linux-kernel
In my application, I have the following code.
int main(void)
{
char *pcBuffer;
posix_memalign((void **) pcBuffer, 512, 262144);
int ifd = open("/dev/sdb", O_DIRECT | O_RDWR);
long lLen;
lLen = read(ifd, pcBuffer, 262144);
close(ifd);
return 0;
}
Will the underlying block device read a single 256KB block from the hdd
into pcBuffer
or will it read 256KB as a set of smaller blocks?
Since the buffer is memory aligned will it enable DMA?
scsi disk driver is adaptec aic79xx.o
distro is RedHat Enterprise Linux WS 4 (kernel-2.6.9-11)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: Using DMA in read/write, setting block size for I/O
2005-10-04 13:51 Using DMA in read/write, setting block size for I/O Karthik Sarangan
@ 2005-10-04 14:33 ` Arjan van de Ven
[not found] ` <43437163.1020201@cdac.in>
2005-10-04 15:34 ` Using DMA in read/write, setting block size for I/O linux-os (Dick Johnson)
1 sibling, 1 reply; 7+ messages in thread
From: Arjan van de Ven @ 2005-10-04 14:33 UTC (permalink / raw)
To: Karthik Sarangan; +Cc: linux-kernel
> Will the underlying block device read a single 256KB block from the hdd
> into pcBuffer
> or will it read 256KB as a set of smaller blocks?
that depends, not all pieces of hardware can do transfers that big (or
at least advertise to the kernel that they can); if that's the case the
kernel will chop it up. Note:t he kernel will not *guarantee* that it'll
be one io either way. So don't depend on it for correctness!
Yet of course the kernel will try to optimize as good as possible
> Since the buffer is memory aligned will it enable DMA?
doesn't matter; DMA will always happen if the HW is capable of it. Since
you use O_DIRECT there will also not be a copy (which would happen if
you didn't use O_DIRECT)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: Using DMA in read/write, setting block size for I/O
2005-10-04 13:51 Using DMA in read/write, setting block size for I/O Karthik Sarangan
2005-10-04 14:33 ` Arjan van de Ven
@ 2005-10-04 15:34 ` linux-os (Dick Johnson)
1 sibling, 0 replies; 7+ messages in thread
From: linux-os (Dick Johnson) @ 2005-10-04 15:34 UTC (permalink / raw)
To: Karthik Sarangan; +Cc: linux-kernel
On Tue, 4 Oct 2005, Karthik Sarangan wrote:
> In my application, I have the following code.
>
> int main(void)
> {
> char *pcBuffer;
>
> posix_memalign((void **) pcBuffer, 512, 262144);
> int ifd = open("/dev/sdb", O_DIRECT | O_RDWR);
> long lLen;
>
> lLen = read(ifd, pcBuffer, 262144);
>
> close(ifd);
> return 0;
> }
>
> Will the underlying block device read a single 256KB block from the hdd
> into pcBuffer
No. It might read 512 bytes! You can't assume that a read will
always return the value requested. That's a bug. You need code
that will make as many reads as necessary to satisfy your
request.
> or will it read 256KB as a set of smaller blocks?
>
You (your code) may have to read multiple times. The
kernel code may even read ahead.
> Since the buffer is memory aligned will it enable DMA?
>
> scsi disk driver is adaptec aic79xx.o
This Adaptec SCSI driver always uses DMA.
> distro is RedHat Enterprise Linux WS 4 (kernel-2.6.9-11)
> -
Cheers,
Dick Johnson
Penguin : Linux version 2.6.13 on an i686 machine (5589.55 BogoMips).
Warning : 98.36% of all statistics are fiction.
****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.
Thank you.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2005-10-06 5:18 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-04 13:51 Using DMA in read/write, setting block size for I/O Karthik Sarangan
2005-10-04 14:33 ` Arjan van de Ven
[not found] ` <43437163.1020201@cdac.in>
2005-10-05 8:15 ` Arjan van de Ven
2005-10-05 9:43 ` Using DMA in read/write, setting block size for I/O -> max_sectors Karthik Sarangan
2005-10-05 10:26 ` Arjan van de Ven
2005-10-06 4:39 ` Karthik Sarangan
2005-10-04 15:34 ` Using DMA in read/write, setting block size for I/O linux-os (Dick Johnson)
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.