Skip to content
Will Rogers edited this page Apr 6, 2016 · 25 revisions

BOY Performance Test Report

Test Infrastructure

All tests were executed on two PCs:

PC 1

  • DELL Precision T3400
  • CPU: Intel Core2 Quad CPU Q6700 2.66GHz
  • Memory: 4GB
  • OS: Windows Vista 32 bit
  • Java: JDK 1.6.0_26
  • CSS: SNS CSS 3.0.0 (BOY version: 3.0.0)

PC 2

  • DELL Precision workstation T3500
  • CPU: Intel Xeon 4 core CPU W3520 2.66GHz
  • Memory: 4GB
  • OS: Linux 2.6.18 (Red Hat 4.1.2 with KDE)
  • Java: JDK 1.6.0_26
  • CSS: SNS CSS 3.0.0 (BOY version: 3.0.0) note: The CPU usage on PC2 is not an average CPU usage. Since this PC has 4 cores, 100% of CPU usage only means that one core is fully used.

Test Setup

A soft IOC on PC 2 executed this type of EPICS database:

record(ai, "pv$(X)1")
{
	field(DESC, "Analog input")
	field(INP, "pv$(X)1:calcExample.VAL  NPP NMS")
	field(EGUF, "100")
	field(EGU, "Counts")
	field(HOPR, "100")
	field(LOPR, "0")
	field(HIHI, "80")
	field(HIGH, "60")
	field(LOW, "40")
	field(LOLO, "20")
	field(HHSV, "MAJOR")
	field(HSV, "MINOR")
	field(LSV, "MINOR")
	field(LLSV, "MAJOR")
}
record(calc, "pv$(X)1:calcExample")
{
	field(DESC, "Counter")
	field(SCAN,"$(Scan)")
	field(FLNK, "pv$(X)1")
	field(CALC, "(A<B)?(A+C):D")
	field(INPA, "pv$(X)1:calcExample.VAL  NPP NMS")
	field(INPB, "99")
	field(INPC, "1")
	field(INPD, "0")
	field(EGU, "Counts")
	field(HOPR, "100")
	field(HIHI, "80")
	field(HIGH, "60")
	field(LOW, "40")
	field(LOLO, "20")
	field(HHSV, "MAJOR")
	field(HSV, "MINOR")
	field(LSV, "MINOR")
	field(LLSV, "MAJOR")
        field(VAL, "0")
}

The SCAN rate is 0.1 second.

Performance Test

Test Case 1: 100 text updates @10Hz

OPI: 100 Text Update with different PVs updated at 10 hz with alarm

Test Results on PC 1

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: 4%
  • Memory: 129M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 12%, xorg: 2%
  • Memory: 50M

Test Case 2: 400 text updates @10Hz

OPI: 400 Text Update with different PVs updated at 10 hz with alarm

Test Results on PC 1

  • Start up: no delay
  • Actual GUI update: 10Hz
  • CPU: 14%
  • Memory: 120M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 60%, xorg: 8%
  • Memory: 70M

Test Case 3: 1000 text updates @10Hz

OPI: 1000 Text Update with different PVs updated at 10 hz with alarm

Test Results on PC 1

  • Start up: no delay
  • Actual GUI update: 10Hz
  • CPU: 28%
  • Memory: 132M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 99%, xorg: 14%
  • Memory: 85M

Test Case 4: 100 text updates, 100 Spinners, 100 Scrollbars, 100 LEDs, 100 text inputs and 100 graphics widgets @10Hz

OPI: 100 text updates, 100 Spinners, 100 Scrollbars, 100 LEDs, 100 text inputs with different PVs overlapped on 100 graphics widgets updated at 10 hz with alarm

Test Results on PC 1

  • Start up: 1 second
  • Actual GUI update: 7Hz
  • Operation Responsiveness: no delay
  • CPU: 28%
  • Memory: 158M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 78%, xorg: 62%
  • Memory: 120M

Test Case 5: Add 10 XY Graphs to Test case 4

OPI: Based on test case 4, add 10 XY Graphs. Each graph has 10 traces.

Test Results on PC 1

  • Start up: 2 second
  • Actual GUI update: 3Hz
  • Operation Responsiveness: 0.5s delay
  • CPU: 28%
  • Memory: 166M

Test Results on PC 2

  • Start up: 1 second
  • Actual GUI update: 5Hz
  • Operation Responsiveness: no delay
  • CPU: java: 60%, xorg: 70%
  • Memory: 120M

Test Case 6: 10 OPIs, each has 100 text updates @10Hz

OPI: 10 OPIs with widgets as in test case 1; Two CSS windows in separate monitors; 5 tabs on each window; Tabs are arranged to not overlapped.

Test Results on PC 1

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: 22%
  • Memory: 168M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 90%, xorg: 17%
  • Memory: 120M

Test Case 7: 30 OPIs, each has 100 text updates @10Hz

OPI: 30 OPIs with widgets as in test case 1; Two CSS windows in separate monitors; 15 tabs on each window; Tabs are overlapped.

Test Results on PC 1

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: 18%
  • Memory: 214M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 10Hz
  • Operation Responsiveness: no delay
  • CPU: java: 80%, xorg: 6%
  • Memory: 213M

Test Case 8: 2 OPIs based on test case 5

OPI: 2OPIs with widgets as in test case 5; Two CSS windows in separate monitors;

Test Results on PC 1

  • Start up: 3 seconds
  • Actual GUI update: 2Hz
  • Operation Responsiveness: 1 second delay
  • CPU: 28%
  • Memory: 213M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: 2Hz
  • Operation Responsiveness: 1 second delay
  • CPU: java: 60%, xorg: 66%
  • Memory: 200M

Test Case 9: 200 labels with Rules

OPI: 200 labels with same blinking rules (See the blinking rule example in BOY Examples->5_3_Rules_Script.opi). Fast: 10Hz. Slow: 2Hz

Test Results on PC 1

  • Start up: 1 seconds
  • Actual GUI update: 3hz(fast);2hz(slow)
  • Operation Responsiveness: no delay
  • CPU: 7%(blinking at fast); 4%(blinking at slow)
  • Memory: 190M

Test Results on PC 2

  • Start up: 1 seconds
  • Actual GUI update: 3hz(fast);2hz(slow)
  • Operation Responsiveness: no delay
  • CPU: java: 15%, xorg: 3%(blinking at fast); java:8%, xorg: 1%(blinking at slow)
  • Memory: 92M

Test Case 10: 50 Ellipses with Scripts

OPI: 50 Ellipses with same scripts to animate them (See the script example in BOY Examples->5_3_Rules_Script.opi). .

Test Results on PC 1

  • Start up: 0.5 seconds
  • Actual GUI update: no delay
  • Operation Responsiveness: no delay
  • CPU: 3%
  • Memory: 143M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: no delay
  • Operation Responsiveness: no delay
  • CPU: java: 5%, xorg: 4%
  • Memory: 131M

Test Case 11: 10 OPIs with Intensity Graph

OPI: Two CSS windows; Each has 5 OPIs; Each OPI has 4 XY Graphs and a Intensity Graph with a waveform PV which contains 80000 points of data updated at 1Hz.

Test Results on PC 1

  • Start up: 0.5 seconds
  • Actual GUI update: no delay
  • Operation Responsiveness: no delay
  • CPU: 10%
  • Memory: 184M

Test Results on PC 2

  • Start up: no delay
  • Actual GUI update: no delay
  • Operation Responsiveness: no delay
  • CPU: java: 30%, xorg: 6%
  • Memory: 152M

An example in real world

In real world, we have an OPI runs 24X7 in SNS central control room as the big overview screen. It has been running for more than a year and no crash was reported. In this OPI, the size of the Beam Image at Foil (on left) waveform is 76800. There are two waveforms on center XY Graph. Both of waveforms have 105000 points. The size of the Beam Image at Target (on right) waveform is 80000. So it is 366800 points in total. All of these waveforms updates at a rate around 1Hz.

Summary

On a modern PC, BOY is able to satisfy most cases of usage in real world. OPI is responsive even with large amount of widgets updated at fast rate. At SNS, some OPIs has been continually running for several months, in which cases no memory leak and crash was reported.

Clone this wiki locally