Table of contents:
The test system:
TOF-0, TOF-1, TOF-2, TOF-4 VME CPUs --> netgear 8 port switch --> foundry switch --> Event Builder
Conditions:
The detailed results on Event Builder performance are here: EventBuilderPermormance01
The following plots represent a summary of the performance:
EB effic vs event rate and data rate:
EB effic vs subevt size and data rate:
daq_evtbuild CPU usage vs data rate:
daq_netmem CPU usage vs data rate:
daq_evtbuild: fill level of buffers vs data rate:
daq_netmem: fill level of buffers vs data rate:
Difference from previous test-1: different sources have different sizes of subevents. Subevent sizes were Gaussian-like smeared. In this test I was only increasing an event rate. The subevent sizes were constant (given in table below). The Event Builder buffers were accordingly tuned.
Configuration of data sources:
Number of sources | subevt size | Buffer size |
60 | 116 Bytes | 2x4 MB |
20 | 338 Bytes | 2x8 MB |
10 | 1.17 kBytes | 2x32 MB |
Event Builder performance:
ev rate | data rate | disc evt | cpu evtbuild | cpu netmem | load | buff evtbuild | buff netmem |
Hz | MB/sec | % | % | % | % | % | |
1000 | 23 | 0 | 12 | 10 | 0.5 | 10 | 5 |
2000 | 46 | 0 | 20 | 19 | 0.6 | 10 | 10 |
3000 | 69 | 0 | 30 | 28 | 0.7 | 20 | 10/20 |
4000 | 95 | 0 | 44 | 32 | 0.9 | 20/30 | 20 |
Difference from test-2: Now I additionaly generate a huge subevent (size = 100 kBytes) once per about 10000 events for every data source asynchronously.
Event Builder performance:
ev rate | data rate | disc evt | cpu evtbuild | cpu netmem | load | buff evtbuild | buff netmem |
Hz | MB/sec | % | % | % | % | % | |
1000 | 23 | 0 | 12 | 10 | 0.5 | 20 | 10 |
2000 | 46 | 0 | 20 | 18 | 0.5 | 20 | 15 |
3000 | 69 | 0 | 33 | 29 | 0.6 | 20 | 15 |
4000 | 95 | 0 | 42 | 35 | 0.9 | 20/30 | 20 |
Conclusions: Event Builder shows stable operation. The fill level of buffers is far below critical. The fill level for the test-3 is given in MB in a table below for different event rates.
Event rate | source numbers | buff size | evtbuild buff fill level | netmem buff fill level |
Hz | MB | MB | MB | |
1000 | 0-59 | 8 | 1.6 | 0.8 |
60-79 | 16 | 3.2 | 1.6 | |
80-89 | 64 | 12.8 | 6.4 | |
2000 | 0-59 | 8 | 1.6 | 1.2 |
60-79 | 16 | 3.2 | 2.4 | |
80-89 | 64 | 12.8 | 9.6 | |
3000 | 0-59 | 8 | 1.6 | 1.2 |
60-79 | 16 | 3.2 | 2.4 | |
80-89 | 64 | 12.8 | 9.6 | |
4000 | 0-59 | 8 | 1.6 | 1.6 |
60-79 | 16 | 4.8 | 3.2 | |
80-89 | 64 | 19.2 | 12.8 |
Difference from test-3: now I additionally write the data to a local hard disk and to a Data Mover via RFIO.
Event Builder performance:
ev rate | data rate | disc evt | cpu evtbuild | cpu netmem | load | buff evtbuild | buff netmem |
Hz | MB/sec | % | % | % | % | % | |
1000 | 23 | 0 | 20 | 15 | 0.8 | 20 | 10 |
An open problem: if I generate a huge subevent (size = 100 kBytes) once per about 1000 events for every data source asynchronously, then daq_evtbuild gets blocked and daq_netmem's buffers get fully filled. Under investigation.
The final aim of these tests is to understand the performance of the EB system when writing to the different mass storage systems. Of a special interest is the performance of the Data Mover (DM) when two Event Builders are writing to it.
We will run Event Builders with the following settings:
The setup:
Note: the sizes of the EB buffers are only 4(x2x2) MB!
The performance of the system without Data Mover:
EB | Local disk | Lustre | DM | ev rate | data rate | disc evt | cpu evtbuild | cpu netmem | load | buff evtbuild | buff netmem |
kHz | MB/sec | % | % | % | % | % | |||||
hadeb06 | - | - | - | 3 | 35 | 0 | - | - | 0.3 | 10 | 10 |
lxhadesdaq | - | - | - | 3 | 35 | 0 | - | - | 0.4 | 10 | 10 |
lxhadesdaq | - | yes | - | 2 | 25 | 0 | - | - | 0.4 | 10 | 10 |
lxhadesdaq | yes | yes | - | 2 | 25 | 0 | 25 | 10 | 0.9 | 10 | 10 |
Some results:
Now the tests with Data Mover and 2 EBs:
EB | Local disk | Lustre | DM | ev rate | data rate | disc evt | cpu evtbuild | cpu netmem | load | buff evtbuild | buff netmem |
kHz | MB/sec | % | % | % | % | % | |||||
hadeb06 | - | - | yes | 1 | 15 | 0 | 8 | 4 | 0.2 | 10 | 10 |
lxhadesdaq | - | yes | yes | 1 | 15 | 0 | 13 | 6 | 0.3 | 10 | 10 |
hadeb06 | - | - | yes | 2 | 25 | 0 | 14 | 11 | 0.5 | 20 | 15 |
lxhadesdaq | - | yes | yes | 2 | 25 | 0 | 24 | 10 | 0.5 | 20 | 15 |
Observations:
setup | result |
one EB -> DM -> Tape Drive | OK |
two EBs -> DM | OK: 2.6 TB written to pool during 20 hours |
two EBs -> DM -> two Tape Drives | DM hangs after 20 min |
two EBs -> DM -> one Tape Drive | DM hangs after 20 min |
Several attempts to run with 25 MB/s data rate ended up with hanging Data Mover (when writing to a tape is enabled). (We had also one hang with 15 MB/s data rate). However there seems to be no problem when only one EB writes to tape via RFIO. Under investigation.
New tests (10.07.2009) showed good performance of writing to tape. Setup:
The aim of the test: the performance of the EB executables recompiled on a 64-bit platform.
Setup:
Results:
Problems:
# -w 512k = UDP buffer size (iperf opens a double of 512k = 1 MByte) # -l 60k = UDP datagram size # -b 5g = send with a speed of 5 Gbits/sec # -i 1 = report each second # -u = UDP protocol
#Expected Rate TX Rate (Client) RX Rate (Server) UDP loss #(Gbits/sec) (Gbits/sec) (Gbits/sec) (%) 4.03 4.03 4.03 0 5.02 5.02 5.02 0 6.07 6.07 6.07 0 7.02 7.02 7.02 0 7.23 7.23 7.23 0 7.44 7.44 6.91 7.2 7.64 7.64 6.49 15 7.80 7.75 6.06 22 8.40 8.03 5.83 27 9.00 8.14 5.78 29
Data rate (Gbit/sec) | UDP loss (%) | UDP loss (%) | UDP loss (%) | UDP loss (%) |
---|---|---|---|---|
lxhabeb01 | lxhadeb02 | lxhadeb03 | lxhadeb04 | |
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 0-0.05 | 0 | 0 | 0-0.05 |
4 | 0.05 | 0-0.05 | 0-0.05 | 0.05 |
5 | 0.2-1.0 | 0-0.2 | 0-0.2 | 0-1.0 |
6 | 0.5-5.0 | 0-0.2 | 0-0.2 | 0.5-5.0 |
7 | 26 | 20 | 50 | 23 |
8 | 40 | 40 | 50 | 50 |
Overall old 10Gbit NICs (lxhadeb02/03) seem to be better than new 10Gbit NICs (lxhadeb01/04). In most of the tests (up to 6Gbit/sec) the UDP loss for lxhadeb02/03 is 0%.
- SergeyYurevich - 12 Mar 2010
I | Attachment | Action | Size | Date | Who | Comment |
---|---|---|---|---|---|---|
![]() | cpuvswmark.gif | manage | 7.9 K | 18 Aug 2009 - 14:48 | SergeyYurevich | cpu usage vs wmark |
![]() | ebbuffvsdatarate.gif | manage | 298.0 K | 08 Feb 2008 - 19:25 | SergeyYurevich | daq_evtbuild: fill level of buffers vs data rat |
![]() | ebcpuvsdatarate.gif | manage | 298.0 K | 08 Feb 2008 - 19:12 | SergeyYurevich | daq_evtbuild CPU usage vs data rate |
![]() | evtvsdatarate.gif | manage | 344.9 K | 08 Feb 2008 - 18:48 | SergeyYurevich | EB effic vs event rate and data rate |
![]() | evtvssubevtsize.gif | manage | 344.9 K | 08 Feb 2008 - 19:03 | SergeyYurevich | EB effic vs subevt size and data rate |
![]() | nmbuffvsdatarate.gif | manage | 298.0 K | 08 Feb 2008 - 19:29 | SergeyYurevich | daq_netmem: fill level of buffers vs data rate |
![]() | nmcpuvsdatarate.gif | manage | 298.0 K | 08 Feb 2008 - 19:26 | SergeyYurevich | daq_netmem: fill level of buffers vs data rate |
![]() | setup_1.1.gif | manage | 11.6 K | 29 May 2008 - 13:09 | SergeyYurevich | test setup |
![]() | udp_loss.png | manage | 2.4 K | 05 Feb 2010 - 11:30 | SergeyYurevich | UDP loss vs Data rate |