时间命名空间简介(2019)

2020-05-05 11:18:19

/color/Atom提要发件人:Dmitry Safonov<;[email protected]>;收件人:[email protected]:dmitry Safonov<;[email protected]>;,Dmitry Safonov<;[email protected]&>,Adrian Reber<;[email protected]>;,Andrei Vt;[email protected]&>,Cyrill Gorcunov<;[email protected]&>,";Eric W.Biederman";<;[email protected]&>,";H.Peter Anvin&34;<;[email protected]&>,Ingo Molnar<;[email protected]&。联系人:Pavel Emelyanov<;[email protected]>;,Shuah Khan<;[email protected]>;,Thomas Gleixner<;[email protected]>;,Vincenzo Frascino<;[email protected]>;,[email protected] ation.org,[email protected][email protected]&>(RAW)关于时间命名空间的讨论由来已久。杰夫·戴克(Jeff Dike)在2006年首次尝试实施这一计划。从那时起,这个主题就断断续续地出现在各种讨论中。时间命名空间有两个主要用例:1.更改容器内的日期和时间;2.调整从检查点恢复的容器的时钟。“这似乎是阻止迁移在生产系统中使用的最后主要障碍之一,因为不是所有的容器和连接都可以迁移,只要时间依赖关系能够将其搞得一团糟。”(作者:github.com/dav-ell)内核提供对几个时钟的访问:CLOCK_REALTIME、CLOCK_MONTOTONIC、CLOCK_BOOTTIME。最后两个时钟是单调的,但它们的起始点没有定义,并且每个系统的起始点都不同。当容器从一个节点迁移到另一个节点时,所有时钟都必须恢复到一致的状态;换句话说,它们必须从它们被转储的相同点继续运行。这个补丁集的主要思想是为系统时钟添加每个命名空间的偏移量。当非根时间命名空间中的进程请求时钟的时间时,命名空间偏移量将添加到此时钟的当前值上,并返回总和。所有偏移量都放在单独的页面上,这允许我们将其作为VVAR的一部分映射到用户进程中,并使用来自VDSO调用的偏移量。现在为CLOCK_MONTOTONIC和CLOCK_BOOTIMEclocks.v7..V8更改实现了偏移量:*修复编译时错误:-在没有支持的体系结构上。-未设置CONFIG_POSIX_TIMERS时。*添加了CONFIG_POSIX_TIMERS自检中的检查。*内联DO_HRES和DO_CORARY。(并添加了测试-由Vincenzo提供-谢谢!)*使time_ns依赖于GENERIC_VDSO_TIME_NS并按Arch进行设置。[V1..v7 Changellogs位于此处的最底部]我们的性能测量显示,子时间命名空间中VDSO的lock_gettime()的价格在热CPU缓存下约为8%,在冷CPU缓存下约为90%。在这些测试中,时间命名空间之外的主机进程没有性能回归。我们编写了两个小基准测试。第一个gettimePerform.c在循环中调用sclock_gettime()3秒。它向我们展示了热CPU缓存的性能(lock_gettime()周期越多-越好):第一个表显示了根时间名空间中lock_gettime()的性能。|TIMENS=y-|150363883|167076184|164979177|150616056|167348942|165202727|150679279|167235485|165230267|150622312|167078735|165284077|150706992|167301837|165372663|150563707|167207900|165395728。-AVG|150592038|167208180|165244106diff%|100|111|109.7-stdev%|0.08|0.07|0.1禁用CONFIG_TIME_NS后,性能提升11%.。这是通过将不太可能的提示添加到vdso_read_egin()中并内联do_hres()和do_coough()来实现的。启用config_time_NS时,__vdso_lock_gettime函数中会多一个损坏的寄存器。这一事实解释了两个右侧列之间的性能差异。第二个表显示了lock_gettime在非roottime名称空间中的性能。|主机前|timens-内部|150363883|164979177|138133479|150616056|165202727|139047394|150679279|165230267|139284611|150622312|165284077|139263753|150706992|165372663|139175419|150563707|165395728|139334291。-avg|150592038|165244106|139039824diff%|100|109.7|92.3-stdev%|0.08|0.1|0.3在子命名空间中,性能损失为7-8%。根和非根之间的较大差异