Linux的时钟

作者:linuxer 发布于:2017-5-17 18:55 分类:时间子系统

时钟或者钟表(clock)是一种计时工具,每个人都至少有一块,可能在你的手机里,也可能佩戴在你的手腕上。如果Linux也是一个普通人的话,那么她的手腕上应该有十几块手表,包括:CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_PROCESS_CPUTIME_ID、CLOCK_THREAD_CPUTIME_ID、CLOCK_MONOTONIC_RAW、CLOCK_REALTIME_COARSE、CLOCK_MONOTONIC_COARSE、CLOCK_BOOTTIME、CLOCK_REALTIME_ALARM、CLOCK_BOOTTIME_ALARM、CLOCK_TAI。本文主要就是介绍Linux内核中的形形色色的“钟表”。

阅读全文>>

标签: clock

评论(23) 浏览(1724)

Linux时间子系统之(十四):tick broadcast framework

作者:linuxer 发布于:2015-5-21 19:26 分类:时间子系统

在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态。当然 CPU的idle状态有深有浅,当CPU睡的比较深入的时候,有可能会关闭本地的timer硬件。这样就会引入一个很有意思的问题:local timer将无法唤醒CPU,该cpu上的所有的software timer将无法唤醒cpu。tick broadcast framework就是用来解决这个问题的。

本文中的代码来自linux kernel 4.0。

阅读全文>>

标签: framework tick broadcast

评论(29) 浏览(6725)

Linux时间子系统之(十三):Tick Device layer综述

作者:linuxer 发布于:2015-3-26 18:50 分类:时间子系统

时间子系统中的tick device layer主要涉及kernel/time/tick-*相关的文件,本文的主要内容就是从high level层次(不纠缠在具体的每行代码)描述tick device layer的运作逻辑。

如 果说每个.c文件是一个模块的话,我们可以首先简单描述tick device layer的各个模块。tick-common.c描述了tick device的一些通用操作,此外,该文件还包括了周期性tick的代码。想要让系统工作在tickless mode(更准确应该是Dynamic tick模块,也就是说根据系统的当前运行状况,动态的启停周期性tick)需要两个模块的支持,分别是tick-oneshot.c和tick- sched.c。tick-oneshot.c主要是提供和tick device的one shot mode相关的操作接口函数。从字面上看,tick-sched.c是和tick的调度相关,所谓tick的调度包括两个方面,一方面是在系统正常运行过 程中,如何产生周期性的tick event,另一方面是在系统没有任务执行,进入idle状态的时候,如何停止周期性的tick,以及恢复的时候如何更新系统状态(例如:jiffies 等)。tick-broadcast.c和tick-broadcast-hrtimer.c是和tick broadcast相关,本文不会涉及这部分的内容,会有专门的文档描述它。

本文的第二章描述了关于tick device概述性的内容,随后在第三章描述了tick device layer是如何初始化的,由于tick device开始总是工作在periodic mode,因此,本章也就顺便描述了周期性tick的运作。如果硬件以及系统配置允许,系统中的tick device会切换one shot mode,从而进入tickless mode,因此第四章描述了在配置了高精度timer的情况下,dynamic tick如何运作之机理,第五章和第四章类似,只不过描述的是没有配置高精度timer的情况。

阅读全文>>

标签: Device tick tickless NO_HZ

评论(27) 浏览(6895)

Linux时间子系统之(二):软件架构

作者:linuxer 发布于:2015-3-7 18:37 分类:时间子系统

本文的主要内容是描述内核时间子系统的软件框架。首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势。第三章汇整了时间子系统的相关文件以及内核配置。最后描述各种内核配置下的时间子系统的数据流和控制流。

阅读全文>>

标签: 软件框架 时间子系统

评论(28) 浏览(12607)

Linux时间子系统之(六):POSIX timer

作者:linuxer 发布于:2015-1-22 18:12 分类:时间子系统

用户空间接口函数文档中, 我们描述了和POSIX timer相关的操作,主要包括创建一个timer、设定timer、获取timer的状态、获取timer overrun的信息、删除timer。本文将沿着这些用户空间的接口定义来看看内核态的实现。虽然POSIX timer可以基于各种不同的clock创建,本文主要描述real time clock相关的timer。

本文第二章描述了POSIX timer的基本原理,第三章描述系统调用的具体实现,第四章主要讲real time clock的timer callback函数的实现,第五章介绍了timer超期后,内核如何处理信号。

阅读全文>>

标签: timer POSIX

评论(15) 浏览(7834)

Linux时间子系统之(五):POSIX Clock

作者:linuxer 发布于:2015-1-5 19:03 分类:时间子系统

clock是timer的基础,任何一个timer都需要运作在一个指定的clock上来。内核中维护了若干的clock,本文第二章描述了clock的 基本概念和一些静态定义的posix clock。根据计时的特点,clock分成两种:一种是真实世界的时间概念,另外一个是仅仅计算CPU执行时间 ,这两种clock分别在第三和第四章描述。从clock的生命周期来看,可以分成静态和动态的posix clock,静态是一直存在于内核中的,而动态clock有创建和销毁的概念,本文第五章描述了dynamic posix clock。

阅读全文>>

标签: posix-clock

评论(9) 浏览(8166)

Linux时间子系统之(四):timekeeping

作者:linuxer 发布于:2014-12-29 18:03 分类:时间子系统

timekeeping模块是一个提供时间服务的基础模块。Linux内核提供各种time line,real time clock,monotonic clock、monotonic raw clock等,timekeeping模块就是负责跟踪、维护这些timeline的,并且向其他模块(timer相关模块、用户空间的时间服务等)提供 服务,而timekeeping模块维护timeline的基础是基于clocksource模块和tick模块。通过tick模块的tick事件,可以 周期性的更新time line,通过clocksource模块、可以获取tick之间更精准的时间信息。

本文熟悉介绍timekeeping的一些基础概念,接着会介绍该模块初始化的过程,此后会从上至下介绍该模块提供的服务、该模块如何和tick模块交互以及如何和clocksource模块交互,最后介绍电源管理相关的内容。

阅读全文>>

标签: Linux时间子系统 timekeeping

评论(13) 浏览(11087)

Linux时间子系统之(三):用户空间接口函数

作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统

从应用程序的角度看,内核需要提供的和时间相关的服务有三种:

1、和系统时间相关的服务。例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时)。

2、让进程睡眠一段时间

3、和timer相关的服务。在一段指定的时间过去后,kernel要alert用户进程

本文主要描述和时间子系统相关的用户空间接口函数知识。

阅读全文>>

标签: Linux时间子系统用户空间接口函数

评论(12) 浏览(7849)

Linux时间子系统之(一):时间的基本概念

作者:linuxer 发布于:2014-12-23 12:22 分类:时间子系统

本文使用Q & A的方式来和大家以前探讨一下时间的基本概念

阅读全文>>

标签: 时间基础

评论(27) 浏览(9098)

Linux时间子系统系列文章之目录

作者:linuxer 发布于:2014-12-23 9:59 分类:时间子系统

本文对近期要撰写的Linux时间子系统的相关文章进行规划。

另外,需要说明的是这里的时间概念就是牛顿经典力学中的时间,一般而言,当进入微观领域(例如原子或者各种基本粒子级别)或者宏观领域(整个银河系啊、宇宙大爆炸什么的)的时候,时间变成一个相对的概念,不过还是让物理学家去研究吧。

阅读全文>>

标签: Linux时间子系统

评论(13) 浏览(7503)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog