Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Jun 2002 01:59:15 -0700 (PDT)
From:      Dave Barker <dave_barker@bigpond.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/39650: Digital audio extraction on an atapi CD does not use DMA even when atamode is DMA
Message-ID:  <200206220859.g5M8xFvS021536@www.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         39650
>Category:       kern
>Synopsis:       Digital audio extraction on an atapi CD does not use DMA even when atamode is DMA
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jun 22 02:00:07 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Dave Barker
>Release:        4.5 x86
>Organization:
BAE SYSTEMS
>Environment:
FreeBSD deluge.my.domain 4.5-RELEASE FreeBSD 4.5-RELEASE #4: Fri Jun 21 10:18:06 CST 2002     toor@deluge.my.domain:/usr/src/sys/compile/DELUGE  i386      
>Description:
Even with atapi CD DMA turned on and working, digital audio extraction (using dagrab) still uses PIO.  Hence DAE is slow and consumes too much CPU time.
"atapi-all.c" looks at the atapi command packet and only sets up a DMA transfer for normal reads and writes.
>How-To-Repeat:
Run dagrab to extract an audio track.  Speeds will be low, and top will report little idle time and lots of interrupt time.
Before patching, I could only achieve 12x DAE on my PlexWriter 16/10/40A (Athlon 1.3GHz system) at around 100% CPU usage.
After patching, I get up to 33x (outer tracks) at around 5% CPU usage.
>Fix:
DMA to be used to for DAE, provided DMA is enabled for the drive, and a new sysctl tunable has not been set to force PIO transfers for DAE.

Tested on several audio CDs and 2 CD readers on my Athlon system:
atapci0: <VIA 82C686 ATA100 controller> port 0xe000-0xe00f at device 17.1 on pci0
acd0: DVD-ROM <MATSHITADVD-ROM SR-8586> at ata1-master using UDMA33
acd1: CD-RW <PLEXTOR CD-R PX-W1610A> at ata1-slave using UDMA33

New tunable:
hw.ata.atapi_dae_without_dma: 0

Patch to /usr/src/sys/dev/ata/atapi-all.c:
begin 644 atapi-all.c.diff
M*BHJ("]U<W(O<W)C+W-Y<R]D978O871A+V%T87!I+6%L;"YC+D]224<)1G)I
M($IU;B`R,2`P,3HQ,3HU,B`R,#`R"BTM+2`O=7-R+W-R8R]S>7,O9&5V+V%T
M82]A=&%P:2UA;&PN8PE&<FD@2G5N(#(Q(#$P.C$W.C0Y(#(P,#(**BHJ*BHJ
M*BHJ*BHJ*BHJ"BHJ*B`U-2PV-B`J*BHJ"BTM+2`U-2PW,2`M+2TM"B`@+RH@
M:6YT97)N86P@=F%R<R`J+PH@('-T871I8R!-04Q,3T-?1$5&24Y%*$U?051!
M4$DL(")!5$%022!G96YE<FEC(BP@(D%405!)(&1R:79E<B!G96YE<FEC(&QA
M>65R(BD["B`@<W1A=&EC(&EN="!A=&%P:5]D;6$@/2`P.PHK('-T871I8R!I
M;G0@871A<&E?9&%E7W=I=&AO=71?9&UA(#T@,#L*("!454Y!0DQ%7TE.5"@B
M:'<N871A+F%T87!I7V1M82(L("9A=&%P:5]D;6$I.PHK(%153D%"3$5?24Y4
M*")H=RYA=&$N871A<&E?9&%E7W=I=&AO=71?9&UA(BP@)F%T87!I7V1A95]W
M:71H;W5T7V1M82D["B`@"B`@+RH@<WES=&-L('9A<G,@*B\*("!365-#5$Q?
M1$5#3"A?:'=?871A*3L*("!365-#5$Q?24Y4*%]H=U]A=&$L($])1%]!551/
M+"!A=&%P:5]D;6$L($-43$9,04=?4D0L("9A=&%P:5]D;6$L(#`L"B`@"2`@
M(")!5$%022!D979I8V4@1$U!(&UO9&4@8V]N=')O;"(I.PHK(%-94T-43%])
M3E0H7VAW7V%T82P@3TE$7T%55$\L(&%T87!I7V1A95]W:71H;W5T7V1M82P@
M0U1,1DQ!1U]25RP**R`)("`@)F%T87!I7V1A95]W:71H;W5T7V1M82P@,"P*
M*R`)("`@(D%405!)(&1E=FEC92!$34$@<W5P<')E<W-I;VX@9F]R($1!12(I
M.PH@(`H@("\J(&1E9FEN97,@*B\*("`C9&5F:6YE($%405!)7TU!6%]21512
M2453("`),PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#(X-RPR.3(@*BHJ*@HM+2T@
M,CDR+#(Y."`M+2TM"B`@("`@(&EF("@H871P+3YC;VYT<F]L;&5R+3YM;V1E
M6T%405]$158H871P+3YU;FET*5T@/CT@051!7T1-02D@)B8*("`)*')E<75E
M<W0M/F-C8ELP72`]/2!!5$%025]214%$('Q\"B`@"2!R97%U97-T+3YC8V);
M,%T@/3T@051!4$E?4D5!1%]"24<@?'P**R`)("AR97%U97-T+3YC8V);,%T@
M/3T@051!4$E?4D5!1%]#1"`F)B`A871A<&E?9&%E7W=I=&AO=71?9&UA*2!\
M?`H@(`D@*"AR97%U97-T+3YC8V);,%T@/3T@051!4$E?5U))5$4@?'P*("`)
M("`@<F5Q=65S="T^8V-B6S!=(#T]($%405!)7U=2251%7T))1RD@)B8*("`)
M("`A*&%T<"T^8V]N=')O;&QE<BT^9FQA9W,@)B!!5$%?051!4$E?1$U!7U)/
'*2DI("8F"@``
`
end

patch to /usr/src/share/man/man4/ata.4:
begin 644 ata.4.diff
M*BHJ("]U<W(O<W)C+W-H87)E+VUA;B]M86XT+V%T82XT+D]224<)1G)I($YO
M=B`@,B`R,3HQ.#HT,R`R,#`Q"BTM+2`O=7-R+W-R8R]S:&%R92]M86XO;6%N
M-"]A=&$N-`E&<FD@2G5N(#(Q(#$P.C(X.C4W(#(P,#(**BHJ*BHJ*BHJ*BHJ
M*BHJ"BHJ*B`Q-S8L,3@Q("HJ*BH*+2TM(#$W-BPQ.3`@+2TM+0H@("Y$;"!S
M>7-C=&P@+7<@:'<N871A;6]D97,]<&EO+'!I;RPM+2TL9&UA+'!I;RPM+2TL
M9&UA+"TM+2P*("`N4'`*("!4:&4@;F5W(&UO9&5S(&%R92!S970@87,@<V]O
M;B!A<R!T:&4@<WES8W1L(&-O;6UA;F0@<F5T=7)N<RX**R`N4'`**R!">2!D
M969A=6QT+"!D:6=I=&%L(&%U9&EO(&5X=')A8W1I;VX@*$1!12D@=VEL;"!U
M<V4@=&AE($%405!)($-$(&1R:79E)W,@871A;6]D97,@<V5T=&EN9R!T;R!D
M971E<FUI;F4@=VAE=&AE<B!T;R!U<V4@1$U!+B`@1$%%(&-A;B!B92!F;W)C
M960@=&\@=7-E(%!)3R!R96=A<F1L97-S(&]F('1H92!A=&%M;V1E<R!A="!A
M;GD@=&EM92!W:&EL92!T:&4@<WES=&5M(&ES(')U;FYI;F<L('5S:6YG('1H
M92!C;VUM86YD(&QI;F4Z"BL@+E!P"BL@+D1L('-Y<V-T;"!H=RYA=&$N871A
M<&E?9&%E7W=I=&AO=71?9&UA/3$**R`N4'`**R!4;R!R97-T;W)E('1H92!D
M969A=6QT(&)E:&%V:6]U<BP@=7-E('1H92!C;VUM86YD.@HK("Y0<`HK("Y$
M;"!S>7-C=&P@:'<N871A+F%T87!I7V1A95]W:71H;W5T7V1M83TP"BL@+E!P
M"B`@+E-H($9)3$53"B`@+D)L("UT86<@+7=I9'1H("(O<WES+VDS.#8O8V]N
G9B]'14Y%4DE#("(@+6-O;7!A8W0*("`N270@4&$@+V1E=B]A9"H*
`
end

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206220859.g5M8xFvS021536>