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
0
150
Clock / Timer
社内LT大会 0x64物語 #03 OS Kernel 資料
HORINOUCHI Masato
December 15, 2015
Tweet
Share
More Decks by HORINOUCHI Masato
See All by HORINOUCHI Masato
balenaCloud
thermes
0
67
Church Numerals
thermes
0
40
CPS & CTO
thermes
0
240
FM synthesis
thermes
0
32
A440
thermes
0
58
Inside mml2wav.rb
thermes
0
83
Scheme Interpreter in Ruby
thermes
0
68
Hash Tree
thermes
0
73
POSIX Threads
thermes
0
53
Other Decks in Technology
See All in Technology
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
170
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
1.2k
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
400
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
22
12k
2025/09/16 仕様駆動開発とAI-DLCが導くAI駆動開発の新フェーズ
masahiro_okamura
0
140
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
510
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
250
データ分析エージェント Socrates の育て方
na0
8
3.1k
slog.Handlerのよくある実装ミス
sakiengineer
4
490
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
20250913_JAWS_sysad_kobe
takuyay0ne
2
260
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
It's Worth the Effort
3n
187
28k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.1k
Building Applications with DynamoDB
mza
96
6.6k
KATA
mclloyd
32
14k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Building an army of robots
kneath
306
46k
GraphQLとの向き合い方2022年版
quramy
49
14k
How GitHub (no longer) Works
holman
315
140k
Typedesign – Prime Four
hannesfritz
42
2.8k
A better future with KSS
kneath
239
17k
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Λ༻͍Δ͖͔ʁ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠