【分享】MPSoC,XEN虚拟机运行裸核应用程序(baremetal, standalone)的中断延迟

作者:hankf,Xilinx Employee

修改Xilinx的定时器裸核应用程序(baremetal, standalone)例子xttcps_intr_example.c,可以测量中断响应延迟。
然后在单板上运行,以及在XEN的虚拟机上运行,可以分别测量这两种情况下的中断响应延迟。

单板的中断延迟

首先看单板上运行的中断延迟的测试数据,也是没有无xen的中断延迟的测试数据。

TTC device id: 1
TTC device BaseAddress: 0xFF110004
TTC device InputClockHz: 0x5F5E100 = 100000000
Global timer frequency: 0x5F5B9F0 = 99990000
Ticker timer Interval: 62500
Ticker timer Prescaler: 3
... ...
No.1 TickHandler, Counter1: 6, Counter2: 7, average first counter value: 6
No.1 TickHandler, Goblal timer1: 114476857, 2: 114476887, 2-1: 30
... ...
No.20 TickHandler, Counter1: 2, Counter2: 4, average first counter value: 2
No.20 TickHandler, Goblal timer1: 139730363, 2: 139730395, 2-1: 32
No.21 TickHandler, Counter1: 2, Counter2: 4, average first counter value: 2
No.21 TickHandler, Goblal timer1: 140974466, 2: 140974497, 2-1: 31

TTC定时器Prescaler是3,代表缩放倍数是16。
第一次中断响应时TTC的计数器值为6,166=96个TTC时钟周期,相当于960ns。
后续中断响应时TTC的计数器值为2,216=32个TTC时钟周期,相当于320ns。
可以看到,MPSoC的中断响应延迟非常短。

xen虚拟机中断延迟

再看xen的虚拟机下,中断延迟的测试数据。

TTC device id: 1
TTC device BaseAddress: 0xFF110004
TTC device InputClockHz: 0x5F5E100 = 100000000
Global timer frequency: 0x5F5B9F0 = 99990000
Ticker timer Interval: 62500
Ticker timer Prescaler: 3
... ...
No.1 TickHandler, Counter1: 20, Counter2: 22, average first counter value: 20
... ...
No.20 TickHandler, Counter1: 11, Counter2: 13, average first counter value: 12
No.20 TickHandler, Goblal timer1: 11368782108, 2: 11368782109, 2-1: 1
No.21 TickHandler, Counter1: 13, Counter2: 15, average first counter value: 12
No.21 TickHandler, Goblal timer1: 11370077692, 2: 11370077693, 2-1: 1

同样,Prescaler是3,代表缩放倍数是16。
第一次中断响应时TTC的计数器值为20,16*20=320个TTC时钟周期,相当于3200ns。
后续中断响应时TTC的计数器值为12,12*16=192个TTC时钟周期,相当于1920ns。
xen虚拟机会最多会造成中断响应时间增加2240ns。即使这样,在本次测试中,在xen的虚拟机中,MPSoC的中断响应时间最大是3200ns,能满足绝大多数应用的要求。

结论

在xen的虚拟机中,MPSoC的中断响应时间最大是3200ns,能满足绝大多数应用的要求。

推荐阅读