Re: [Freedos-kernel] FreeDOS disk I/O is much slower then MSDOS

2018-11-05 Thread C. Masloch
On at 2018-11-05 15:51 +0100, Tom Ehlert wrote:
>> the FreeDOS kernel is seriously slower then MSDOS when doing
>> larger copy/xcopy operations.
> 
>> the cause: the disk I/O code avoids transfers that cross a 64K
>> boundary, and splits these transfers into 3 (smaller) transfers.
> 
>> this was needed for floppy controllers in the 1980's, but is certainly
>> not necessary for harddisks after the IBM XT.
> 
> 
>> just skip
> 
> 
>>   /* avoid overflowing 64K DMA boundary */
>> count = DMA_max_transfer(buffer, totaltodo);
> 
>> for harddisks, and everything should be *much* faster (at least on
>> rotating media in a non-emulated machine)
> 
> investigating in this a bit more, the 64K boundary was/is a problem
> with ISA DMA, used only for floppies (and sometimes serial/parallel
> ports), but is no problem for UDMA.
> 
> skipping this test for drives with 0x80 set should be save, and result
> in a significant speedup of large disk transfers.

Another possibility is to depend on the error code (ah = 09h, RBIL lists
this as "data boundary error (attempted DMA across 64K boundary or >80h
sectors)") and retry the calls to avoid 64 KiB boundaries only then.
I've had success with that when loading from an actual diskette drive;
the error is properly reported and handled this way.

Regards,
ecm


___
Freedos-kernel mailing list
Freedos-kernel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-kernel


Re: [Freedos-kernel] FreeDOS disk I/O is much slower then MSDOS

2018-11-05 Thread Tom Ehlert
> the FreeDOS kernel is seriously slower then MSDOS when doing
> larger copy/xcopy operations.

> the cause: the disk I/O code avoids transfers that cross a 64K
> boundary, and splits these transfers into 3 (smaller) transfers.

> this was needed for floppy controllers in the 1980's, but is certainly
> not necessary for harddisks after the IBM XT.


> just skip


>   /* avoid overflowing 64K DMA boundary */
> count = DMA_max_transfer(buffer, totaltodo);

> for harddisks, and everything should be *much* faster (at least on
> rotating media in a non-emulated machine)

investigating in this a bit more, the 64K boundary was/is a problem
with ISA DMA, used only for floppies (and sometimes serial/parallel
ports), but is no problem for UDMA.

skipping this test for drives with 0x80 set should be save, and result
in a significant speedup of large disk transfers.

Tom



___
Freedos-kernel mailing list
Freedos-kernel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-kernel