Xentimer/Lapic differences when used as a eventtimer source
Shrikanth Kamath
shrikanth07 at gmail.com
Thu Jun 11 08:30:29 UTC 2020
Trying to understand the implementation differences for xentimer v/s lapic
when used as eventtimer sources. I have 2 setups where there is FreeBSD
11.0 based Junos running in a virtual environment one on a xen based
hypervisor and another kvm based. The xen version has xentimer as the
eventtimer source v/s lapic for the kvm version. For an application that is
doing nanosleep with same resolution of 100 ns and running on these two
systems the rate of timer interrupts is order of magnitude different and
hogs the cpu in case of lapic but for xentimer it is not as significant.
Below I have listed some readings from dtrace probes I ran to understand,
For xen setup using xentimer as eventtimer
# sysctl kern.eventtimer
kern.eventtimer.periodic: 0
kern.eventtimer.timer: XENTIMER
kern.eventtimer.idletick: 0
kern.eventtimer.singlemul: 2
kern.eventtimer.choice: XENTIMER(950) LAPIC(100)
i8254(100) RTC(0)
kern.eventtimer.et.XENTIMER.quality: 950
kern.eventtimer.et.XENTIMER.frequency: 1000000000
kern.eventtimer.et.XENTIMER.flags: 6
For kvm setup using lapic as eventtimer
# sysctl kern.eventtimer
kern.eventtimer.periodic: 0
kern.eventtimer.timer: LAPIC
kern.eventtimer.idletick: 0
kern.eventtimer.singlemul: 2
kern.eventtimer.choice: LAPIC(600) RTC(0)
kern.eventtimer.et.LAPIC.quality: 600
kern.eventtimer.et.LAPIC.frequency: 3000050812
kern.eventtimer.et.LAPIC.flags: 7
Running fbt::et_start:entry with conditional for execname to be the
application and using an aggregation to count() calls, shows ~6K calls per
second for xentimer v/s ~95K calls for lapic
Trying to count number of timer interrupts on each with
dtrace -n 'fbt:kernel-xen:xentimer_intr:entry /cpu != 0/ { @cnt[cpu] =
count();} tick-1s { printa(@cnt); clear(@cnt);}' gives --> 6083 interrupts
per second
v/s
dtrace -n 'fbt:kernel:lapic_handle_timer:entry /cpu != 0/ { @cnt[cpu] =
count();} tick-1s { printa(@cnt); clear(@cnt);}' gives --> 99063 interrupts
per second
For xentimer
#vmstat -i | grep :xen
interrupt total rate
cpu1:xen 3642296440 6084
v/s lapic
# vmstat -i
interrupt total rate
cpu1:timer 61458150612 102715
Also does lapic source have additional overhead of VM entry/VM exit?
--
Shrikanth R K
More information about the freebsd-hackers
mailing list