CpuSet Feature While Using Upmpdcli
#1
Hi,

I enabled cpuset package and 'm pusing mconnect app with upmpdcli, everything is perfect.

Yesterday, I controlled CPU usage and allocations, and I saw that Upmpdcli was working on CPU1 (user), but MPD was working on CPU0 (system).
As far as I know, music player(mpd) should play on CPU1 for best sound. I want to isolate upmpd and mpd on CPU1 from every other thing that is working on CPU 0.

As you can see, PID numbers:
MPD: 1197,
Upmpdcli: 1181

[Image: top-ss1.png] 

You can see that Upmpdcli is working on CPU1, while MPD is working on CPU0.

[Image: htop-ss2.png]

So, What can I do for isolating MPD on CPU1 with Upmpdcli on startup? I have some Linux skills then I'm open for all suggestions Smile

Thank you,
[-] The following 1 user Likes ekpln's post:
  • Snoopy8
Reply

#2
Hmm.. Can you try and run:
Code:
sudo cset proc --move --pid=PID --threads --toset=user --force

Replace PID (e.g. 1197) with the current PID, and let me know how it goes.

That's the current workaround for now while I work on why it didn't move it before. I suspect this is a race condition (MPD didn't start quick enough), or I only moved the server app, but not the client app!

Have created a ticket, and I'll sort it out in the next release.
Snakeoil Operating System - Music, your way!
Reply

#3
(06-Oct-2020, 01:36 PM)agent_kith Wrote: Hmm.. Can you try and run:
Code:
sudo cset proc --move --pid=PID --threads --toset=user --force

Replace PID (e.g. 1197) with the current PID, and let me know how it goes.

That's the current workaround for now while I work on why it didn't move it before. I suspect this is a race condition (MPD didn't start quick enough), or I only moved the server app, but not the client app!

Have created a ticket, and I'll sort it out in the next release.
Adding my scenario of using MinimServer with upmpdcli. 

I have 4 cores, cores 0 & 1 allocated for system,  cores 2 & 3 for music player.  Mpd is using Core 1.  Upmpdcli is using Core 2.  Minimserver (running Java) is using Core 0.  Is MinimServer considered part of system or player?
Reply

#4
(06-Oct-2020, 01:36 PM)agent_kith Wrote: Hmm.. Can you try and run:
Code:
sudo cset proc --move --pid=PID --threads --toset=user --force

Replace PID (e.g. 1197) with the current PID, and let me know how it goes.

That's the current workaround for now while I work on why it didn't move it before. I suspect this is a race condition (MPD didn't start quick enough), or I only moved the server app, but not the client app!

Have created a ticket, and I'll sort it out in the next release.

Yes, it worked! But with each startup, PID of Mpd changes. So I need to otomate the command with updated PID number at startup.
Reply

#5
This will be fixed in the next update so you don't have to do this manually.

But until then, for a workaroud, you can run something like pgrep to find the PID of MPD.
Snakeoil Operating System - Music, your way!
Reply

#6
Also, when running Mpd by itself, on CPU 3 (2 & 3 allocated to player),  Mympd is running in the background using CPU 1 (0 & 1 allocated to system).   Should  Mympd be running in the background?  If so, then should it not be running on a CPU allocated to player?
Reply

#7
(07-Oct-2020, 02:08 PM)agent_kith Wrote: This will be fixed in the next update so you don't have to do this manually.

But until then, for a workaroud, you can run something like pgrep to find the PID of MPD.

I've created a script to set the mpd priority to real time and to move mpd to user:

Create new file mpdpriority.sh with the following lines:

sudo chrt -r -p 99 $(pgrep mpd)
sudo cset proc --move  --threads --toset=user --force --pid=$(pgrep mpd)

You can then run this manually  as sudo sh [path to script file]/mpdpriority.sh

Or set it to run after boot: 

#crontab-e
@reboot root sh [path to script file]/mpdpriority.sh
[-] The following 2 users Like PeteCallaghan's post:
  • agent_kith, Bromf
Reply

#8
(08-Oct-2020, 10:32 PM)PeteCallaghan Wrote: Or set it to run after boot: 

#crontab-e
@reboot root sh [path to script file]/mpdpriority.sh
This will have the same problem with the current setup, as the script could be run before MPD has finished starting up... A workaround is to create a for loop (with sleep to throttle it down), and loop until pgrep returns a PID.
Snakeoil Operating System - Music, your way!
[-] The following 1 user Likes agent_kith's post:
  • PeteCallaghan
Reply

#9
(09-Oct-2020, 09:21 AM)agent_kith Wrote:
(08-Oct-2020, 10:32 PM)PeteCallaghan Wrote: Or set it to run after boot: 

#crontab-e
@reboot root sh [path to script file]/mpdpriority.sh
This will have the same problem with the current setup, as the script could be run before MPD has finished starting up... A workaround is to create a for loop (with sleep to throttle it down), and loop until pgrep returns a PID.

You are right - I can't get this to work after reboot, even with this: 
 
Code:
 
while ! pgrep mpd >> /dev/null ;
do
sleep 5
done

(09-Oct-2020, 06:22 PM)PeteCallaghan Wrote:
(09-Oct-2020, 09:21 AM)agent_kith Wrote:
(08-Oct-2020, 10:32 PM)PeteCallaghan Wrote: Or set it to run after boot: 

#crontab-e
@reboot root sh [path to script file]/mpdpriority.sh
This will have the same problem with the current setup, as the script could be run before MPD has finished starting up... A workaround is to create a for loop (with sleep to throttle it down), and loop until pgrep returns a PID.

You are right - I can't get this to work after reboot, even with this: 
 
Code:
 
while ! pgrep mpd >> /dev/null ;
do
sleep 5
done

There seemed to be multiple mpd processes, so a loop was needed to catch them all:
 
Code:
 
pids=$(pgrep mpd)
for pid in $pids
do
chrt -r -p 99 $pid
cset proc --move  --threads --toset=user --force --pid=$pid
done
Reply

#10
(09-Oct-2020, 06:22 PM)PeteCallaghan Wrote: There seemed to be multiple mpd processes, so a loop was needed to catch them all:
 
Code:
 
pids=$(pgrep mpd)
for pid in $pids
do
chrt -r -p 99 $pid
cset proc --move  --threads --toset=user --force --pid=$pid
done
In theory you don't have to do this, just find the main PID, and the --threads option will move all threads to the CPUSet.

But, that's really dependent on how MPD works.. e.g. if MPD fork a thread on playback, there is always a chance this script will not work.. i.e. MPD starts, and the script moves the threads to the CPU Set, and when you play, MPD fork another thread, this is not trapped by the script as it happens after the fact..

There's prob a way to fix this, but I havn't investigate deeply enough yet... The current script, while brutally simple, actually yield quite a good audio improvement.. But I've mostly tested this in LMS and Squeezelite..

Please continue to explore this and let me know your progress, I'll incorporate your work into the next release too. Thumbs Up
Snakeoil Operating System - Music, your way!
[-] The following 1 user Likes agent_kith's post:
  • PeteCallaghan
Reply



Bookmarks

Possibly Related Threads…
Thread Author Replies Views Last Post
  [SOLVEDCPUset not working in Ubuntu 22.04 Snoopy8 17 2,119 12-Dec-2023, 07:02 PM
Last Post: uglymusic
  upmpdcli mpd and LMS -- set up help! pathetic 13 1,802 23-Nov-2023, 06:32 PM
Last Post: patricia1066
  Problems installing Upmpdcli koko6969koki 3 603 10-Mar-2023, 06:37 AM
Last Post: Snoopy8
  [SOLVEDupmpdcli unable to start Snoopy8 4 729 12-Dec-2022, 01:42 PM
Last Post: Snoopy8
  Pi4 fresh install no upmpdcli mkysimes 2 583 30-Sep-2022, 09:31 AM
Last Post: mkysimes



Users browsing this thread:
1 Guest(s)

[-]
Our Sponsors

[-]
Welcome
You have to register before you can post on our site.

Username/Email:


Password:





[-]
Latest Threads
ZimaBoard 2x NIC, 2x SATA, 2x USB, 1x PC...
Last Post: agent_kith
26-Mar-2024 12:04 PM
» Replies: 13
» Views: 626
LMS Upgrade ?
Last Post: uglymusic
15-Mar-2024 09:14 PM
» Replies: 7
» Views: 149
Squeezebox shutdown
Last Post: TripleX
13-Mar-2024 07:34 AM
» Replies: 4
» Views: 71
MP3 Not Playing
Last Post: Coacharnold
10-Mar-2024 10:25 AM
» Replies: 3
» Views: 52
Fail to install myMPD
Last Post: hkphantomgtr
03-Mar-2024 08:45 PM
» Replies: 9
» Views: 195
Intel HFI Driver Can "Save Tons Of CPU C...
Last Post: hkphantomgtr
28-Feb-2024 09:15 PM
» Replies: 0
» Views: 41
Announcing Snakeoil Measurements 1.3.0
Last Post: agent_kith
26-Feb-2024 10:02 PM
» Replies: 94
» Views: 4150
More Problems with Squeezelite in 1.3
Last Post: Coacharnold
17-Feb-2024 09:47 PM
» Replies: 2
» Views: 69
Snakeoil Music server & Snakeoil its own...
Last Post: Snoopy8
17-Feb-2024 11:20 AM
» Replies: 8
» Views: 366
RoonBridge (64 bit only)
Last Post: scrarfussi
15-Feb-2024 08:26 PM
» Replies: 3
» Views: 4126

[-]
SnakeoilOS Mission Statement

Our mission is to create a free to use computer OS that is easy to install, intuitive to operate and play music that will connect and engage with you emotionally.

SnakeoilOS gives you the freedom to spend more time on listening, enjoying and exploring music. Wasting time on computers is now a thing of the past! Everything is constantly evolving/improving. Please check back often for updates.

If you like this project, do show your support with a small token donation. All donations collected will be used to run this website, and for purchasing new equipment for the project.


Powered By MyBB, © 2002-2024. Theme © Melroy van den Berg.