xyproto / wallutils

:city_sunset: Utilities for handling monitors, resolutions, wallpapers and timed wallpapers
BSD 3-Clause "New" or "Revised" License
463 stars 17 forks source link

setrandom locks whole session #27

Closed tigerjack closed 1 year ago

tigerjack commented 2 years ago

I have a script calling setrandom every 30 minutes, and each time I notice the whole system freezes for a short period. This is quite annoying, especially when typing. Here there is a short video reproducing the issue https://youtu.be/08_GoLF4sIw

xyproto commented 2 years ago

Hi! Thanks for reporting the issue.

Could you please try running it as easy -c3 -N setrandom, after having installed easy from https://github.com/xyproto/easy ?

If that works out, I can add some of the code from easy to setrandom to make it ease up on the resource use.

tigerjack commented 2 years ago

Hi! Thanks for reporting the issue.

Could you please try running it as easy -c3 -N setrandom, after having installed easy from https://github.com/xyproto/easy ?

If that works out, I can add some of the code from easy to setrandom to make it ease up on the resource use.

Thanks for your help. I tried indeed to run it with easy and it seems slightly better, but still there is a visible freeze. I was thinking that it may be due to the size of the file, but I don't experience the biggest file in the directory with, for example, feh or imv. So, maybe it's just due to the number of files (~100)? I don't know, just guessing here.

xyproto commented 2 years ago

It could be related to the number of files, but it's fairly quick with a directory here with 172 files:

% time setrandom /usr/share/pixmaps
setrandom /usr/share/pixmaps  0,01s user 0,00s system 105% cpu 0,011 total

How long does it take on your system?

Could it be that the disk spins down, if you use a harddrive, and then it needs to spin up again when a random wallpaper is set?

tigerjack commented 2 years ago

@xyproto

>time setrandom -v "$(xdg-user-dir PICTURES)/NotShotwelled/Backgrounds/esahubble-top100" 
Setting background image to: /mnt/internal/SharedData/Pictures/NotShotwelled/Backgrounds/esahubble-top100/heic1307a.jpg
Using the Sway backend.
swaymsg output * bg /mnt/internal/SharedData/Pictures/NotShotwelled/Backgrounds/esahubble-top100/heic1307a.jpg stretch
real    0m0.251s
user    0m0.019s
sys 0m0.012s
ls -l "$(xdg-user-dir PICTURES)/NotShotwelled/Backgrounds/esahubble-top100" | wc -l
93
>du -sh "$(xdg-user-dir PICTURES)/NotShotwelled/Backgrounds/esahubble-top100"
614M    /mnt/internal/SharedData/Pictures/NotShotwelled/Backgrounds/esahubble-top100
tigerjack commented 1 year ago

As a matter of fact, I think it's also related to the number of monitors you have. Also, I think it may be a problem with swaymsg output itself

This is the comparison of a direct application of swaymsg on a random file, and an indirect application through setrandom. 3 monitors were plugged.

hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' './direct.sh' hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' './indirect.sh'

Command Mean [s] Min [s] Max [s] Proportions
./direct.sh 2.089 ± 0.334 1.552 2.468 [User: 0.006 s, System: 0.004 s]
./indirect.sh 1.957 ± 0.303 1.443 2.399 [User: 0.006 s, System: 0.006 s]
xyproto commented 1 year ago

Thanks for the nice table, @tigerjack!

I assume we can conclude that it's swaymsg output that takes time.