Det burde vel ikke være nødvendig å bråke mer om det
Der er vi i det minste enige.
NRPACKS er antall pakker per URB.
Min forståelse, utelukkende basert på en gjennomgang etter beste evne av den relevante kildekoden er som følger:
Variabelen som angir det faktiske antall pakker per urb er en konsekvens av en rekke sjekker og operasjoner mot den interne variabelen packs_per_ms, bInterval (som hentes fra lydkortet), MAX_PACKS (som er 20 som standard, men som du vel har økt) og nrpacks.
Etter at den midlertidige urb_packs variabelen er beregnet kjøres ting gjennom en kjøttkvern av operasjoner som sjekker mot max og min-verdier i forhold til alt i fra hw_params på lydkortet, gitte kø-lengder, logiske max og min verdier for antall pakker og tilsvarende.
Når alt dette er gjort og det endelig er tid for å allokere og initialisere en faktisk URB, så brukes den resulterende verdien for å sette antall pakker som skal benyttes i akkurat den nåværende URBen. Om man tar seg tid til å sette inn tallverdier i alle operasjonene underveis ser man at denne verdien, dvs u->packets når det allokeres en URB, ikke ligner på nrpacks i verdi i det hele tatt.
Din forståelse er at nrpacks angir dette direkte. Med andre ord at u->packets = nrpacks i URBen som allokeres.
Siden disse to "forståelsene" er fullstendig ulike må vi nesten være enige om at vi er fullstendig uenige.
og med de USB kort som jeg har testet så må standardverdien på 8 NRPACKS økes for at ikke feedback IRQ (CPU bruk) skal tvinges opp på et kunstig høyt nivå.
Slik er det heldgvis ikke hos meg, så jeg slipper både å ta høyde for dette og slite med lydmessig degradering som en konsekvens av dette. Jeg vil tro at dette gjelder alle som kjører noe tilsvarende M2Tech Hiface Two og en standard x86 Debian Wheezy amd64-platform.
Jeg har allerede vist tidligere i tråden at jeg ikke opplever noen reell forskjell på trafikken som går over USB-grensesnittet med endringer i NRPACKS ved hjelp av å ta opp selve dataflyten på grensesnittet, men siden jeg ikker noen fan av å dytte ut påstander uten å backe dem opp med faktiske data skal jeg for korrekthetens skyld underbygge med flere tester i forhold til interrupts og CPU-bruk.
Alle testene både på interrupts og CPU-bruk er gjort over 60 sekunder for å unngå små lokale variasjoner. I tillegg er samme låt (16bit 44.1kHz) benyttet i alle tilfeller og alle testene er startet umiddelbart etter oppstart av låt. ( mpc play && <test-kommando> )
NRPACKS = 1
Kode:
root@hifi:~# cat /sys/module/snd_usb_audio/parameters/nrpacks
1
Resultat av procinfo -d -n 60:
99624 ehci_hcd:usb1, eh = 1660.4 int/s
[I]Resultat av pidstat 60 -t -p 192,151,2260 (prosentvis bruk av 1 CPU-kjerne)[/I]
Linux 3.2.0-3-rt-amd64 (hifi) 10/05/2012 _x86_64_ (4 CPU)
05:09:37 PM TGID TID %usr %system %guest %CPU CPU Command
05:10:37 PM 192 - 0.00 2.20 0.00 2.20 2 irq/23-ehci_hcd
05:10:37 PM - 192 0.00 2.20 0.00 2.20 2 |__irq/23-ehci_hcd
05:10:37 PM 151 - 0.00 0.93 0.00 0.93 2 irq/23-ehci_hcd
05:10:37 PM - 151 0.00 0.93 0.00 0.93 2 |__irq/23-ehci_hcd
05:10:37 PM 2260 - 0.33 0.03 0.00 0.37 2 mpd
05:10:37 PM - 2260 0.00 0.00 0.00 0.00 2 |__mpd
05:10:37 PM - 2263 0.00 0.00 0.00 0.00 2 |__mpd
05:10:37 PM - 2264 0.32 0.00 0.00 0.32 2 |__mpd
05:10:37 PM - 2412 0.00 0.02 0.00 0.02 2 |__mpd
NRPACKS = 8
Kode:
root@hifi:~# cat /sys/module/snd_usb_audio/parameters/nrpacks
8
Resultat av procinfo -d -n 60:
irq 23: 96302 ehci_hcd:usb1, eh = 1605.03 int/s
[I]Resultat av pidstat 60 -t -p 192,151,2260 (prosentvis bruk av 1 CPU-kjerne)[/I]
Linux 3.2.0-3-rt-amd64 (hifi) 10/05/2012 _x86_64_ (4 CPU)
04:47:28 PM TGID TID %usr %system %guest %CPU CPU Command
04:48:28 PM 192 - 0.00 2.20 0.00 2.20 2 irq/23-ehci_hcd
04:48:28 PM - 192 0.00 2.20 0.00 2.20 2 |__irq/23-ehci_hcd
04:48:28 PM 151 - 0.00 0.97 0.00 0.97 2 irq/23-ehci_hcd
04:48:28 PM - 151 0.00 0.97 0.00 0.97 2 |__irq/23-ehci_hcd
04:48:28 PM 2260 - 0.30 0.03 0.00 0.33 2 mpd
04:48:28 PM - 2260 0.00 0.00 0.00 0.00 2 |__mpd
04:48:28 PM - 2263 0.02 0.00 0.00 0.02 2 |__mpd
04:48:28 PM - 2264 0.28 0.00 0.00 0.28 2 |__mpd
04:48:28 PM - 2412 0.02 0.02 0.00 0.03 2 |__mpd
NRPACKS = 20
Kode:
root@hifi:~# cat /sys/module/snd_usb_audio/parameters/nrpacks
20
[I]Resultat av procinfo -d -n 60:[/I]
98951 ehci_hcd:usb1, eh = 1649.18 int/s
[I]Resultat av pidstat 60 -t -p 192,151,2260 (prosentvis bruk av 1 CPU-kjerne)[/I]
Linux 3.2.0-3-rt-amd64 (hifi) 10/05/2012 _x86_64_ (4 CPU)
04:43:08 PM TGID TID %usr %system %guest %CPU CPU Command
04:44:08 PM 192 - 0.00 2.20 0.00 2.20 2 irq/23-ehci_hcd
04:44:08 PM - 192 0.00 2.20 0.00 2.20 2 |__irq/23-ehci_hcd
04:44:08 PM 151 - 0.00 0.95 0.00 0.95 2 irq/23-ehci_hcd
04:44:08 PM - 151 0.00 0.95 0.00 0.95 2 |__irq/23-ehci_hcd
04:44:08 PM 2260 - 0.32 0.00 0.00 0.32 2 mpd
04:44:08 PM - 2260 0.00 0.00 0.00 0.00 2 |__mpd
04:44:08 PM - 2263 0.00 0.02 0.00 0.02 2 |__mpd
04:44:08 PM - 2264 0.28 0.00 0.00 0.28 2 |__mpd
04:44:08 PM - 2412 0.02 0.02 0.00 0.03 2 |__mpd
I mitt tilfelle er det ingen signifikant, faktisk neppe eksisterende i det hele tatt, forskjell i hverken interrupt-rater eller CPU-bruk med ulike NRPACKS-verdier. Jeg konkluderer derfor med at dine observasjoner i det minste ikke er relevante for mitt oppsett.