From b76454ae41b679305ec7dd752d5933ded354946a Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Fri, 12 Jan 2024 20:25:17 +0100 Subject: [PATCH] add script to set up EC2 storage-optimized instance store for benchmarking (#6350) Been using this all the time in https://github.com/neondatabase/neon/pull/6214 Part of https://github.com/neondatabase/neon/issues/5771 Should consider this in https://github.com/neondatabase/neon/issues/6297 --- scripts/ps_ec2_setup_instance_store | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 scripts/ps_ec2_setup_instance_store diff --git a/scripts/ps_ec2_setup_instance_store b/scripts/ps_ec2_setup_instance_store new file mode 100755 index 0000000000..00d37e5f83 --- /dev/null +++ b/scripts/ps_ec2_setup_instance_store @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# This script sets up an ext4 partition on an EC2 storage-optimized instance's instance store volume. +# Unix permission/ownership is set to the calling user (the script does sudo internally.) +# +# It's intentionally not idempotent; don't take on that complexity in a bash script. + +set -euo pipefail +set -x + +# This seems crude, but, apparently instance store NVMe volumes aren't exposed in the in instance metadata block-device-mapping. +# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#bdm-instance-metadata +if [ "$(cat /sys/class/block/nvme1n1/device/model)" != "Amazon EC2 NVMe Instance Storage " ]; then + echo "nvme1n1 is not Amazon EC2 NVMe Instance Storage: '$(cat /sys/class/block/nvme1n1/device/model)'" + exit 1 +fi + +# NB: we DO NOT warm up all the blocks on the drive as recommended by https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disk-performance.html +# The reason is that we don't do that in production either. + +# do all the on-disk initialization work now instead of a background kernel thread +# so that we're ready for benchmarking right after this line +sudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/nvme1n1 + +MOUNTPOINT=/instance_store +sudo mkdir "$MOUNTPOINT" +sudo mount /dev/nvme1n1 "$MOUNTPOINT" +sudo chown -R "$(id -u)":"$(id -g)" "$MOUNTPOINT" + +TEST_OUTPUT="$MOUNTPOINT/test_output" +mkdir "$TEST_OUTPUT" + +NEON_REPO_DIR="$MOUNTPOINT/repo_dir" +mkdir "$NEON_REPO_DIR" + +cat <