Ik snap niet waarom je het gebruik van het woord "bug" aanvalt? Als het niet werkt zoals het hoort, dan is het een bug, ongeacht waar die nou precies zit. Bovendien vind ik het ook een design bug.
Dit valt in de categorie 'semantische fouten'.
Technisch is er niets mis, maar de 'gebruiker' (in dit geval degene die de standaard-waarde heeft ingesteld) heeft verkeerde invoer gegeven, waardoor het systeem wel precies doet wat de gebruiker het systeem vertelt, maar dat is niet wat de gebruiker eigenlijk wil.
Als de gebruiker de juiste waarde invoert, werkt het systeem wel.
Als ik per ongeluk een foto opsla als jpg terwijl ik png wou, dan is dat toch ook geen bug in het programma?
Alleen al het bepalen van X (wat hier dus ook fout gaat!) kan nooit in elk geval goed gaan. Een trage machine zal niet veel aankunnen voordat audio skipt, een supersnelle quadcore bak trekt veel meer.
Dat valt dus vies tegen. Qua geheugen/I/O is er VEEL minder verschil tussen snelle CPUs en trage CPUs dan met sec berekeningen uitvoeren (grotendeels in cache). Dit is communicatie met de hardware, en dat is vooral afhankelijk van PCI-bussen, FSB etc.
Ik heb de PC jarenlang vervloekt omdat de hele architectuur zo belabberd was, waardoor realtime audio/video zeer problematisch was, en heel veel CPU-kracht vereiste (ik was een Commodore Amiga gewend). Pas met de komst van de 486 en localbus was ik 'om'.
Packetgroottes hebben ook hun invloed. 10k pps zal met 9000-byte packets een stuk meer van de computer vergen dan 1-byte packets, en daarmee dus ook eerder de audio latency in gevaar brengen.
Zoals Mark Russinovich ook uitlegt, zit het hem vooral in het verwerken van de headers in de packets. De grootte van een packet maakt niet veel uit. Of een CPU nou 1500 bytes van A naar B moet kopieren, of 9000 bytes, dat is verwaarloosbaar met de huidige geheugenbandbreedte en cachegroottes.
Jumbo-frames zijn ook specifiek in het leven geroepen om de CPU-load te verlagen:
http://sd.wareonearth.com/~phil/jumbo.html
6 keer zoveel headers verwerken voor dezelfde hoeveelheid data, DAT is wat het systeem de das omdoet. Dat is 6 keer zo vaak het systeem onderbreken, en 6 keer uitzoeken bij welke applicatie, 6 keer de status van de sockets updaten, etc etc.
Interrupts zijn de duivel, dat kan iedere systeemprogrammeur je vertellen.
In het DOS-tijdperk was het niet ongebruikelijk om interrupts compleet te negeren terwijl een spelletje bv het beeld opbouwde, omdat dit significante snelheidswinst op kon leveren.
En wat als andere factoren een rol spelen? Hetzelfde systeem zal minder pps kunnen verwerken bij zware disk I/O dan met idle disks. Of bij veel interrupts van de videokaart. Of firewire. Of USB. Of allemaal.
Het aantal interrupts per seconde dat die devices genereren is verwaarloosbaar vergeleken met een netwerkkaart.
Al die systemen gebruiken DMA, en kunnen daardoor grote stukken geheugen verplaatsen zonder assistentie van de CPU. Dat gaat niet per 1500 bytes, maar eerder per 64k of meer. Vooral harddisks en videokaarten zijn zeer 'intelligent', en hebben grote buffers en slimme processors om de CPU zo veel mogelijk te ontlasten.
Check maar met HD-tach. Om mijn raid0-systeem op de volle 140 mb/s te laten draaien, heb ik zo'n 3% CPU nodig. Dat is wel even wat anders dan de 41,61% die Mark Russinovich in zijn blog laat zien.
FireWire en USB hebben sowieso lang de bandbreedte niet om veel interrupts/dataverkeer te genereren. Gigabit is een HEEL stuk sneller.
Een fatsoenlijke oplossing lijkt me om de audio engine een dusdanige prioriteit te geven dat deze iedere 10ms aan de beurt komt, wachtende netwerk interrupts of niet. Op die manier komt de audio engine altijd aan zijn trekken en hapert het geluid dus niet, terwijl de netwerk performance pas achteruitgaat als de belasting zo hoog is dat Windows echt moet kiezen voor OF haperend geluid OF packets niet kunnen afhandelen.
Kan dus niet, zie mijn discussie hierboven met MneoreJ.
Het gaat om de userthreads, niet om de audio-engine zelf. Die audio-engine iedere 10 ms wakker laten worden is het probleem niet, maar als er geen nieuwe audio-data klaarstaat omdat je mediaplayer te weinig CPU-tijd heeft gekregen, dan hapert ie alsnog.
[Reactie gewijzigd door Verwijderd op 27 juli 2024 00:01]