はじめに
Amazon Linux 2(AL2)で起動したEC2インスタンスのクロックソースを tsc に変更してみました。
従来の xen クロックソースは古い世代のものですが、今回、MaketPlaceのAMIからAL2のEC2を起動したところ、t2系インスタンスが選択できず、結果としてクロックソースが xen ではありませんでした。
公式サイト
https://repost.aws/ja/knowledge-center/manage-ec2-linux-clock-source
現在のクロックソース 現在はkvmのクロックでした
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
利用可能なクロックソース kvm-clock tsc hpet acpi_pmでした
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc hpet acpi_pm
rootに昇格した
$ sudo su -
#
スーパーユーザー権限で bash を実行し、current_clocksource を上書きした
# bash -c 'echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource'
現在のクロックソースはtscになった
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
dmesg コマンドを実行して、カーネルメッセージを表示した
# dmesg | tail -n 3
[ 3.802203] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 5.314520] ena 0000:00:05.0 eth0: Local page cache is disabled for less than 16 channels
[ 684.330899] clocksource: Switched to clocksource tsc ←tscにクロックソースがスイッチしたメッセージが出力した
EC2を再起動してみた
# reboot
再起動したため稼働時間が2分程度です
# uptime
00:17:56 up 2 min, 1 user, load average: 0.02, 0.02, 0.00
kvm-clockに戻りました
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
クロックソースを永続的に設定する方法を試した
ブートローダのファイルを念のためバックアップした
# cp -p /etc/default/grub /home/ec2-user/grub_20250727
# ls -tlr /home/ec2-user/grub_20250727
-rw-r--r-- 1 root root 256 Jul 8 06:10 /home/ec2-user/grub_20250727
GRUB_CMDLINE_LINUX_DEFAULT=の値の末尾に「clocksource=tsc tsc=reliable"」を追加
# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0 clocksource=tsc tsc=reliable"
変更前と変更後のブートローダのファイルで比較する
# diff -u /home/ec2-user/grub_20250727 /etc/default/grub
--- /home/ec2-user/grub_20250727 2025-07-08 06:10:21.883244817 +0900
+++ /etc/default/grub 2025-07-27 00:23:00.155597314 +0900
@@ -1,4 +1,4 @@
-GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
+GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0 clocksource=tsc tsc=reliable"
GRUB_TIMEOUT=0
GRUB_DISABLE_RECOVERY="true"
GRUB_TERMINAL="ec2-console"
/boot/grub2/grub.cfgファイルを生成しました
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.14.355-280.651.amzn2.x86_64
Found initrd image: /boot/initramfs-4.14.355-280.651.amzn2.x86_64.img
done
/boot/grub2/grub.cfgファイルに「locksource=tsc tsc=reliable」が追加されたことを確認した
cat /boot/grub2/grub.cfg | grep tsc
linux /boot/vmlinuz-4.14.355-280.651.amzn2.x86_64 root=UUID=3540acef-7185-443c-a960-648a17aac375 ro console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0 clocksource=tsc tsc=reliable
現在のクロックソースを確認したところ、まだKVMのままです。
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
TeraTermをexitでログアウトして再ログインをする
まだ変わっていない!!
現在のクロックソースを確認したところ、まだKVMのままです。
$ sudo su -
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
サーバを再起動しました
# reboot
やっと現在のクロックソースがtscに変わりました
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
切り戻し クロークソースをtscからKVMに戻す
まずは切り戻し前に現在のブートローダのファイルをバックアップを取得した
# cp -p /etc/default/grub /home/ec2-user/grub_tsc_20250727
# ls -tlr /home/ec2-user/grub_tsc_20250727
-rw-r--r-- 1 root root 285 Jul 27 00:23 /home/ec2-user/grub_tsc_20250727
前回のバックアップからブートローダのファイルを上書きして戻します
# cp -p -f /home/ec2-user/grub_20250727 /etc/default/grub
# cp: overwrite ‘/etc/default/grub’? y
/boot/grub2/grub.cfgファイルを生成した
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.14.355-280.651.amzn2.x86_64
Found initrd image: /boot/initramfs-4.14.355-280.651.amzn2.x86_64.img
done
/boot/grub2/grub.cfgファイルにtscで検索しても検索ヒットしなくなりました
# cat /boot/grub2/grub.cfg | grep tsc
[root@ip-10-0-6-214 ~]#
カーネルの設定を確認したらtscのパラメータが消えていました
cat /boot/grub2/grub.cfg | grep /boot/vmlinuz
linux /boot/vmlinuz-4.14.355-280.651.amzn2.x86_64 root=UUID=3540acef-7185-443c-a960-648a17aac375 ro console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
現在のクロックソースがtscであることを確認した
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
サーバを再起動した
# reboot
現在のクロックソースがKVMであることを確認した。切り戻しが成功しました!!
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc hpet acpi_pm
KVMに切り戻しした時に以下のメッセージが出力を確認しました
# dmesg | grep kvm
[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00
[ 0.000000] kvm-clock: cpu 0, msr 0:7d947001, primary cpu clock
[ 0.000000] kvm-clock: using sched offset of 1657166596 cycles
[ 0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
[ 0.000000] kvm-stealtime: cpu 0, msr 7d61b200
[ 0.004000] kvm-clock: cpu 1, msr 0:7d947041, secondary cpu clock
[ 0.220000] kvm-stealtime: cpu 1, msr 7d71b200
[ 0.526072] clocksource: Switched to clocksource kvm-clock ←このメッセージ
まとめ
ブートローダの設定ファイルを変更した場合は、サーバを再起動しないと反映されないことを学びました。
また、過去のブートローダ設定ファイル(/etc/default/grub)をバックアップしておくことで、設定を切り戻すことができ、tsc から kvm へのクロックソースの変更も問題なく行えました。