Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Clock / Timer
Search
HORINOUCHI Masato
December 15, 2015
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clock / Timer
社内LT大会 0x64物語 #03 OS Kernel 資料
HORINOUCHI Masato
December 15, 2015
More Decks by HORINOUCHI Masato
See All by HORINOUCHI Masato
balenaCloud
thermes
0
110
Church Numerals
thermes
0
55
CPS & CTO
thermes
0
250
FM synthesis
thermes
0
40
A440
thermes
0
67
Inside mml2wav.rb
thermes
0
93
Scheme Interpreter in Ruby
thermes
0
74
Hash Tree
thermes
0
83
POSIX Threads
thermes
0
59
Other Decks in Technology
See All in Technology
ハーレムエンジニアリング
kazuma777777
0
180
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
LanceDB入門
mocobeta
8
590
強化学習「理論」入門
enakai00
3
3.6k
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
25k
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
What's new in Go 1.27?
ciarana
0
240
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.5k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Design in an AI World
tapps
1
280
Code Review Best Practice
trishagee
74
20k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
650
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Odyssey Design
rkendrick25
PRO
2
760
A Modern Web Designer's Workflow
chriscoyier
698
190k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Agile that works and the tools we love
rasmusluckow
331
22k
Transcript
Clock / Timer 2015/12/15 0x64 Tales #03 OS Kernel Livesense
Inc. HORINOUCHI Masato
Linux Kernel Clock େผ͢ΔͱҎԼͷ 2ͭʹ͚ΒΕΔɻ • Hardware Clock • ͦͷ໊ͷ௨ΓϋʔυΣΞ্ʹ͋Δ
Clock σόΠεɻ • System Clock • Linux Kernel ෦ʹ͋Δ Clock Ͱشൃੑɻ
Linux࣌ࠁཧͷΈͱઃఆ ͔ΒҾ༻
HW Clock • Real&me Clock (RTC), BIOS Clock, CMOS Clock
ͱݺΕΔɻ • ҰൠతʹόοςϦʔόοΫΞοϓ͕ߦͳΘΕΔɻ • ిݯ͕Ε͍ͯͯόοςϦʔίϯσϯαʔʹΑΓۦಈɻ • &mezone Λҙࣝ͠ͳ͍ɻUTC ͔ local&me ͔Θ͔Βͳ͍ɻ • Windows ڥ local&me ͱͯ͠ɺLinux ڥ UTC ͱͯ͠ ಈ࡞͢ΔͨΊɺJST-9 ڥͩͱ 9࣌ؒͷζϨ͕ൃੜ͢Δɻ
System Clock • Linux Kernel ෦ͷϝϞϦʔͰอ͍࣋ͯ͠ΔɻͳͷͰشൃੑɻ • 2ͭͷσʔλΛ͍࣋ͬͯΔɻ • x-me:
UNIX Epoch (1970/01/01 00:00:00 UTC) ͔Βͷඵ • jiffies: ݱࡏඵ͔Βͷܦաφϊඵ • UTC Ͱಈ࡞͢Δɻ
Interval Timer • ϋʔυΣΞʹΑΓׂΓࠐΈΛൃੜͤ͞ΔσόΠεɻ • ׂΓࠐΈൃੜ͢Δʹ jiffies Λ૿͍ͯ͘͠ɻ • Ұൠతͳ
Linux Kernel Ͱ 1,000Hz (1ms) ຖʹׂΓࠐΈൃ ੜɻ • jiffies ͷ૿ՃΛ x7me ʹө͍ͯ͘͠ɻ
HW Clock ʹΞΫηε • hwclock ͱ͍͏πʔϧͰΞΫηεͰ͖Δɻ • hwclock /etc/adj/me
ΛΈͯ UTC ͔ local/me ͔Λผɻ $ sudo hwclock --show --localtime 201512݄15 08࣌0442ඵ .785058 seconds $ cat /etc/adjtime 0.000000 1450089054 0.000000 1450089054 UTC
HW Clock ͱ System Clock ͷؔ • SysVinit (Upstart) ͷ߹
• Ubuntu Ͱ /etc/init.d/hwclock.sh Ͱ OS ىಈ/ऴྃ ࣌ʹಉظɻ • CentOS 6 Ͱ /etc/rc.d/init.d/halt Ͱ OS ऴྃ࣌ʹ ಉظɻ • ىಈ࣌Ͳ͏͍ͯ͠Δͷ͔ͪΐͬͱௐ͚ͨͲෆ໌…ɻ
Systemd Ͱ RTC ʹΞΫηε • "medatectl ͱ͍͏πʔϧͰΞΫηεͰ͖Δɻ $ timedatectl Local
time: Ր 2015-12-15 17:06:22 JST Universal time: Ր 2015-12-15 08:06:22 UTC RTC time: Ր 2015-12-15 08:06:20 Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no
Raspberry Pi • ࣮ RTC Λࡌ͍ͯ͠ͳ͍ɻ • ͚Ͳࣗ࡞͢Δऀɻ • RaspberryPiʹRTCϞδϡʔϧΛࡌͯ͠ɺϋʔυΣΞىಈ
࣌ʹ࣌ࠁΛ߹ΘͤΔ
Tickless Kernel • ϋʔυΣΞʹΑΓ CPU ʹׂΓࠐΈൃੜͤ͞Δͱిྗফඅʹݒ ೦ɻ • ࣌ؒͷߋ৽ΛఆظతͳׂΓࠐΈͰͳ͘ Clock
Source Λࢀর͢ Δ͜ͱʹɻ • ͜ΕʹΑΓ CPU ͕লిྗϞʔυͰ͍ΒΕΔ࣌ؒΛ͘͢Δ ͜ͱ͕Մೳʹɻ
Clock Source ओʹҎԼͷͷ͕͋Δɻ্ʹ͋Δํ͕ΞΫηείετ͕͍ɻ • kvm-clock • Time Stamp Counter (TSC)
• High Precision Event Timer (HPET) • ACPI Power Management Timer (ACPI_PM) • Programmable Interval Timer (PIT) • Real Time Clock (RTC)
RHEL6ͷ&ckless kernel ͔ΒҾ༻
Clock Source ΛௐΔ • VirtualBox 5.0.10 (४ԾԽΠϯλʔϑΣʔε KVM) • Ubuntu
15.10 64bit + Guest Add@ons $ uname -a Linux ubuntu 4.2.0-19-generic #23-Ubuntu SMP Wed Nov 11 11:39:30 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource kvm-clock tsc acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource kvm-clock
Clock Source ͷΛܭଌ ݩίʔυ1 Λվมͯ͠ 10,000,000 ճ࣮ߦɻ #include <sys/time.h> #include
<stdio.h> int main() { struct timeval tv; for (int i=0; i<10000000; i++) { int r = gettimeofday(&tv, 0); if (r < 0) { perror("gettimeofday"); return 1; } } return 0; } 1 VirtualBox 5 Ͱར༻Մೳʹͳͬͨ Paravirtualiza1on ػೳ kvmclock Λ͏ ͔ΒҾ༻ɻ
ܭଌͯ͠ΈΔ ͜Μͳ shell script ʹͯ͠Έͨɻ #! /bin/zsh # kvm-clock sudo
sh -c "echo kvm-clock > /sys/devices/system/clocksource/clocksource0/current_clocksource" cat /sys/devices/system/clocksource/clocksource0/current_clocksource time ./t # tsc sudo sh -c "echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource" cat /sys/devices/system/clocksource/clocksource0/current_clocksource time ./t # acpi_pm sudo sh -c "echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource" cat /sys/devices/system/clocksource/clocksource0/current_clocksource time ./t
Clock Source ߟ • kvm-clock ΑΓ TSC ͷํ͕ 2ഒ΄Ͳ͍ɻ •
͕ɺVM ͩͱ TSC ͷ͕ո͍͠έʔεଟͦ͏ɻ • ͳͷͰૉʹ kvm-clock Λ͏ͷ͕ྑͦ͞͏ɻ • acpi_pm ेഒ(30ʙ70ഒ)͍ɻ • ͔͠γεςϜίʔϧ͠·͘Γ system ͍࣌ؒ·͘Γɻ
·ͱΊ • Linux Kernel ͷ Clock / Timer पΓྺ࢙తܦҢʹΑΓෳࡶɻ •
Clock / Timer ͷղ૾ਫ਼্͕͍ͬͯΔɻ • Ҏલ VM ͩͱ Clock ζϨ·ͬͨ͘ͷ͕ͩɺ͜ͷลղܾ͠ ͖͍ͯͯΔɻ • ͱ͍͑݁ہ Guest OS Ͱ ntp ͏ͷ͕ྑ͍༷ → KVM ʹ͓͍ͯ ϗετͱήετͷ࣌ؒཧNTPΛ༻͍Δ͖͔ʁ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠