brummer10 / guitarix

guitarix virtual versatile amplification for Jack/Linux
249 stars 26 forks source link

Guitarix at ultra low latency - watchdog keeps killing jconv_mono #56

Closed Rippert closed 2 years ago

Rippert commented 3 years ago

I've been experimenting with using Guitarix at 2.1 ms roundtrip latency on a raspberry pi. It does work with some core isolation tricks, even with fairly complex racks that include a speaker IR.

The problem I'm having is that when I try to confine Guitarix to a single core it works pretty well, until some blip in the cpu usage causes the watchdog to declare an overload on jconv_mono. For instance, this happens every time I try to minimize the Guitarix Window.

Is there some way to reduce the sensitivity of the watchdog? If not, maybe you could point me to the section of code that controls the watchdog and I can try some hacking on it.

Rippert commented 3 years ago

OK, soon as I remembered the specific help command line options I found this:

guitarix --help-overload
Usage:
  guitarix [OPTION…] 

All parameters are optional. Examples:
    guitarix
    guitarix -r gx4-black -i system:capture_3
    guitarix -c -o system:playback_1 -o system:playback_2

Switch to bypass mode on overload condition
  -I, --idle-timeout=SECONDS                                  starved idle thread probe (default: disabled)
  -C, --no-convolver-overload                                 disable overload on convolver missed deadline
  -X, --xrun-overload                                         JACK xrun (default: false)
  -S, --sporadic=SECONDS                                      allow single overload events per interval (default: disabled)

The -C, --no-convolver-overload option works, just get a little clicking noise when closing the window, changing presets, etc.

The -S, --sporadic=SECONDS option doesn't work as it only allows integer seconds, and there are multiple, but isolated, overload events when doing one of these things.

So, let me ask this, can I get rid of the dialog box that jumps up telling me there were ignored overloads?

brummer10 commented 3 years ago

I've been experimenting with using Guitarix at 2.1 ms roundtrip latency on a raspberry pi.

That's fast, man. Nice.

So, let me ask this, can I get rid of the dialog box that jumps up telling me there were ignored overloads?

Only when you hack the source. In file gx_engine_audio.cpp line 746. Looks like you would get rid of the part:

     else {
    gx_print_error(
        "watchdog",
        boost::format(_("Overload ignored (%s)")) % gx_system::atomic_get(overload_reason));
    }

The gx_print_error() function pops up the message box.

Rippert commented 3 years ago

Thanks Hermann, commenting that line out stopped it. Now there's just a soft clicking when I minimize the window or change presets. Throwing up the error window actually causes a lot of the crackling noise.

Rippert commented 3 years ago

OK, I've finally forked Guitarix, and I'm going to try to give you some actual pull requests. If you're OK with that?

So, where do I start looking to add some command line options? Obviously, I want to add one that turns off the pop up warnings. I figure an obscure command line option makes people have to really want to do it, and then they can't complain about not getting the warning.

brummer10 commented 3 years ago

Yes, that is welcome. You'll find command line options in gx_system.h/cpp in the class CmdlineOptions

Rippert commented 3 years ago

Commit 819c891e9e79106ffea22c4de19494809b4ae26b resolves this issue.

Rippert commented 2 years ago

Seems to be a regression on this with the latest commit, b31c5e775c71a196a4f8bd4a9d7ade28ba1c4fac. using the -W switch on the command-line no longer stops the overload-ignored warning box from popping up.

Rippert commented 2 years ago

Actually, it could have been an earlier commit than b31c5e775c71a196a4f8bd4a9d7ade28ba1c4fac. That's just the one I built today to test the LV2 plugin changes.

brummer10 commented 2 years ago

I've put a flag check now directly before we pop up the message, this should avoid it now in any case when the -W switch is set.

Rippert commented 2 years ago

That fixed it. Thanks.