Chord 2qute and my DOP challenge

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
I have this DAC and as a lot of people I have some serious trouble with streaming DOP (DSD OVER PCM) using Linux and MPD or Squeezelite.

Just google "chord 2qute hiccups".

After more than 1 week installing MPD , Squeezelite on 5 different PC's (3 Laptops and Odroid C1+ and wandboard Dual) and several AUDIO distro , homebrew Arch Linux I found a setup which is quite stable.

My problem was/is that I get these annoying hiccpus (1-2 seconds) stops when I play DOP, and only DOP, all other formats is 100% okay.

The most stable setup right now is my wandboard Dual with an Arch Linux 4.12.3-1-ARCH #1 SMP, and the GitHub - ralph-irving/squeezelite: Lightweight headless squeezebox client emulator git version.

The best setup for squeezelite is the following :

Code:
/usr/bin/squeezelite -o front:CARD=D2Qute,DEV=0 -n michael -a    0 -b 25000 50000 -D -p 95 -s 172.16.0.93

Of course It could change when I have done more testing.


What I can see that made a difference I the following.

1) YOU NEED A ROCK STEADY NETWORK, as your Chord need DATA every single ms , else it goes from white to blue/red and drops DOP mode.

2) The Irq Rate on your linux distro is crucial. On my Odroid C1+ ,it got 7-8000 irqs/sec on USB (piece of crap) AND I can only play for 15-25 mins without these fall outs.

3) A decent CPU for the job, I have tried with a Intel Atom N450 it lack the processing power.

Things I can see which works on my best player so far (Wandboard DUAL).

It have a decent network speed better that my Odroid C1+ , iperf3 says

Code:
Connecting to host 172.16.0.90, port 5201
[  4] local 172.16.0.19 port 60342 connected to 172.16.0.90 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  58.5 MBytes   490 Mbits/sec    0    370 KBytes       
[  4]   1.00-2.00   sec  59.2 MBytes   497 Mbits/sec    0    433 KBytes       
[  4]   2.00-3.00   sec  59.5 MBytes   499 Mbits/sec    0    454 KBytes       
[  4]   3.00-4.00   sec  59.4 MBytes   497 Mbits/sec    0    454 KBytes       
[  4]   4.00-5.00   sec  58.5 MBytes   493 Mbits/sec    0    454 KBytes       
[  4]   5.00-6.00   sec  59.2 MBytes   497 Mbits/sec    0    454 KBytes       
[  4]   6.00-7.00   sec  59.4 MBytes   498 Mbits/sec    0    454 KBytes       
[  4]   7.00-8.00   sec  59.2 MBytes   497 Mbits/sec    0    454 KBytes       
[  4]   8.00-9.00   sec  59.8 MBytes   501 Mbits/sec    0    454 KBytes       
[  4]   9.00-10.00  sec  59.0 MBytes   496 Mbits/sec    0    454 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec   592 MBytes   496 Mbits/sec    0             sender
[  4]   0.00-10.00  sec   591 MBytes   495 Mbits/sec                  receiver

iperf Done.

4) It have low rates of interrupts cat /proc/interrupts about ca
315/sec for USB and 95/sec for network, this is really the only difference between the faster odroid C1+ which gives me constantly hiccups.


I haven't had the same luck with MPD it gives me hiccups a couple of times every hour, still trying to see if I can do something with it.

If you have a Chord 2Qute DAC or other very problematic DOP DACs feel free to comment.
 
Normally I can play for hours (really a joke) but It's a long time DOP on the Chord without issues.

I'm monitoring in cron every min to see If something unusual is happening.

Top

player_top.png


cronlogs every min

player_monitor.png


Quite rocket science but things need to be right for DOP over network with the Chord 2Qute.
 
Since so many people complain only about the 2qute version, IMO the chord USB2 firmware is buggy. It is actually quite common, many manufacturers have bugs in their USB-audio protocol implementation.

8k irqs/s is exactly one IRQ per every USB2 frame (125us).

The problem was never reported to the alsa-devel mailing list (linux audio system) so that developers could have a look if it could be fixed with some quirk in the driver https://www.google.com/search?num=3..."+chord+"2qute"&oq="alsa-devel"+chord+"2qute" like many other non-complying USB audio devices http://elixir.free-electrons.com/linux/latest/source/sound/usb/quirks.c

If you really want to help (to yourself and other 2qute owners), I can guide you through reporting the problem. Normally it is job of the manufacturer but they hardly care - you already gave them your money.
 
Great. Let's add detailed lsusb info provided by your dac:

sudo lsusb -v -d 245f:1213

Then we need contents of the kernel virtual file /proc/asound/card1/pcm0p/sub0/hw_params (card1 should be your usb dac - the index is listed in aplay -l) for two cases:

1) while PCM samples are being played (playback OK)

2) while DSD (DoP) samples are being played (playback stutters)

Also the usb IRQ rate for the two cases above would be useful - e.g. command

Code:
watch -n 1 'cat /proc/interrupts | grep -i usb'
 
Hi.

I'm on the troubled setup right now , so first the ALSA info
http://www.fyn13.dk/diy/alsa_output_chord_2qute_arch_manjaro.txt.

Okay then I did the sudo lsusb -v -d 245f:1213 just in case there should be a difference.
http://www.fyn13.dk/diy/chord_lsusb_manjaro.txt.

It's difficult to get an output for the playback stutters mode as It happens just 1-2 secs once in a while.
But this is the output playing DOP right now.

/proc/asound/card1/pcm0p/sub0/hw_params
Code:
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 176400 (176400/1)
period_size: 3528
buffer_size: 14112

Interrupts are quite many this if from /proc/interrupts

Code:
            CPU0       CPU1       CPU2       CPU3       
   0:         27          0          0          0  IR-IO-APIC    2-edge      timer
   1:          0          0          8          1  IR-IO-APIC    1-edge      i8042
   8:          0          0          0          1  IR-IO-APIC    8-edge      rtc0
   9:        118          2          3         22  IR-IO-APIC    9-fasteoi   acpi
  12:         76         15         36         13  IR-IO-APIC   12-edge      i8042
  16:          0          0          0          0  IR-IO-APIC   16-fasteoi   i801_smbus
 120:          0          0          0          0  DMAR-MSI    0-edge      dmar0
 121:          0          0          0          0  DMAR-MSI    1-edge      dmar1
 [b]122:     578570      14804   10392372      55692  IR-PCI-MSI 327680-edge      xhci_hcd[/b]
 123:       5034       1042       5925       1015  IR-PCI-MSI 376832-edge      ahci[0000:00:17.0]
 124:         29          0          0          3  IR-PCI-MSI 360448-edge      mei_me
 [b]125:     141891       7519     929772      13344  IR-PCI-MSI 524288-edge      enp1s0[/b]
 126:        149         19        119         40  IR-PCI-MSI 32768-edge      i915
 127:       6475        116      14631        156  IR-PCI-MSI 1048576-edge      ath10k_pci
 128:        296        188        195        303  IR-PCI-MSI 514048-edge      snd_hda_intel:card0
 NMI:          0          0          0          0   Non-maskable interrupts
 LOC:      18922      20758      50542      10558   Local timer interrupts
 SPU:          0          0          0          0   Spurious interrupts
 PMI:          0          0          0          0   Performance monitoring interrupts
 IWI:          0          0          0          0   IRQ work interrupts
 RTR:          3          0          0          0   APIC ICR read retries
 RES:       1560       1298       2482        838   Rescheduling interrupts
 CAL:       1231       1574       1371       1607   Function call interrupts
 TLB:         86         74         73         67   TLB shootdowns
 TRM:          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0   Threshold APIC interrupts
 DFR:          0          0          0          0   Deferred Error APIC interrupts
 MCE:          0          0          0          0   Machine check exceptions
 MCP:          6          6          6          6   Machine check polls
 ERR:          0
 MIS:          0
 PIN:          0          0          0          0   Posted-interrupt notification event
 PIW:          0          0          0          0   Posted-interrupt wakeup event

If you need more info , just ask ...

Thanks Michael.
 
Last edited:
Thanks. You do not have to copy the files at the very moment the playback stutters, it was meant "during the playback mode which produces the glitches".

For the interrupts we need the irqs per second - just take two values 1 second apart for xhci (while playing) and subtract them - approximate figure is fine.
 
OK, but we need the files/numbers from same software chain, to make them comparable.

LMS probably uses different period/buffer sizes, we would see that in hw_params file. Also please make sure you are not playing through pulseaudio to your usb dac - your alsa-info.sh output shows pulseaudio is your default alsa device.
 
Good, and the irq/sec for the no-glitches PCM 176.4/24 mode?

Please post the stream0 and hw_params files for both modes too.

Now quite with, shall I play something 176K/24bit none DOP , I have something 192K/24bit I try or I can try without DOP...

This is without DOP.

/proc/asound/card1/pcm0p/sub0/hw_params
Code:
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 352800 (352800/1)
period_size: 7056
buffer_size: 28224


This is irqs for this mode

Code:
122:    1445374      46861   31207725      82469  IR-PCI-MSI 327680-edge      xhci_hcd
122:    1459348      48306   31431841      83208  IR-PCI-MSI 327680-edge      xhci_hcd

(1459348+48306 +31431841+83208)-(1445374+46861+31207725+82469) = 240274/30 = 8009 irq /secs.
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.