2019独角兽企业重金招聘Python工程师标准>>>
KLite作为一个RTOS kernel,也应该有一个性能指标吧,今天用示波器测量GPIO的电平持续时间来测定了一下以下各项参数,以供参考.
精确度:
由于控制GPIO拉高拉低也会占据几个CPU时钟,因此实际实际情况应该略小于测量值.
测试平台:
STM32F429 @ 168MHz
编译器Keil 5.18,优化等级O0
1.静态损耗
刚才搜索了一下,没有发现关于RTOS kernel静态损耗的内容,我来说说我的个人见解,
由于kernel都需要一个滴哒定时器做为时间驱动,这个定时器大多数情况都是1ms中断一次,
如果kernel在滴哒定时器处理函数里面执行的代码持续时间为100us,那么静态损耗就是100us/1ms = 10%.
也就是说这个系统占用了10%的CPU, 而用户代码最多只能使用90%的CPU.
假设某个系统静态损耗达到90%以上,那么这个系统几乎什么事情也干不了,大部分时间都在处理内核事务去了.
因此kernel的静态损耗也算是一个性能指标.
测量方法很简单,KLite的滴哒时钟处理函数是kernel_tick(),那么在进入函数前拉高GPIO,返回时拉低GPIO.
测量GPIO的高平电持续时间就可以算出来静态损耗,由于kernel_tick()要遍历链表,时间复杂度为O(n),
因此静态损耗还与线程数量有关系,这里测量了两组数据:
第1组创建1个线程:min=0.9us,max=3us
第2组创建10个线程:min=0.9us,max=5us
可以看出静态损耗在0.09% - 0.5%之间,还算可以接受吧.
2.任务切换时间
任务切换时间是指从一个线程(任务)切换到另一个线程(任务)所需要的时间,
测量方法为创建两个线程,一个线程释放信号量(调用ksem_post),另一个线程等待信号量(调用ksem_wait),
也通过拉高GPIO来计算时间,直接给出我测量的数据:max=3.5us
虽然与ARM提供的RTX内核(声称<2.6us @ 72MHz)还是有不少差距.也还可以接受吧.
3.中断禁止时间
在中断关闭时拉高GPIO,结束时拉低GPIO,测量所得数据:0.76us
4.中断响应时间
因为KLite并不干扰CPU的中断,因此这个值只与CPU有关,与kernel无关.