Har nå kjørt gjennom en god del kernel kompileringer og testet interrupt nivå for (kun interrupt nivå og ikke CPU load som vil variere med forskjellige settinger selv om interrupt nivå er konstant):
ALSA device list:
#0: Kirkwood S/PDIF
#1: Luckit Luckit USB Audio 2.0 at usb-orion-ehci.0-1, high speed
#2: ObliUSB 2.0 A r0.1 at usb-orion-ehci.1-1, high speed
Det er kjørt nøyaktig 100 sekunder via script slik at det bootes med ny kernel - MPD startes - det spilles i 100 sekunder og interruptene leses av.
Det som viser seg i praksis er at:
#0 SPDIF ikke påvirkes av NRPACKS settingene for 44.1k/16bit og det er logisk når det kjøres DMA utenom USB.
#1 WaveIO viser en svak nedgang i interrupt nivå med økende NRPACKS setting.
#2 ObliUSB viser en markert nedgang i interrupt nivå med økende NRPACKS setting.
Kode:
44.1k/16bit NRPACKS=1
21: 1071 orion_irq kirkwood-i2s
24: 187697 orion_irq ehci_hcd:usb1
25: 106494 orion_irq ehci_hcd:usb2
29: 1033 orion_irq eth0
44.1k/16bit NRPACKS=8
21: 1071 orion_irq kirkwood-i2s
24: 187213 orion_irq ehci_hcd:usb1
25: 19732 orion_irq ehci_hcd:usb2
29: 1079 orion_irq eth0
44.1k/16bit NRPACKS=16
21: 1071 orion_irq kirkwood-i2s
24: 185296 orion_irq ehci_hcd:usb1
25: 13999 orion_irq ehci_hcd:usb2
29: 1024 orion_irq eth0
44.1k/16bit NRPACKS=32
21: 1071 orion_irq kirkwood-i2s
24: 184471 orion_irq ehci_hcd:usb1
25: 13947 orion_irq ehci_hcd:usb2
29: 1148 orion_irq eth0
176.4k/32bit NRPACKS=32
21: 4231 orion_irq kirkwood-i2s
24: 185155 orion_irq ehci_hcd:usb1
25: 13781 orion_irq ehci_hcd:usb2
29: 3338 orion_irq eth0
352.8k/24bit NRPACKS=32
21: 4439 orion_irq kirkwood-i2s
24: 177722 orion_irq ehci_hcd:usb1
25: 13234 orion_irq ehci_hcd:usb2
29: 4221 orion_irq eth0
352.8k/32bit NRPACKS=32
21: 4663 orion_irq kirkwood-i2s
24: 186351 orion_irq ehci_hcd:usb1
25: 13923 orion_irq ehci_hcd:usb2
29: 5319 orion_irq eth0
De optimale NRPACKS (MAX_PACKS) settingene for USB kortene ligger høyere enn NRPACKS=16 og MAX_PACKS=20,
og også andre settinger er forandret i det oppsettet jeg oppfatter som det mest optimale (men ikke vist her),
men NRPACKS settinger i området 16 til 64 vil bli evaluert i form av lyd kvalitets forskjeller da det enn så lenge blir små forskjeller når en har passert 16...
Det jobbes med en ny firmware versjon og det er en liten sjanse for at de 140 interruptene pr. sekund ved avspilling av 44.1k/16bit til 352.8k/32bit kan reduseres ytterligere med 2 - 4 ganger for 16 og 24bit, men om det lar seg realisere i praksis vil vise seg.
Hadde det forholdt seg slik at det måtte ha vært et interrupt hvert millisekund eller åtte ganger pr. millisekund så ville det ikke ha vært mulig å få noe særlig bedre resultater enn med en NRPACKS=1 setting, men heldigvis er det ikke slik og da fungerer det riktig så bra med høyere NRPACKS settinger så lenge hardwaren henger med (DMA virker?), men for mange eldre USB lydkort "kan det se ut" som at nærmere 2000 interrupt i sekundet er det laveste som er praktisk mulig av en eller annen årsak.
Interrupt antallet pr. sekund øker fra 10.7 til 42 - 46 for SPDIF med høyere samplerater.
Dette er også logisk fordi data mengden øker.
Årsaken til at det ikke øker mer ved 352.8k/24bit/32bit er fordi det da er 192k/16bit som blir overført.
Interrupt antallet pr. sekund for nettverket skalerer også med fil størrelsen og er logisk.
Årsaken til at ObliUSB ligger med ca. 140 interrupt pr. sekund selv om det er 44.1k/16bit eller 352.8k/32bit er delvis "kjent" og det jobbes det med, men det er fortsatt en "ukjent faktor" som det letes etter.
Den kjente årsaken er at ObliUSB foreløpig kun er et 32bit device og 16bit og 24bit musikk blir konvertert til 32bit av MPD og overføres over USB som 32bit.
Når dette er løst vil MPD bruke vesentlig mindre CPU når en spiller 16bit og 24bit musikk filer.
USB interruptene pr. sekund bør også gå ned jo lavere bit dybde og samplerate som spilles fordi datamengden som overføres over USB går ned til det halve (50% forbedring) for 16bit ...
Det interresante er at det er for 44.1k/16bit eller mer korrekt 16bit format det vil bli de største forbedringene, for 352.8k/32bit eller mer korrekt 32bit format er det allerede rimelig optimalt...
For de som måtte "lure" så har jeg også tidliger fått laget custom firmware i produkter og custom drivere for å få både bedre ytelse og bedre lydkvalitet.
Også denne gangen har jeg fått laget en custom firmware for et produkt som i utgangspunktet var brukbart.
Og med VID-PID så får jeg også "custom device name" og unikt produkt ID nummer, og en kan for eksempel legge inn alternativ kode og eller parametre i for eksempel "quirks" filene for USB.
Jeg trengte dette fordi min versjon av USB adapteret blir ganske så forskjellig fra standard versjonen.