Re: [Freedos-kernel] FreeDOS disk I/O is much slower then MSDOS
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
> 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
[Freedos-kernel] FreeDOS disk I/O is much slower then MSDOS
Hi everybody, 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) Tom ___ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel