Skip to content

genmon moderate CPU use (excluding my scripts)

Submitted by Tcll5850

Assigned to Xfce-Goodies Maintainers

Link to original bug (#15328)

Description

to start off, I'm not gonna say my scripts don't need optimization (particularly my network script)

but I was able to fit my mem/swap script right in the genmon command entry: sh -c "free -m|awk 'FNR==2{printf(\"mem: %d / %d MiB\n\",$3,$2)}'&&free -m|awk 'FNR==2{printf(\"swap: %d / %d MiB\n\",$3,$2)}'" I know it's messy, but for some reason there's a character limit, and for some reason I can't seem to use | directly, so sh -c "" is required...

doing this uses significantly less CPU than HDD polling, though it's still a significant amount due to sh -c "" and apparent process respawning over something like Python's exec().

my network script is another story, which seems to be polled from the HDD every 0.25 seconds, though I could be wrong here (assumption from the performance hit on a 10-line script)...

anyways, having both of these running at 0.25 consumes about 25-30% of my CPU (it's a cruddy x64 Pentium4 with HT on for stability) (0.25 because I like to know exactly what's going on, would go 0.125 (or 0.12 as for some reason limited) if I had the hardware ceiling to)

is it possible I could run in a while loop so I could greatly reduce CPU use from process spawns?? the rest is just the cat and awk commands in my scripts that could probably be optimized.

I hope you're not trying to enforce disk reads every spawn as that would be very bad. ;)

at a glance, this plugin seems to be single-threaded as I can't open the options while in use it waits for the spawn to finish before showing the R-click menu.

how would I recommend better? dual-thread the spawn process while re-executing the shell code and remove the character and command limits (the command should be handled the same as a line in the terminal). (it's better to store the process code in memory than to re-read it from the script file on the HDD)

if I could write this plugin in python, I could probably write something more efficient.