Skip to content

Graphics Performance

Kay Kasemir edited this page Feb 14, 2023 · 3 revisions

Graphics Performance

CS-Studio has fundamentally been designed to use multiple threads, to handle received updates from process variables in background threads to make best use of multi-core CPUs. The display builder will open display files in background threads, using additional threads for embedded displays, to overall open displays as quickly as possible. Plots will be prepared in background threads, drawing to off-screen memory buffers. Eventually, however, the on-screen display needs to be updated, which can only be done on the one GUI thread.

Compared to for example EDM or MEDM where a button was mostly a flat rectangle and an LED was simply a filled circle, newer displays based on Qt or Gtk tend to have widgets rendered with gradients for the fill, with highlights in the border etc. The added workload tends to be handled by graphics hardware. On Windows and Mac OS X, the OS tends to fully support accelerated graphics. On Linux, details depend on the specific graphics card and Linux distribution.

Linux

Use x11perf -all and glxgears to check basic X graphics performance.

Running displays on the actual computer with locally connected monitor, mouse and keyboard will always be faster than running displays via ssh -X .... VNC or Thinlinc can offer slightly better remote display performance but will never reach the speed of a locally running instance.

JavaFX Settings

Run CSS/phoebus with

export JDK_JAVA_OPTIONS=" -Djdk.gtk.verbose=true -Dprism.verbose=true"

to see if it is able to use accelerated graphics or if it falls back to the "sw" software drawing pipeline.

You can try adding options -Djdk.gtk.version=2 vs. -Djdk.gtk.version=3 as well as -Dprism.forceGPU=true vs. -Dprism.forceGPU=false to see if that makes a difference.

See also JavaFX

Display Runtime Settings

You can throttle the display via these settings by increasing the various update delays:

# PV throttle (250)
org.csstudio.display.builder.runtime/update_throttle=250

# Display hesitation to accumulate updates (20)
org.csstudio.display.builder.representation/update_accumulation_time = 20
# Pause after updates (100)
org.csstudio.display.builder.representation/update_delay = 100
# Line Plot update throttle
org.csstudio.display.builder.representation/plot_update_delay = 250
# Image plot update throttle
org.csstudio.display.builder.representation/image_update_delay = 250

If your graphics are fast, you might also try to get more updates via these settings:

# Faster (for tests)
# Display actual update rate by setting
# -Dorg.csstudio.javafx.rtplot.update_counter=true
org.csstudio.display.builder.runtime/update_throttle=1
org.csstudio.display.builder.representation/update_accumulation_time = 1
org.csstudio.display.builder.representation/update_delay = 1
org.csstudio.display.builder.representation/plot_update_delay = 1
org.csstudio.display.builder.representation/image_update_delay = 1

For details, see the full list of preference settings, https://control-system-studio.readthedocs.io/en/latest/preference_properties.html