Re: [PATCH] realtime-virtual-host profile: remove lapic advancement
calculation
by Jaroslav Skarvada
Upstream PR:
https://github.com/redhat-performance/tuned/pull/288
----- Original Message -----
> On Wed, Jul 22, 2020 at 04:06:10AM -0400, Jaroslav Skarvada wrote:
> > Hi,
> >
> > thanks for the patch. It seems we can also drop the
> > tuned-profiles-nfv-host-bin
> > package from next RHELs, because it was used only for this calculation
> >
> > thanks & regards
> >
> > Jaroslav
>
> Yep!
>
> >
> > ----- Original Message -----
> > > Thanks for the patch Marcelo. I believe the tuned.spec file should also
> > > be
> > > updated
> > > now that qemu-kvm-tools-rhev package doesn't seem to be needed?
> > >
> > > On Tue, Jul 21, 2020 at 7:21 PM Marcelo Tosatti <mtosatti(a)redhat.com>
> > > wrote:
> > >
> > > >
> > > > The LAPIC advancement improvement is minimal (3 or 4 us) and its
> > > > calculation has shown to be problematic under certain
> > > > scenarios (for example if qemu-kvm is not installed).
> > > >
> > > > Remove it.
> > > >
> > > > Signed-off-by: Marcelo Tosatti <mtosatti(a)redhat.com>
> > > >
> > > > diff --git
> > > > a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > > > b/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > > > deleted file mode 100755
> > > > index 539c47e..0000000
> > > > --- a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > > > +++ /dev/null
> > > > @@ -1,30 +0,0 @@
> > > > -#!/bin/bash
> > > > -
> > > > -: ${1?"Usage: $0 latency-file"}
> > > > -
> > > > -lines=`wc -l $1 | cut -f 1 -d " "`
> > > > -in_range=0
> > > > -prev_value=1
> > > > -for i in `seq 1 $lines`; do
> > > > - a=`awk "NR==$i" $1 | cut -f 2 -d ":"`
> > > > - value=$(($a*100/$prev_value))
> > > > - if [ $value -ge 98 -a $value -le 102 ]; then
> > > > - in_range=$(($in_range + 1))
> > > > - else
> > > > - in_range=0
> > > > - fi
> > > > - if [ $in_range -ge 2 ]; then
> > > > - echo -n "optimal value for lapic_timer_advance_ns is: "
> > > > - awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
> > > > - exit 0
> > > > - fi
> > > > - prev_value=$a
> > > > -done
> > > > -# if still decreasing, then use highest ns value
> > > > -if [ $value -le 99 ]; then
> > > > - echo -n "optimal value for lapic_timer_advance_ns is: "
> > > > - awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
> > > > - exit 0
> > > > -fi
> > > > -echo optimal not found
> > > > -exit 1
> > > > diff --git a/profiles/realtime-virtual-host/script.sh
> > > > b/profiles/realtime-virtual-host/script.sh
> > > > index edae6c5..a11dac7 100755
> > > > --- a/profiles/realtime-virtual-host/script.sh
> > > > +++ b/profiles/realtime-virtual-host/script.sh
> > > > @@ -2,102 +2,13 @@
> > > >
> > > > . /usr/lib/tuned/functions
> > > >
> > > > -CACHE_VALUE_FILE=./lapic_timer_adv_ns
> > > > -CACHE_CPU_FILE=./lapic_timer_adv_ns.cpumodel
> > > > -KVM_LAPIC_FILE=/sys/module/kvm/parameters/lapic_timer_advance_ns
> > > > KTIMER_LOCKLESS_FILE=/sys/kernel/ktimer_lockless_check
> > > > -QEMU=$(type -P qemu-kvm || echo /usr/libexec/qemu-kvm)
> > > > -TSCDEADLINE_LATENCY="/usr/share/qemu-kvm/tscdeadline_latency.flat"
> > > > -[ -f "$TSCDEADLINE_LATENCY" ] ||
> > > > TSCDEADLINE_LATENCY="/usr/share/tuned-profiles-nfv-host-bin/tscdeadline_latency.flat"
> > > > -[ -f "$TSCDEADLINE_LATENCY" ] ||
> > > > TSCDEADLINE_LATENCY="/usr/share/tuned/tscdeadline_latency.flat"
> > > > -
> > > > -run_tsc_deadline_latency()
> > > > -{
> > > > - dir=`mktemp -d`
> > > > -
> > > > - for i in `seq 1000 500 7000`; do
> > > > - echo $i > $KVM_LAPIC_FILE
> > > > -
> > > > - unixpath=`mktemp`
> > > > -
> > > > - chrt -f 1 $QEMU -S -enable-kvm -device pc-testdev \
> > > > - -device isa-debug-exit,iobase=0xf4,iosize=0x4 \
> > > > - -display none -serial stdio -device pci-testdev \
> > > > - -kernel "$TSCDEADLINE_LATENCY" \
> > > > - -cpu host,tsc-deadline=on \
> > > > - -mon chardev=char0,mode=readline \
> > > > - -chardev socket,id=char0,nowait,path=$unixpath,server |
> > > > grep
> > > > latency | cut -f 2 -d ":" > $dir/out &
> > > > -
> > > > - sleep 1s
> > > > - pidofvcpu=`echo "info cpus" | ncat -U $unixpath | grep
> > > > thread_id
> > > > | cut -f 3 -d "=" | tr -d "\r"`
> > > > - taskset -p -c $1 $pidofvcpu >/dev/null
> > > > - echo "cont" | ncat -U $unixpath >/dev/null
> > > > - wait
> > > > -
> > > > - if [ ! -f $dir/out ]; then
> > > > - die running $TSCDEADLINE_LATENCY failed
> > > > - fi
> > > > -
> > > > - tmp=$(wc -l $dir/out | awk '{ print $1 }')
> > > > - if [ $tmp -eq 0 ]; then
> > > > - die running $TSCDEADLINE_LATENCY failed
> > > > - fi
> > > > -
> > > > - A=0
> > > > - while read l; do
> > > > - A=$(($A+$l))
> > > > - done < $dir/out
> > > > -
> > > > - lines=`wc -l $dir/out | cut -f 1 -d " "`
> > > > - ans=$(($A/$lines))
> > > > - echo $i: $ans
> > > > - done
> > > > -}
> > > >
> > > > start() {
> > > > setup_kvm_mod_low_latency
> > > >
> > > > disable_ksm
> > > >
> > > > - # If CPU model has changed, clean the cache
> > > > - if [ -f $CACHE_CPU_FILE ]; then
> > > > - curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f 2 -d
> > > > ":"
> > > > | uniq`
> > > > - if [ -z "$curmodel" ]; then
> > > > - die failed to read CPU model
> > > > - fi
> > > > -
> > > > - genmodel=`cat $CACHE_CPU_FILE`
> > > > -
> > > > - if [ "$curmodel" != "$genmodel" ]; then
> > > > - rm -f $CACHE_VALUE_FILE
> > > > - rm -f $CACHE_CPU_FILE
> > > > - fi
> > > > - fi
> > > > -
> > > > - # If the cache is empty, find the best lapic_timer_advance_ns
> > > > value
> > > > - # and cache it
> > > > -
> > > > - if [ ! -f $KVM_LAPIC_FILE ]; then
> > > > - die $KVM_LAPIC_FILE not found
> > > > - fi
> > > > -
> > > > - if [ ! -f $CACHE_VALUE_FILE ]; then
> > > > - if [ -f "$TSCDEADLINE_LATENCY" ]; then
> > > > - tempdir=`mktemp -d`
> > > > - isolatedcpu=`echo "$TUNED_isolated_cores_expanded" | cut
> > > > -f
> > > > 1 -d ","`
> > > > - run_tsc_deadline_latency $isolatedcpu > $tempdir/lat.out
> > > > - if ! ./find-lapictscdeadline-optimal.sh $tempdir/lat.out
> > > > >
> > > > $tempdir/opt.out; then
> > > > - die could not find optimal latency
> > > > - fi
> > > > - echo `cat $tempdir/opt.out | cut -f 2 -d ":"` >
> > > > $CACHE_VALUE_FILE
> > > > - curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f
> > > > 2
> > > > -d ":" | uniq`
> > > > - echo "$curmodel" > $CACHE_CPU_FILE
> > > > - fi
> > > > - fi
> > > > -
> > > > - if [ -f $CACHE_VALUE_FILE ]; then
> > > > - echo `cat $CACHE_VALUE_FILE` > $KVM_LAPIC_FILE
> > > > - fi
> > > > systemctl start rt-entsk
> > > >
> > > > if [ -f $KTIMER_LOCKLESS_FILE ]; then
> > > >
> > > >
> > >
>
3 years, 9 months
Re: [PATCH] realtime-virtual-host profile: remove lapic advancement
calculation
by Jaroslav Skarvada
Hi,
thanks for the patch. It seems we can also drop the tuned-profiles-nfv-host-bin
package from next RHELs, because it was used only for this calculation
thanks & regards
Jaroslav
----- Original Message -----
> Thanks for the patch Marcelo. I believe the tuned.spec file should also be
> updated
> now that qemu-kvm-tools-rhev package doesn't seem to be needed?
>
> On Tue, Jul 21, 2020 at 7:21 PM Marcelo Tosatti <mtosatti(a)redhat.com> wrote:
>
> >
> > The LAPIC advancement improvement is minimal (3 or 4 us) and its
> > calculation has shown to be problematic under certain
> > scenarios (for example if qemu-kvm is not installed).
> >
> > Remove it.
> >
> > Signed-off-by: Marcelo Tosatti <mtosatti(a)redhat.com>
> >
> > diff --git
> > a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > b/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > deleted file mode 100755
> > index 539c47e..0000000
> > --- a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
> > +++ /dev/null
> > @@ -1,30 +0,0 @@
> > -#!/bin/bash
> > -
> > -: ${1?"Usage: $0 latency-file"}
> > -
> > -lines=`wc -l $1 | cut -f 1 -d " "`
> > -in_range=0
> > -prev_value=1
> > -for i in `seq 1 $lines`; do
> > - a=`awk "NR==$i" $1 | cut -f 2 -d ":"`
> > - value=$(($a*100/$prev_value))
> > - if [ $value -ge 98 -a $value -le 102 ]; then
> > - in_range=$(($in_range + 1))
> > - else
> > - in_range=0
> > - fi
> > - if [ $in_range -ge 2 ]; then
> > - echo -n "optimal value for lapic_timer_advance_ns is: "
> > - awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
> > - exit 0
> > - fi
> > - prev_value=$a
> > -done
> > -# if still decreasing, then use highest ns value
> > -if [ $value -le 99 ]; then
> > - echo -n "optimal value for lapic_timer_advance_ns is: "
> > - awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
> > - exit 0
> > -fi
> > -echo optimal not found
> > -exit 1
> > diff --git a/profiles/realtime-virtual-host/script.sh
> > b/profiles/realtime-virtual-host/script.sh
> > index edae6c5..a11dac7 100755
> > --- a/profiles/realtime-virtual-host/script.sh
> > +++ b/profiles/realtime-virtual-host/script.sh
> > @@ -2,102 +2,13 @@
> >
> > . /usr/lib/tuned/functions
> >
> > -CACHE_VALUE_FILE=./lapic_timer_adv_ns
> > -CACHE_CPU_FILE=./lapic_timer_adv_ns.cpumodel
> > -KVM_LAPIC_FILE=/sys/module/kvm/parameters/lapic_timer_advance_ns
> > KTIMER_LOCKLESS_FILE=/sys/kernel/ktimer_lockless_check
> > -QEMU=$(type -P qemu-kvm || echo /usr/libexec/qemu-kvm)
> > -TSCDEADLINE_LATENCY="/usr/share/qemu-kvm/tscdeadline_latency.flat"
> > -[ -f "$TSCDEADLINE_LATENCY" ] ||
> > TSCDEADLINE_LATENCY="/usr/share/tuned-profiles-nfv-host-bin/tscdeadline_latency.flat"
> > -[ -f "$TSCDEADLINE_LATENCY" ] ||
> > TSCDEADLINE_LATENCY="/usr/share/tuned/tscdeadline_latency.flat"
> > -
> > -run_tsc_deadline_latency()
> > -{
> > - dir=`mktemp -d`
> > -
> > - for i in `seq 1000 500 7000`; do
> > - echo $i > $KVM_LAPIC_FILE
> > -
> > - unixpath=`mktemp`
> > -
> > - chrt -f 1 $QEMU -S -enable-kvm -device pc-testdev \
> > - -device isa-debug-exit,iobase=0xf4,iosize=0x4 \
> > - -display none -serial stdio -device pci-testdev \
> > - -kernel "$TSCDEADLINE_LATENCY" \
> > - -cpu host,tsc-deadline=on \
> > - -mon chardev=char0,mode=readline \
> > - -chardev socket,id=char0,nowait,path=$unixpath,server | grep
> > latency | cut -f 2 -d ":" > $dir/out &
> > -
> > - sleep 1s
> > - pidofvcpu=`echo "info cpus" | ncat -U $unixpath | grep thread_id
> > | cut -f 3 -d "=" | tr -d "\r"`
> > - taskset -p -c $1 $pidofvcpu >/dev/null
> > - echo "cont" | ncat -U $unixpath >/dev/null
> > - wait
> > -
> > - if [ ! -f $dir/out ]; then
> > - die running $TSCDEADLINE_LATENCY failed
> > - fi
> > -
> > - tmp=$(wc -l $dir/out | awk '{ print $1 }')
> > - if [ $tmp -eq 0 ]; then
> > - die running $TSCDEADLINE_LATENCY failed
> > - fi
> > -
> > - A=0
> > - while read l; do
> > - A=$(($A+$l))
> > - done < $dir/out
> > -
> > - lines=`wc -l $dir/out | cut -f 1 -d " "`
> > - ans=$(($A/$lines))
> > - echo $i: $ans
> > - done
> > -}
> >
> > start() {
> > setup_kvm_mod_low_latency
> >
> > disable_ksm
> >
> > - # If CPU model has changed, clean the cache
> > - if [ -f $CACHE_CPU_FILE ]; then
> > - curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f 2 -d ":"
> > | uniq`
> > - if [ -z "$curmodel" ]; then
> > - die failed to read CPU model
> > - fi
> > -
> > - genmodel=`cat $CACHE_CPU_FILE`
> > -
> > - if [ "$curmodel" != "$genmodel" ]; then
> > - rm -f $CACHE_VALUE_FILE
> > - rm -f $CACHE_CPU_FILE
> > - fi
> > - fi
> > -
> > - # If the cache is empty, find the best lapic_timer_advance_ns value
> > - # and cache it
> > -
> > - if [ ! -f $KVM_LAPIC_FILE ]; then
> > - die $KVM_LAPIC_FILE not found
> > - fi
> > -
> > - if [ ! -f $CACHE_VALUE_FILE ]; then
> > - if [ -f "$TSCDEADLINE_LATENCY" ]; then
> > - tempdir=`mktemp -d`
> > - isolatedcpu=`echo "$TUNED_isolated_cores_expanded" | cut -f
> > 1 -d ","`
> > - run_tsc_deadline_latency $isolatedcpu > $tempdir/lat.out
> > - if ! ./find-lapictscdeadline-optimal.sh $tempdir/lat.out >
> > $tempdir/opt.out; then
> > - die could not find optimal latency
> > - fi
> > - echo `cat $tempdir/opt.out | cut -f 2 -d ":"` >
> > $CACHE_VALUE_FILE
> > - curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f 2
> > -d ":" | uniq`
> > - echo "$curmodel" > $CACHE_CPU_FILE
> > - fi
> > - fi
> > -
> > - if [ -f $CACHE_VALUE_FILE ]; then
> > - echo `cat $CACHE_VALUE_FILE` > $KVM_LAPIC_FILE
> > - fi
> > systemctl start rt-entsk
> >
> > if [ -f $KTIMER_LOCKLESS_FILE ]; then
> >
> >
>
3 years, 9 months