From 593d97f7c5685615e25eec59ed51868d46253c57 Mon Sep 17 00:00:00 2001 From: Sylvain Pineau Date: Mon, 13 Jul 2020 10:35:02 +0200 Subject: bin:disk_read_performance_test -> disk_read_performance_test.sh --- bin/disk_read_performance_test | 108 -------------------------------------- bin/disk_read_performance_test.sh | 108 ++++++++++++++++++++++++++++++++++++++ units/disk/jobs.pxu | 2 +- 3 files changed, 109 insertions(+), 109 deletions(-) delete mode 100755 bin/disk_read_performance_test create mode 100755 bin/disk_read_performance_test.sh diff --git a/bin/disk_read_performance_test b/bin/disk_read_performance_test deleted file mode 100755 index 7734543..0000000 --- a/bin/disk_read_performance_test +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/bash -# -# Verify that disk storage performs at or above baseline performance -# - -#Default to a lower bound of 15 MB/s -DEFAULT_BUF_READ=${DISK_READ_PERF:-15} - -for disk in $@; do - - echo "Beginning $0 test for $disk" - echo "---------------------------------------------------" - - disk_type=`udevadm info --name /dev/$disk --query property | grep "ID_BUS" | awk '{gsub(/ID_BUS=/," ")}{printf $1}'` - dev_path=`udevadm info --name /dev/$disk --query property | grep "DEVPATH" | awk '{gsub(/DEVPATH=/," ")}{printf $1}'` - # /sys/block/$disk/queue/rotational was added with Linux 2.6.29. If file is - # not present, test below will fail & disk will be considered an HDD, not - # an SSD. - rotational=`cat /sys/block/$disk/queue/rotational` - if [[ $dev_path =~ dm ]]; then - disk_type="devmapper" - fi - if [[ $dev_path =~ md ]]; then - disk_type="mdadm" - fi - if [[ $dev_path =~ nvme ]]; then - disk_type="nvme" - fi - if [[ $dev_path =~ mmc ]]; then - disk_type="mmc" - fi - if [[ $dev_path =~ pmem ]]; then - disk_type="nvdimm" - fi - if [[ ($disk_type == "scsi" || $disk_type == "ata") && $rotational == 0 ]]; then - disk_type="ssd" - fi - if [ -z "$disk_type" ]; then - echo "ERROR: disk type not recognized" - exit 1 - fi - echo "INFO: $disk type is $disk_type" - - case $disk_type in - "usb" ) - #Custom metrics are guesstimates for now... - MIN_BUF_READ=7 - - # Increase MIN_BUF_READ if a USB3 device is plugged in a USB3 hub port - if [[ $dev_path =~ ((.*usb[0-9]+).*\/)[0-9]-[0-9\.:\-]+\/.* ]]; then - device_version=`cat '/sys/'${BASH_REMATCH[1]}'/version'` - hub_port_version=`cat '/sys/'${BASH_REMATCH[2]}'/version'` - if [ $(echo "$device_version >= 3.00"|bc -l) -eq 1 -a $(echo "$hub_port_version >= 3.00"|bc -l) -eq 1 ]; then - MIN_BUF_READ=80 - fi - fi - ;; - "devmapper" ) MIN_BUF_READ=$DEFAULT_BUF_READ;; - "ide" ) MIN_BUF_READ=40;; - "mmc" ) MIN_BUF_READ=$DEFAULT_BUF_READ;; - "nvme" ) MIN_BUF_READ=200;; - "nvdimm" ) MIN_BUF_READ=500;; - "mdadm" ) MIN_BUF_READ=80;; - "ata" ) MIN_BUF_READ=80;; - "scsi" ) MIN_BUF_READ=100;; - "ssd" ) MIN_BUF_READ=200;; - * ) MIN_BUF_READ=$DEFAULT_BUF_READ;; - esac - echo "INFO: $disk_type: Using $MIN_BUF_READ MB/sec as the minimum throughput speed" - - max_speed=0 - echo "" - echo "Beginning hdparm timing runs" - echo "---------------------------------------------------" - - for iteration in `seq 1 10`; do - speed=`hdparm -t /dev/$disk 2>/dev/null | grep "Timing buffered disk reads" | awk -F"=" '{print $2}' | awk '{print $1}'` - echo "INFO: Iteration $iteration: Detected speed is $speed MB/sec" - - if [ -z "$speed" ]; then - echo "WARNING: Device $disk is too small! Aborting test." - exit 1 - fi - - speed=${speed/.*} - if [ $speed -gt $max_speed ]; then - max_speed=$speed - fi - done - echo "INFO: Maximum detected speed is $max_speed MB/sec" - echo "---------------------------------------------------" - echo "" - result=0 - if [ $max_speed -gt $MIN_BUF_READ ]; then - echo "PASS: $disk Max Speed of $max_speed MB/sec is faster than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" - else - echo "FAIL: $disk Max Speed of $max_speed MB/sec is slower than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" - result=1 - fi -done - -if [ $result -gt 0 ]; then - echo "WARNING: One or more disks failed testing!" - exit 1 -else - echo "All devices passed testing!" - exit 0 -fi diff --git a/bin/disk_read_performance_test.sh b/bin/disk_read_performance_test.sh new file mode 100755 index 0000000..7734543 --- /dev/null +++ b/bin/disk_read_performance_test.sh @@ -0,0 +1,108 @@ +#!/bin/bash +# +# Verify that disk storage performs at or above baseline performance +# + +#Default to a lower bound of 15 MB/s +DEFAULT_BUF_READ=${DISK_READ_PERF:-15} + +for disk in $@; do + + echo "Beginning $0 test for $disk" + echo "---------------------------------------------------" + + disk_type=`udevadm info --name /dev/$disk --query property | grep "ID_BUS" | awk '{gsub(/ID_BUS=/," ")}{printf $1}'` + dev_path=`udevadm info --name /dev/$disk --query property | grep "DEVPATH" | awk '{gsub(/DEVPATH=/," ")}{printf $1}'` + # /sys/block/$disk/queue/rotational was added with Linux 2.6.29. If file is + # not present, test below will fail & disk will be considered an HDD, not + # an SSD. + rotational=`cat /sys/block/$disk/queue/rotational` + if [[ $dev_path =~ dm ]]; then + disk_type="devmapper" + fi + if [[ $dev_path =~ md ]]; then + disk_type="mdadm" + fi + if [[ $dev_path =~ nvme ]]; then + disk_type="nvme" + fi + if [[ $dev_path =~ mmc ]]; then + disk_type="mmc" + fi + if [[ $dev_path =~ pmem ]]; then + disk_type="nvdimm" + fi + if [[ ($disk_type == "scsi" || $disk_type == "ata") && $rotational == 0 ]]; then + disk_type="ssd" + fi + if [ -z "$disk_type" ]; then + echo "ERROR: disk type not recognized" + exit 1 + fi + echo "INFO: $disk type is $disk_type" + + case $disk_type in + "usb" ) + #Custom metrics are guesstimates for now... + MIN_BUF_READ=7 + + # Increase MIN_BUF_READ if a USB3 device is plugged in a USB3 hub port + if [[ $dev_path =~ ((.*usb[0-9]+).*\/)[0-9]-[0-9\.:\-]+\/.* ]]; then + device_version=`cat '/sys/'${BASH_REMATCH[1]}'/version'` + hub_port_version=`cat '/sys/'${BASH_REMATCH[2]}'/version'` + if [ $(echo "$device_version >= 3.00"|bc -l) -eq 1 -a $(echo "$hub_port_version >= 3.00"|bc -l) -eq 1 ]; then + MIN_BUF_READ=80 + fi + fi + ;; + "devmapper" ) MIN_BUF_READ=$DEFAULT_BUF_READ;; + "ide" ) MIN_BUF_READ=40;; + "mmc" ) MIN_BUF_READ=$DEFAULT_BUF_READ;; + "nvme" ) MIN_BUF_READ=200;; + "nvdimm" ) MIN_BUF_READ=500;; + "mdadm" ) MIN_BUF_READ=80;; + "ata" ) MIN_BUF_READ=80;; + "scsi" ) MIN_BUF_READ=100;; + "ssd" ) MIN_BUF_READ=200;; + * ) MIN_BUF_READ=$DEFAULT_BUF_READ;; + esac + echo "INFO: $disk_type: Using $MIN_BUF_READ MB/sec as the minimum throughput speed" + + max_speed=0 + echo "" + echo "Beginning hdparm timing runs" + echo "---------------------------------------------------" + + for iteration in `seq 1 10`; do + speed=`hdparm -t /dev/$disk 2>/dev/null | grep "Timing buffered disk reads" | awk -F"=" '{print $2}' | awk '{print $1}'` + echo "INFO: Iteration $iteration: Detected speed is $speed MB/sec" + + if [ -z "$speed" ]; then + echo "WARNING: Device $disk is too small! Aborting test." + exit 1 + fi + + speed=${speed/.*} + if [ $speed -gt $max_speed ]; then + max_speed=$speed + fi + done + echo "INFO: Maximum detected speed is $max_speed MB/sec" + echo "---------------------------------------------------" + echo "" + result=0 + if [ $max_speed -gt $MIN_BUF_READ ]; then + echo "PASS: $disk Max Speed of $max_speed MB/sec is faster than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" + else + echo "FAIL: $disk Max Speed of $max_speed MB/sec is slower than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" + result=1 + fi +done + +if [ $result -gt 0 ]; then + echo "WARNING: One or more disks failed testing!" + exit 1 +else + echo "All devices passed testing!" + exit 0 +fi diff --git a/units/disk/jobs.pxu b/units/disk/jobs.pxu index 102b858..a43fbe7 100644 --- a/units/disk/jobs.pxu +++ b/units/disk/jobs.pxu @@ -62,7 +62,7 @@ _summary: Disk performance test for {product_slug} _description: Verify that disk storage performs at or above baseline performance user: root environ: DISK_READ_PERF -command: disk_read_performance_test {name} +command: disk_read_performance_test.sh {name} unit: template template-resource: device -- cgit v1.2.3