Archphile - μια audiophile διανομή για Raspberry Pi, Udoo, Cubox-i και Odroid C1+/C2

sat lover

Established Member
18 November 2007
272
τελευταία χρησιμοποιώ στο κινητό μια εφαρμογή το vradio με πολλύς και καλούς ελληνικούς σταθμούς.Πως θα μπορούσαμε να βρούμε τα streaming links κάπου μαζεμένα και να τα περάσουμε στα weradio Του archphile;
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Επιστροφή μετά απο πολλούς μήνες στην ανάπτυξη του επόμενου image (μόνο για odroid C1/C1 Και RPi2/RPI3)

Οι μέχρι στιγμής στόχοι είναι δύο:

  • αναβάθμιση των περισσότερων πακέτων σε νεότερες εκδόσεις. Ειδικα στον MPD υπάρχει μια σχετική εξέλιξη ως προς την υποτιθέμενη επίλυση προβλημάτων με θορύβους σε Play/pause κλπ των dsd αρχείων
  • υποστήριξη spotify με χειρισμό από το επίσημο app.
Περισσότερα τις επόμενες ημέρες!
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Μέχρι στιγμής ήττα και στα δύο!

- Τα προβλήματα με τους θορύβους στο DSD δεν έχουν εξαφανιστεί (επαναλαμβάνω αυτό δεν είναι bug - είναι φυσική συμπεριφορά και απλά χρειάζεται "φροντίδα")
- To spotify δεν δουλεύει τουλάχιστον στην αρχιτεκτονική aarch64 του odroid C2.

Οι δοκιμές εννοείται θα συνεχιστούν για πολύ.

Κάτι άλλο ενδιαφέρον που βρήκα σήμερα στο diyaudio:

http://www.diyaudio.com/forums/pc-based/291712-ultimate-mpd-sacd-iso-native-dsd-more.html

Επί της ουσίας ο άνθρωπος προσπαθεί να μαζέψει όλα τα εξωτερικά patches και να δημιουργήσει ένα MPD fork το οποίο θα παίζει παράλληλα SACD ISO αλλά και native DSD.

Θα το δοκιμάσω το συντομότερο δυνατόν.


Υ.γ. Ακόμα προσπαθώ να καταλάβω, πως ενώ έχω μηδενικό ενδιαφέρον για το DSD έχω ξοδέψει τόσο χρόνο γι αυτό στο Archphile :D
 
Last edited:

sat lover

Established Member
18 November 2007
272
Kαλημέρα,έβαλα τις δυο γραμμες
systemctl enable nmbd smbd
systemctl start nmbd smbd
για να δω 2 usb σκληρους δισκους που εχω προσθέσει στο archphile,στο δίκτυο,αλλά προσπαθώντας να εχω πρόσβαση και από λαπτοπ με windows 7 και σταθερό με windows 10 μου βγαζει μηνυμα enter your windows network password,με root και archphile δεν μπαίνει
 

sat lover

Established Member
18 November 2007
272
Θέλω το archphile να προσθέσει στο library 3 εξωτερικούς δίσκους που έχουν γίνει automount απο rpi2 που τρέχει osmc ως εξης:

/dev/sdc1 on /media/796e0e57-6808-d201-6046-0e576808d201 type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks)

/dev/sdb1 on /media/FC9886D298868ABA type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks)

/dev/sda1 on /media/My Passport type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks)

Σε raspi B+ με raspbian βλέπει ως nas1 τον εξωτερικο του δίσκο,
τους παραπάνω προσπάθησα με nas2-nas3-nas4 να τους δει,αλλά δεν.....
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Τους σερβίρει δηλαδή το OSMC με samba? Για να κάνεις mount μέσω fstab στο Archphile, θα πρέπει να ξέρεις πως τους βγάζει προς τα έξω η samba του OSMC.

Παράδειγμα:

το smb.conf του NAS μου έχει το εξής configuration:

Code:
###### SHARES ######

[phileserve] 
comment = home storage
path = /mnt/usb-disks
valid users = @users
force group = users
create mask = 0664
directory mask = 0775
force create mode = 0664
force directory mode = 0775
read only = no

read raw = yes
write raw = yes
strict locking = no
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
min receivefile size = 16384
use sendfile = true
aio read size = 16384
aio write size = 16384
getwd cache = yes


Έχω ορίσει δηλαδή ένα share με ονομασία phileserve το οποίο βγάζει προς τα έξω ότι βλέπει εντός του /mnt/usb-disks. Στο path αυτό γίνονται automount οι σκληροί δίσκοι:
Code:
[root@phileserve usb-disks]# ls
disk1
[root@phileserve usb-disks]#

Παραπάνω φαίνεται ότι έχει γίνει mount ένας σκληρός δίσκος στο directory disk1.


Στο Archphile θα μπορούσα να κάνω mount όλο το phileserve, αλλά επειδή ξέρω ότι θέλω μόνο τον δίσκο disk1 (αυτή τη στιγμή έχω μόνο αυτόν καρφωμένο, αλλά ακόμα και να βάλω και δεύτερο, μόνο τον πρώτο θέλω να σερβίρω στο Archphile), έχω βάλει την εξής γραμμή (υπόψιν ότι δεν είναι public):

Code:
#SAMBA Share - Share using username/password
//10.0.0.150/phileserve/disk1/Music /mnt/nas-samba cifs username=xxxx,password=xxxx,ro,iocharset=utf8,nolock,noauto,x-systemd.automount,x-systemd.device-timeout=10,sec=ntlm


Για να είμαι πιο ακριβής, έχω πάει ένα βήμα παραπέρα. Λόγω του ότι ο δίσκος αυτός εκτός από μουσική έχει και διάφορα άλλα, ορίζω στο archphile να βλέπει μόνο το directory Music του disk1.


Φαντάζομαι ότι σε μπέρδεψα ακόμα περισσότερο, αλλα γενικά πρέπει να ξέρεις πως ακριβώς σερβίρεται ο δίσκος για να μπορέσεις να τον προσαρτήσεις χειροκίνητα μέσω του fstab.

Edit:

Μπορείς να ποστάρεις το /etc/samba/smb.conf του OSMC?
 
Last edited:

sat lover

Established Member
18 November 2007
272
workgroup = WORKGROUP
security=user
follow symlinks = yes
wide links = no
unix extensions = no
lock directory = /var/cache/samba
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
log level = 1
map to guest = bad user
usershare template share = automount template


read raw = Yes
write raw = Yes
strict locking = no
min receivefile size = 16384
use sendfile = true
aio read size = 2048
aio write size = 2048
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072


[osmc]
browsable = yes
read only = no
valid users = osmc
path = /home/osmc
comment = OSMC Home Directory

[automount template]
browseable = yes
-valid = no
valid users = osmc
path = %P
hide files = /$RECYCLE.BIN/System Volume Information/desktop.ini/thumbs.db/

# Add custom shares in smb-shares.conf instead of editing smb.conf so they will not be
# overwritten by samba updates. You can only add new shares to smb-shares.conf, not change
# the default shares or global options. If you need full control see smb-local.conf above.

include = /etc/samba/smb-shares.conf

--- Αυτόματη συγχώνευση μηνύματος ---

Δίνω την εντολή sudo nano /etc/samba/smb-shares.conf και ειναι κενό
 

sat lover

Established Member
18 November 2007
272
Δίνω την εντολή sudo nano /etc/samba/smb-shares.conf και ειναι κενό.
Στο network των windows οι δισκοι φαίνονται κανονικά.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Δοκιμάζω αυτή τη στιγμή ένα feature το οποίο θα υπάρχει στη νέα έκδοση.

Χρησιμοποιώντας μια εφαρμογή με το όνομα mpdscibble (ο κώδικάς είναι από την επίσημη ομάδα του MPD), ο MPD στην εκκίνηση κάθε κομματιού στέλνει την πληροφορία στο Last Fm και έτσι δημιουργείται ιστορικό στην εν λόγω υπηρεσία με στατιστικά, similar artists κλπ.

Είναι ένα feature που κατά καιρούς μου έχουν ζητήσει διάφοροι και έχει ενδιαφέρον.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Με αφορμή τη συζήτηση που κάνουμε εδώ αναφορικά με το transport tweaking:

http://avclub.gr/forum/showthread.p...ίωση-της-ηχητικής-αλυσίδας-στο-Computer-Audio

Θυμήθηκα ότι δεν έχω αναφέρει εδώ πως μπορούμε να ξεφορτωθούμε 2 services σε περίπτωση που δεν τα χρησιμοποιούμε:


- Aν δεν χρησιμοποιούμε usb sticks/δίσκους κλπ:

Code:
systemctl disable devmon@root
systemctl stop devmon@root


- Αν δε χρησιμοποιούμε avahi (πρόσβαση δηλαδή στο OS με τη χρήση του archphile.local αντί της ip):

systemctl disable avahi-daemon
systemctl stop avahi-daemon


Εγώ έχω και τα δύο κλειστά, αλλά για το πρώτο έχω ένα button στο SSH remote μου ώστε να μπορώ στιγμιαία να ανοίξω την υποστήριξη για usb δισκους αν τη χρειαστώ. Η εντολή που αντιστοιχεί στο button είναι η:

Code:
systemctl start devmon@root
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Αποφάσισα χτες να κάνω μια σοβαρότερη προσπάθεια όσον αφορά στα interrupts και τον επιμερισμό των processes.

Στα τελευταία images /usr/bin/archphile-optimize υπήρχαν τα παρακάτω sections:

Code:
# IRQ affinity optimization - Do not apply it if you are using Raspberry Pi 2 !!!
#/usr/bin/irq-archphile

# set affinity of MPD in one core - choose values from 0-3
#taskset -c -p 2 $(pidof mpd)


Στην περίπτωση που κάποιος ενεργοποιούσε το /usr/bin/irq-archphile, αυτό αντιστοιχούσε στην εκτέλεση του παρακάτω script (είναι διαφορετικό για κάθε συσκευή - το παρόν script αφορά στο odroid c2)

Code:
#!/bin/bash
# Cores 1 2 3 4 have to be put as 1 2 4 8

# USB bus
echo "8" > /proc/irq/62/smp_affinity
echo "8" > /proc/irq/63/smp_affinity

# Ethernet
echo "2" > /proc/irq/40/smp_affinity

Το script αυτό κάνει επί της ουσίας ανακατανομή των hardware interrupts σε διάφορα cores. Αυτό κανονικά θα έπρεπε να γίνεται από το ίδιο το OS. Παρόλα αυτά, μια συνηθισμένη κατάσταση σε ARM boards, είναι όλα τα interrupts να πέφτουν αποκλειστικά στο πρώτο core, εκτός από συγκεκριμένα που πρέπει για συστημικούς λόγους να πέφτουν σε όλα. Έτσι εγώ αποφάσισα να ρίχνω τα interrupts 62 και 63 (USB Bus) στο 4ο core και 40 (ethernet) στο 2ο core.


Στη συνέχεια με την εντολή taskset, όριζα στον MPD να χρησιμοποιεί αποκλειστικά τo 3o core.


Η κατάσταση ήταν καλύτερη από την default, αλλά όχι εντελώς φροντισμένη. Έτσι χτες έκανα το εξής:


- Με τη χρήση ενός kernel parameter με ονομασία isolcpus, απάιτησα από το OS να μην προορίζει κανένα process στο core που παίζει ο MPD. Αυτό το έκανα με την προσθήκη του:

Code:
isolcpus=2

στο /boot/boot.ini

στο section setenv bootargs.

Λαμβάνοντας υπόψιν ότι τα cores είναι 0,1,2,3, η παραπάνω εντολή, αφήνει στην ησυχία του το 3o core το οποίο πλέον θα χρησιμοποιηθεί μόνο από processes που θα του ρίξουμε εμείς με την taskset. Έτσι με αυτή την προσθήκη και με το

Code:
taskset -c -p 2 $(pidof mpd)


O MPD όχι μόνο τρέχει σε ένα συγκεκριμένο core, αλλά είναι αποκλειστικά δικό του, με εξαίρεση συγκεκριμένα interrupts τα οποία είναι αδύνατον να αποκλειστούν από το core αυτό.

Στην περίπτωση του odroid C2, το 3ο core χρησιμοποιείται πλέον μόνο για τον MPD, και για τα interupts του meson-timer.


Συνοψίζοντας μέχρι τώρα, είχα καταφέρει τα εξής:

- Διάφορα hardware interrupts να πέφτουν στο 1o core,
- Τα σημαντικότερα για μια δικτυακή audio εφαρμογή interupts να διαμοιράζονται σε ξεχωριστά cores (2o και 4ο)
- O MPD να παίζει μπάλα μόνος του στο 3ο


Κάπου εδώ αποφάσισα να το τραβήξω από τα μαλλιά. Είχα φροντίσει τα πάντα, εκτός από όλα τα υπόλιπα processes του συστήματός μου. Αφού τσέκαρα με το taskset σε ποια CPUS πεφτουν και πήρα για όλα (εκτός του MPD) την απάντηση, ότι συστημικά μπορούν να πέσουν στα 0,1,3 (επιβεβαιώνοντας έτσι ότι όντως είχα αποκλείσει το 3o core με αριθμό 2 υπενθυμίζω), ξεκίνησα να ρίχνω ένα ένα τα processes στο 1o core. Έτσι αυτή τη στιγμή, η λίστα με τα tasksets είναι αυτή:

Code:
taskset -c -p 2 $(pidof mpd)
taskset -c -p 0 $(pidof ympd)
taskset -c -p 0 $(pidof rngd)
taskset -c -p 0 $(pidof systemd-journald)
taskset -c -p 0 $(pidof systemd-logind)
taskset -c -p 0 $(pidof systemd-udevd)
taskset -c -p 0 $(pidof dbus-daemon)
taskset -c -p 0 $(pidof init)
taskset -c -p 0 $(pidof lircd)


Δεν είναι όλα ακόμα στη λίστα αυτή. Απουσιάζουν τα avahi, devmon, upmpdcli, shairport κλπ που εγώ δε χρησιμοποιώ ποτέ, αλλά θα ασχοληθώ με αυτά, καθώς και κάποια άλλα, όπως agetty πχ, που δεν έχω καταφέρει ακόμα να τα πειράξω.


Έτσι πλέον η κατάσταση είναι η εξής:

- 1o core --> έχει όλη τη "σαβούρα"
- 2ο core --> ασχολείται με τα interupts του ethernet
- 3o core --> ασχολείται μόνο με τον MPD
- 4o core --> ασχολείται μόνο με τα interrupts του USB bus

Είναι νομίζω η πρώτη φορά που βλέπω σωστά κατανεμημένη χρήση CPU στο σύστημά μου.

Να σημειωθεί ότι όλα τα παραπάνω, αν τα πειράξουμε πολύ σε ένα OS, υπάρχει περίπτωση να τα κάνουμε χειρότερα, καθώς συνήθως ο scheduler ξέρει να κάνει τη δουλειά καλύτερα από μας. Οι λόγοι που έκανα όλες αυτές τις αλλαγές ήταν:

- είχα παρατηρήσει ότι σχεδόν όλα τα interrupts έπεφταν στο 1o core
- γενικά τα υπόλοιπα 3 δεν έκαναν και πολλά πράγματα
- είχα ζήσει με το συνδυασμό Archphile + παλιό μονοπήρυνο RPI, το οποίο σε ένα CPU του κώλου έπαιζε τα πάντα χωρίς να "μασάει", όπότε ήξερα ότι όσο και να πιέσω το 1ο core με τη σαβούρα που θα του ρίξω δεν πρόκειται να δημιουργήσω κανένα θέμα.

Σε ένα σύστημα με περισσότερα και πιο απαιτητικά processes, όλα τα παραπάνω θα ήταν μια πολύ πιο δύσκολη υπόθεση.


Τέλος παραθέτω μερικά ενδιαφέροντα links:
https://access.redhat.com/documenta.../html/Performance_Tuning_Guide/s-cpu-irq.html
https://access.redhat.com/documenta...tem_Tuning-Interrupt_and_Process_Binding.html
http://xmodulo.com/run-program-process-specific-cpu-cores-linux.html

Ειδικά για το RPI:

https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=100714

Hardware IRQ affinity isn't possible due to the way that the interrupt controller has been implemented.

Because the entirety of the hardware apart from the A7s is untouched, the BCM2835 interrupt routing is still in place. This exposes two lines (nIRQ and nFIQ) that go into the A7 interrupt routing. There is no vectored interrupt controller implemented for the A7s - a simple register-based interface is used to route the global top-level interrupt to a specific core, therefore a single core will get all interrupts and have to service them.
 
Last edited:

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Παραθέτω και κάποιες μετρήσεις που πήρα με πολύωρη ακρόαση flac 16/44.1, έχοντας εφαρμόσει τα παραπάνω στο odroid. Η μουσική σερβίρεται δικτυακά μέσω samba.


1. Σύνοψη των interrupts (το πράσινο με νούμερο 63 είναι τα USB interrupts)





2. Σύνοψη του load




3. Αναλυτικά για το πρώτο core το οποίο δέχεται την πλειοψηφία των processes καθώς και κάποια interrupts




4. Αναλυτικά για το δεύτερο core το οποίο δέχεται τα ethernet interrupts




5. Αναλυτικά για το τρίτο core το οποίο είναι dedicaced στον MPD και σε κάποια αναπόφευκτα συστημικά interupts




6. Αναλυτικά για το τέταρτο core το οποίο δέχεται τα USB interupts




7. Mια σύνοψη των παραπάνω




8. Το network traffic για όλο αυτό το διάστημα

 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Όποιος θέλει μπορεί να παίξει σε οποιοδήποτε image χρησιμοποιεί και εν γένει σε όποια διονομή και αν χρησιμοποιεί.

Εγώ, όταν με το καλό βγάλω image, αυτές τις ρυθμίσεις θα τις έχω ενεργοποιημένες εξ' όρισμού για τα Odroid C1 και C2.


Παρεμπιπτόντως, ο αριθμός των interrupts του USB είναι ιλιγγιώδης και για το λόγο αυτό έχω ανόξει thread στο odroid forum:

http://forum.odroid.com/viewtopic.php?f=141&t=24229

Δεν τίθεται θέμα του να ζορίζεται το odroid κλπ, απλώς προσπαθώ να καταλάβω γιατί συμβαίνει.
 

tuxx

Supreme Member
3 January 2014
3,319
/dev/null
Nαι, αλλά όπως εξήγησα και παραπάνω, το RPI δεν δέχεται tweaking όσον αφορά στα IRQ interupts.
 

kostis

AVClub Enthusiast
26 January 2007
876
Κόρινθος
sorry δεν το κατάλαβα αυτό.

Μήπως σχεδιάζεις την ενσωμάτωση του spotify όπως είχες γράψει σε παλιότερο post;