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