linux time linux对时间有两种需求: 第一就是获取当前时间,就像人想知道时间时看墙上挂的时钟一样,简称clock,如time()/ftime()/gettimeofday()/data()...clock软件是无法实现的,只能是硬件实现,硬件增加一个counter寄存器,周期性增加,软件想获取当前时间,读一下这个寄存器就行,linux把这个counter称为clocksource,比如这台服务器就有三个...看x86代码,linux初始化这些硬件设备,注册中断,中断处理中都调用到event_handler,简单理解为tick模块注册的函数,调用到tick的这个函数,它负责处理软件定时器,进行进程时间片计算等...看这台虚拟机,模拟rtc和pit,没有hpet。...再考虑一些问题,有全局hpet和局部local apic timer,cpu会用哪个呢?hpet中断哪个cpu处理?其它cpu收不到这个中断怎么tick呢?软件定时器是全局的还是局部的?
Later in the boot, it switches the clocksource to hpet, so things should be fine....The High Precision Event Timer (HPET) is a hardware timer used in personal computers....id=885524] fast tsc calibration failed after upgrade to linux 3.6[https://bbs.archlinux.org/viewtopic.php...High Precision Event Timer[https://en.wikipedia.org/wiki/HighPrecisionEvent_Timer] What is the acpi_pm linux...[http://stackoverflow.com/questions/7987671/what-is-the-acpi-pm-linux-clocksource-used-for-what-hardware-implements-it
所以,先不管这些名词是什么东西,怎么实现的,起码kvm-clock、tsc、hpet、acpi_pm是同一类的东西;并且,在Linux上,统一管理它们,并叫“clocksource”。...中,可以看到tsc的rating是300; linux-4.0.4/arch/x86/kernel/hpet.c中,hpet的rating是250; linux-4.0.4/drivers/clocksource...5, hpet hpet是纯粹的qemu在用户态模拟出来的。 代码qemu-2.8.0-rc4/hw/timer/hpet.c qemu的设备虚拟化逻辑。...注意,是为hpet设备注册了callback函数hpet_timer: 前面是计算下次超时的时间,最后一行很关键,向Guest里inject irq了。...所以,hpet的逻辑就很清晰了:qemu模拟了hpet device,并在用户态周期性的inject irq,在Guest中就觉得是一个timer了。
来到HotSpot源码的hotspot/src/os/linux/vm/os_linux.cpp文件中,有一个javaTimeMillis()方法,这就是System.currentTimeMillis...= -1, "linux error"); return jlong(time.tv_sec) * 1000 + jlong(time.tv_usec / 1000); } 挖源码就到此为止,.../2017/07/23/the-slow-currenttimemillis.html 简单来讲就是: 调用gettimeofday()需要从用户态切换到内核态; gettimeofday()的表现受Linux...系统的计时器(时钟源)影响,在HPET计时器下性能尤其差; 系统只有一个全局时钟源,高并发或频繁访问会造成严重的争用。...HPET计时器性能较差的原因是会将所有对时间戳的请求串行执行。TSC计时器性能较好,因为有专用的寄存器来保存时间戳。缺点是可能不稳定,因为它是纯硬件的计时器,频率可变(与处理器的CLK信号有关)。
来到HotSpot源码的hotspot/src/os/linux/vm/os_linux.cpp文件中,有一个javaTimeMillis()方法,这就是System.currentTimeMillis...简单来讲就是: 调用gettimeofday()需要从用户态切换到内核态; gettimeofday()的表现受Linux系统的计时器(时钟源)影响,在HPET计时器下性能尤其差; 系统只有一个全局时钟源...HPET计时器性能较差的原因是会将所有对时间戳的请求串行执行。TSC计时器性能较好,因为有专用的寄存器来保存时间戳。缺点是可能不稳定,因为它是纯硬件的计时器,频率可变(与处理器的CLK信号有关)。...关于HPET和TSC的细节可以参见https://en.wikipedia.org/wiki/HighPrecisionEventTimer与https://en.wikipedia.org/wiki/...~ cat /sys/devices/system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm ~ cat /sys/
我们知道kvm有一个半虚拟化的时钟kvm-clock,但是现在只对Linux Guest支持,半虚拟化的时钟具有准确高效的有点,而使用TSC和RTC等时钟存在效率低高延迟的缺点,本文具体介绍一下虚拟化下的时钟原理...传统时钟 我们知道传统时钟有RTC/HPET/PIT/ACPI PM TIMER/TSC等, 这些时钟按原理可分成两类:提供中断的周期性时钟, 如RTC/PIT/HPET等;另一种是提供COUNTER...2.qemu软件模拟的时钟 qemu中有对RTC和hpet都模拟出了相应的设备,例如RTC的典型芯片mc146818。...3.kvm-clock kvm-clock是KVM下Linux Guest默认的半虚拟化时钟源。...Linux Guest中查看当前时钟源是否为kvm-clock: $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
来到HotSpot源码的hotspot/src/os/linux/vm/os_linux.cpp文件中,有一个javaTimeMillis()方法,这就是System.currentTimeMillis...,简单来讲就是: 调用gettimeofday()需要从用户态切换到内核态; gettimeofday()的表现受Linux系统的计时器(时钟源)影响,在HPET计时器下性能尤其差; 系统只有一个全局时钟源...HPET计时器性能较差的原因是会将所有对时间戳的请求串行执行。 TSC计时器性能较好,因为有专用的寄存器来保存时间戳。缺点是可能不稳定,因为它是纯硬件的计时器,频率可变(与处理器的CLK信号有关)。...~ cat /sys/devices/system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm ~ cat /sys/...devices/system/clocksource/clocksource0/current_clocksource tsc ~ echo 'hpet' > /sys/devices/system/clocksource
来到HotSpot源码的hotspot/src/os/linux/vm/os_linux.cpp文件中,有一个javaTimeMillis()方法,这就是System.currentTimeMillis...简单来讲就是: 调用gettimeofday()需要从用户态切换到内核态; gettimeofday()的表现受Linux系统的计时器(时钟源)影响,在HPET计时器下性能尤其差; 系统只有一个全局时钟源...HPET计时器性能较差的原因是会将所有对时间戳的请求串行执行。 TSC计时器性能较好,因为有专用的寄存器来保存时间戳。
惠伟:linux time和kvm time虚拟化综述zhuanlan.zhihu.com 在这篇中遗留了几个问题,先尝试回答一下,不一定准确,代码太多,看不过来,全靠猜测,代码的历史很长,都是智慧的结晶...有全局hpet和局部local apic timer,cpu会用哪个呢?...clock_event_device有rating,local apic timer是150,hpet是50,tick_check_preferred选择rating高的。...hpet中断哪个cpu处理?其它cpu收不到这个中断怎么tick呢? 不好说,可以用MSI和interrupt remapping,可以配置亲和。...linux要正常运转,不能没有timer中断,就像人不能没有心跳,NO_HZ_IDLE和NO_HZ_FULL也只是把timer中断的周期拉长了一点。
LInux 硬件中断响应只需要处理一些必须立即响应的操作, 而将一些可以延后处理的操作移交给软中断。Linux 中的有10类软中断, 后续我们将会分析。 c....5bd5f963c91f ro ipv6.disable=1isolcpus=7 nohz_full=7 mce=off tsc=reliable no_watchdog irqaffinity=0hpet...Nowatchdog 关闭所有的软/硬件 死锁监测 hpet=disable, tsc= reliable 这部分主要是针对时间子系统。...hpet=disable 主要是避免hpet产生过多的中断干扰系统。tsc= reliable 标记tsc 为可靠的, 减少运行时,时间源校验。...这样LInux kernel 还需要调度这个读写操作到目标core3 上来 会带来不必要的延迟。
0 0 DMAR_MSI-edge dmar0 57: 496 0 0 0 IR-HPET_MSI-edge... hpet2 58: 0 0 0 0 IR-HPET_MSI-edge hpet3 59: ...0 0 0 0 IR-HPET_MSI-edge hpet4 60: 0 0 ...0 0 IR-HPET_MSI-edge hpet5 70: 126234 0 0 0 IR-PCI-MSI-edge...Linux下,普通用户如何临时获取root权限,来满足工作需要。 在实际工作中,公司不会将root用户直接给员工使用,而是通过员工自己的账号临时获得系统的root权限。
有全局hpet和局部local apic timer,cpu会用哪个呢?...clock_event_device有rating,local apic timer是150,hpet是50,tick_check_preferred选择rating高的。...hpet中断哪个cpu处理?其它cpu收不到这个中断怎么tick呢? 不好说,可以用MSI和interrupt remapping,可以配置亲和。...cpu HZ高点,10ms干的活多,cpu HZ低点10ms干的活少,TSC-Deadline设置一个值 ,HZ高点,那么tsc涨得快,HZ低点tsc涨得慢,两次中断之间cpu干的活是固定的,所以最终linux...linux要正常运转,不能没有timer中断,就像人不能没有心跳,NO_HZ_IDLE和NO_HZ_FULL也只是把timer中断的周期拉长了一点。
一般的linux都是GPOS(通用)内核。GPOS是不保证实时的,但是对于大多数应用程序来说是没有问题的。GPOS可以充分利用物理资源。但在实时性要求性比较高的场景需要使用实时内核,RT内核。.../system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm 所以在上面例子中,时钟源可以选择TSC、HPET以及ACPI_PM...查看当前系统使用的时钟源命令如下: # cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc 设置时钟源为HPET...什么是中断 Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。...irqbalance irqbalance是一个linux的实用程序,它主要是用于分发中断请求到CPU核心上,有助于性能的提升。它的目的是寻求省电和性能优化之间的平衡。
手机实际上就是个计算机系统,而且安卓手机用的还是Linux内核。时钟App所实现的功能需要Linux内核的支持,内核时间子系统的实现需要有硬件的支持。...Linux中用来实现系统时钟的软件体系叫做The Linux Timekeeping Architecture。如果我们把Timekeeping翻译成“时间维护”,感觉意思好像不到位。...后面我们就用“Linux走时框架”这个词了。...然后hpet注册自己,hpet既有定时器也有计时器,hpet定时器会成为系统定时器,hpet计时器会成为timekeeper的时钟源。后面tsc计时器也会注册自己,并成为最终的时钟源。...hpet最终只能做broadcast 定时器了。
HPET(High Precision Event Timer) HPET提供了更高的精度(14.31818MHz)以及更宽的计数器(64位)。...2006年之后的主板基本都已支持HPET。...hpet 一种取代传统"acpi_pm"的高精度硬件时钟源(CONFIG_HPET),提供14.31818MHz固定频率。2007年以后的芯片组一般都支持。...nohpet 禁用HPET timer(CONFIG_HPET) [HPET_MMAP] hpet_mmap v3.13新增,默认允许对HPET寄存器进行映射,相当于开启了内核CONFIG_HPET_MMAP_DEFAULT...acpi_osi="Linux"表示添加"Linux"; acpi_osi="!Linux"表示删除"Linux"; acpi_osi=!
前言: 在《clocksource的管理和虚拟化》中,大概分析了kvm clock,tsc,hpet等clock source。其中尤其是kvm clock计算尤其复杂。...3,guest register steal time linux-4.0.4/arch/x86/kernel/kvm.c ?...4,host steal time linux-4.0.4/include/linux/sched.h中: ?...具体的计算逻辑在linux-4.0.4/kernel/sched目录下的文件中,不具体分析。 ?...5,guest steal time linux-4.0.4/kernel/sched目录下的调度源代码中,计算steal time。
详解 Linux 常用目录的作用 一 常用一级目录 ? ? 注意: 1、根目录下的bin和sbin,usr目录下的bin和sbin,这四个目录都是用来保存系统命令的。...tty2 tty48 vcs1 fuse sda tty20 tty49 vcs2 hidraw0 sda1 tty21 tty5 vcs3 hpet...mozilla udev firmware jvm-commmon polkit-1 udisks2 games jvm-exports python2.7 x86_64-redhat-linux6E
前言: 上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。...还有一个定时器叫做HPET(High Precision Event Timer),它是Intel和微软共同研发的。它不仅是个定时器,而且还有计时器的功能。...HPET不和特定的CPU绑定,所以它可以给任意一个CPU发中断,这点和Local APIC Timer不同。...Linux时间子系统的文件汇总 Linux kernel 时间子系统的源文件位于linux/kernel/time/目录下,基本包含如下: 这里面也包含几个重要的数据结构,接下来会分开说说: Clocksource...显然关于Linux时间子系统的内容,还有很多可以深入挖掘,在此篇幅有限,就不做过多赘述了,也希望同样对操作系统感兴趣的小伙伴与我们一起交流。
] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux...udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 TERM=linux...-nodefaults -display none -machine accel=kvm:tcg -cpu host -m 500 -no-reboot -rtc driftfix=slew -no-hpet...udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 TERM=linux
领取专属 10元无门槛券
手把手带您无忧上云