Skip to content

Commit 056e31f

Browse files
Use recommended clocksources (#1328)
1 parent 7c45dde commit 056e31f

File tree

6 files changed

+70
-18
lines changed

6 files changed

+70
-18
lines changed

files/bin/configure-clocksource

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o pipefail
5+
set -o nounset
6+
7+
CLOCK_PATH="/sys/devices/system/clocksource/clocksource0"
8+
9+
function log() {
10+
echo >&2 "$@"
11+
}
12+
13+
function current-clocksource() {
14+
cat "${CLOCK_PATH}/current_clocksource"
15+
}
16+
17+
function check-available-clocksource() {
18+
grep --quiet "${1}" "${CLOCK_PATH}/available_clocksource"
19+
}
20+
21+
function try-set-clocksource() {
22+
if check-available-clocksource "${1}"; then
23+
echo "${1}" > "${CLOCK_PATH}/current_clocksource"
24+
log "configured clocksource: ${1}"
25+
else
26+
log "clocksource not available: ${1}"
27+
fi
28+
}
29+
30+
case "$(imds /latest/meta-data/system)" in
31+
nitro)
32+
CLOCKSOURCE="kvm-clock"
33+
;;
34+
35+
**)
36+
CLOCKSOURCE="tsc"
37+
;;
38+
esac
39+
40+
log "desired clocksource: ${CLOCKSOURCE}"
41+
42+
if [ ! "$(current-clocksource)" = "${CLOCKSOURCE}" ]; then
43+
try-set-clocksource "${CLOCKSOURCE}"
44+
fi
45+
46+
log "final clocksource: $(current-clocksource)"

files/bootstrap.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,11 @@ if [ "$MOUNT_BPF_FS" = "true" ]; then
325325
mount-bpf-fs
326326
fi
327327

328+
cp -v /etc/eks/configure-clocksource.service /etc/systemd/system/configure-clocksource.service
329+
chown root:root /etc/systemd/system/configure-clocksource.service
330+
systemctl daemon-reload
331+
systemctl enable --now configure-clocksource
332+
328333
ECR_URI=$(/etc/eks/get-ecr-uri.sh "${AWS_DEFAULT_REGION}" "${AWS_SERVICES_DOMAIN}" "${PAUSE_CONTAINER_ACCOUNT:-}")
329334
PAUSE_CONTAINER_IMAGE=${PAUSE_CONTAINER_IMAGE:-$ECR_URI/eks/pause}
330335
PAUSE_CONTAINER="$PAUSE_CONTAINER_IMAGE:$PAUSE_CONTAINER_VERSION"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[Unit]
2+
Description=Configure kernel clocksource
3+
4+
[Service]
5+
ExecStart=/usr/bin/configure-clocksource
6+
7+
[Install]
8+
WantedBy=multi-user.target

scripts/install-worker.sh

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,27 +81,13 @@ sudo yum versionlock kernel-$(uname -r)
8181
# Remove the ec2-net-utils package, if it's installed. This package interferes with the route setup on the instance.
8282
if yum list installed | grep ec2-net-utils; then sudo yum remove ec2-net-utils -y -q; fi
8383

84+
sudo mkdir -p /etc/eks/
85+
8486
################################################################################
8587
### Time #######################################################################
8688
################################################################################
8789

88-
# Make sure Amazon Time Sync Service starts on boot.
89-
sudo chkconfig chronyd on
90-
91-
# Make sure that chronyd syncs RTC clock to the kernel.
92-
cat << EOF | sudo tee -a /etc/chrony.conf
93-
# This directive enables kernel synchronisation (every 11 minutes) of the
94-
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
95-
rtcsync
96-
EOF
97-
98-
# If current clocksource is xen, switch to tsc
99-
if grep --quiet xen /sys/devices/system/clocksource/clocksource0/current_clocksource \
100-
&& grep --quiet tsc /sys/devices/system/clocksource/clocksource0/available_clocksource; then
101-
echo "tsc" | sudo tee /sys/devices/system/clocksource/clocksource0/current_clocksource
102-
else
103-
echo "tsc as a clock source is not applicable, skipping."
104-
fi
90+
sudo mv $WORKING_DIR/configure-clocksource.service /etc/eks/configure-clocksource.service
10591

10692
################################################################################
10793
### SSH ########################################################################
@@ -114,7 +100,7 @@ sudo systemctl restart sshd.service
114100
################################################################################
115101
### iptables ###################################################################
116102
################################################################################
117-
sudo mkdir -p /etc/eks
103+
118104
sudo mv $WORKING_DIR/iptables-restore.service /etc/eks/iptables-restore.service
119105

120106
################################################################################

scripts/upgrade_kernel.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,10 @@ sudo grubby \
2424
--update-kernel=ALL \
2525
--args="psi=1"
2626

27+
# use the tsc clocksource by default
28+
# https://repost.aws/knowledge-center/manage-ec2-linux-clock-source
29+
sudo grubby \
30+
--update-kernel=ALL \
31+
--args="clocksource=tsc tsc=reliable"
32+
2733
sudo reboot

test/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ RUN amazon-linux-extras enable docker && \
77

88
ENV IMDS_ENDPOINT=127.0.0.1:1338
99
COPY --from=aemm /ec2-metadata-mock /sbin/ec2-metadata-mock
10+
RUN mkdir -p /etc/systemd/system
1011
RUN mkdir -p /etc/eks/containerd
1112
COPY files/ /etc/eks/
1213
COPY files/containerd-config.toml files/kubelet-containerd.service files/pull-sandbox-image.sh files/sandbox-image.service /etc/eks/containerd/

0 commit comments

Comments
 (0)