论文部分内容阅读
随着信息技术的的飞快发展,实时服务正与人们的生活变得息息相关,同时对操作系统的实时性能也提出了越来越高的要求。而Linux因为其诸多优势,被越来越多的研究者及企业用来开发实时操作系统。在Linux中,定时机制是保证系统实时性的一个重要因素,目前较为流行的定时机制有内核态经典定时器、hrtimer以及在前者基础上实现的用户态setitimer、posix-timer定时器接口。在互联网服务器等场景下,定时器使用规模往往较大,而传统用户态定时器在这种场合下,由于其实现机制的原因,会使系统在用户态与内核态间频繁切换,导致系统性能降低。在保证定时器系统定时精度及误差的情况下,针对上述问题,本文设计了一种新型用户态定时器方案,具体工作如下:针对在不影响系统性能的同时保持较高定时精度的问题,设计了一种新的刻度轮机制加以解决。该机制将时间的流逝看作指针在刻度轮上的不断前进,每个刻度上以链表方式挂载在该刻度到期的定时器,在一个固定的处理器核上周期性推动刻度轮前进,并对当前刻度上的定时器进行到期检测,其他核上使用的定时器集中于这一固定核上进行到期检测处理,通过对刻度轮前进的频率进行配置,使其达到微秒级别的定时精度,由于高频率的定时器到期检测函数仅在一个固定核上执行,其他核上的性能并未受到影响。针对定时器使用规模较大时系统在用户态与内核态间频繁切换的问题,设计了一种共享内存的策略加以解决。将刻度轮及定时器等相关数据结构设置为用户态和内核态间共享,用户态对定时器相关操作及内核态定时器到期检测均可直接在共享内存区中相关数据结构上进行,避免因系统调用而陷入内核。在定时器的到期机制中,为用户态线程在共享内存区中构造到期定时器循环队列,仅当队列为空时才向用户态线程发送到期信号,减少因定时器到期导致的不必要信号发送,由此导致的状态切换也得到缓解。最后,本文基于Linux系统,利用上述方法,设计了一种多核平台下的新型用户态定时器系统,并在多核X86及ARM平台下进行实现及优化。通过实验测试,新的系统在定时精度上保持了传统定时机制微秒级别的精度,在误差方面,在X86平台下与posix-timer基本保持一致,维持在较小的微秒级别,在ARM平台下与posix-timer相比有较大改进,从毫秒级别提升至了微秒级别。