Jpp 20.0.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JTriggerProfiler.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3# \author mdejong
4#
5version=1.0
6script=${0##*/}
7
8# ------------------------------------------------------------------------------------------
9#
10# Utility script to plot JTriggerProcessor CPU requirements.
11#
12# ------------------------------------------------------------------------------------------
13
14
15if [ -z $JPP_DIR ]; then
16 echo "Variable JPP_DIR undefined."
17 exit
18fi
19
20
21source $JPP_DIR/setenv.sh $JPP_DIR
22
23
24set_variable DEBUG 1
25set_variable WORKDIR ./
26set_variable FRAMETIME_MS 100
27set_variable: RATE_L1_HZ PROFILER_RATE_L1_HZ 500
28set_variable: LIVETIME PROFILER_LIVETIME 1
29set_variable RECYCLING 5 100e3
30set_variable: FORMAT GRAPHICS_FORMAT gif
31set_variable+ BATCH GRAPHICS_BATCH -B
32
33if do_usage $*; then
34 usage "$script <detector file> <trigger file> [working directory]"
35fi
36
37case $# in
38 3) set_variable WORKDIR $3;&
39 2) set_variable TRIGGER $2;
40 set_variable DETECTOR $1;;
41 *) fatal "Wrong number of arguments."
42esac
43
44
45set_variable PIPE $WORKDIR/pipe.dat
46set_variable CPU_TXT $WORKDIR/cpu.txt
47set_variable CPU_ROOT $WORKDIR/cpu.root
48set_variable RATE_TXT $WORKDIR/rate.txt
49set_variable RATE_ROOT $WORKDIR/rate.root
50
51
52typeset -A SETUPS # PMT rate -> number of slices
53
54SETUPS[5e3]=$(($LIVETIME * 100))
55SETUPS[7e3]=$(($LIVETIME * 100))
56SETUPS[9e3]=$(($LIVETIME * 100))
57SETUPS[11e3]=$(($LIVETIME * 100))
58SETUPS[13e3]=$(($LIVETIME * 50))
59SETUPS[15e3]=$(($LIVETIME * 50))
60SETUPS[17e3]=$(($LIVETIME * 50))
61SETUPS[19e3]=$(($LIVETIME * 20))
62
63if (( 1 )); then
64
65 echo "Detector: $DETECTOR"
66 echo "Trigger parameters:"
67 cat $TRIGGER
68
69 for RATE_L0_HZ NUMBER_OF_SLICES in ${(kv)SETUPS}; do
70
71 LOGGER_FILE=$WORKDIR/trigger_${RATE_L0_HZ}.log
72
73 if [[ ! -f $LOGGER_FILE ]]; then
74
75 rm -f $PIPE
76 mkfifo $PIPE
77
78 echo "Generating random background at ${RATE_L0_HZ} Hz."
79
80 nohup JRandomTimesliceWriter \
81 -a $DETECTOR \
82 -o $PIPE \
83 -B "$RATE_L0_HZ $RATE_L1_HZ" \
84 -n $NUMBER_OF_SLICES \
85 -N "$RECYCLING" \
86 -d $DEBUG > /dev/null 2>&1 &
87
88 echo Processing random data.
89
90 JTriggerProcessor \
91 -a $DETECTOR \
92 -f $PIPE \
93 -o "/dev/null" \
94 -@ $TRIGGER \
95 -C JDAQTimesliceL0 \
96 -P \
97 -d $DEBUG > $LOGGER_FILE 2>&1
98
99 rm -f $PIPE
100 fi
101 done
102fi
103
104
105rm -f $CPU_TXT $RATE_TXT >& /dev/null
106rm -f $CPU_ROOT $RATE_ROOT >& /dev/null
107
108for RATE_L0_HZ in `echo ${(k)SETUPS} | tr ' ' '\n' | sort -g`; do
109
110 LOGGER_FILE=$WORKDIR/trigger_${RATE_L0_HZ}.log
111
112 if [[ -f $LOGGER_FILE ]]; then
113
114 let "TOTAL_CPU = 0.0"
115
116 for KEY in "Calibration" "L0" "L1" "L2" "Timeslice router" "Trigger" "Trigger router"; do
117
118 ELAPSED_TIME=`awk -v key="$KEY" '$0 == key,/CPU/ { if ($3 == "elapsed") print $1 }' $LOGGER_FILE`
119
120 let "TOTAL_CPU += $ELAPSED_TIME / $FRAMETIME_MS"
121 done
122
123 TRIGGER_RATE_HZ=`awk '/Trigger rate \[Hz\]/ { print $4 }' $LOGGER_FILE`
124
125 echo "$(($RATE_L0_HZ * 1e-3)) $TOTAL_CPU" >> $CPU_TXT
126 echo "$(($RATE_L0_HZ * 1e-3)) $TRIGGER_RATE_HZ" >> $RATE_TXT
127 fi
128done
129
130
131JGraph \
132 -f $CPU_TXT \
133 -o $CPU_ROOT
134
135JPlot1D \
136 -f $CPU_ROOT:\.\* \
137 -x "0 20" \
138 -y "0 60" \
139 -> "Rate [kHz]" \
140 -\^ "CPU [cores]" \
141 -O CP \
142 -T "" \
143 -o cpu.$FORMAT $BATCH
144
145
146JGraph \
147 -f $RATE_TXT \
148 -o $RATE_ROOT
149
150JPlot1D \
151 -f $RATE_ROOT:\.\* \
152 -x "0 20" \
153 -y "0 400" \
154 -> "Rate [kHz]" \
155 -\^ "Trigger rate [Hz]" \
156 -O CP \
157 -T "" \
158 -o rate.$FORMAT $BATCH