
In some tests start have to be performed with force flag. Added new cache mode to dictionary. Signed-off-by: Michal Mielewczyk <michal.mielewczyk@intel.com>
172 lines
6.8 KiB
Bash
Executable File
172 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright(c) 2012-2019 Intel Corporation
|
|
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
#
|
|
|
|
# DESCRIPTION Verify if write mode: read only, works as expected and cache only reads and do not cache writes
|
|
|
|
TESTS_DIR="$(dirname $0)/../"
|
|
. $TESTS_DIR/cas_lib
|
|
start_test $*
|
|
|
|
CACHE_DEVICE_SIZE=1G
|
|
CORE_DEVICE_SIZE=2G
|
|
|
|
BLOCK_SIZE=4096
|
|
COUNT=100
|
|
|
|
IOSTAT_BLOCK_SIZE=1024
|
|
if [ $POSIXLY_CORRECT ]; then
|
|
IOSTAT_BLOCK_SIZE=512
|
|
fi
|
|
|
|
L_TEST_STATUS=0
|
|
|
|
# Use CACHE_DEVICE and CORE_DEVICE provided by configuration file and remove partitions from those devices
|
|
TARGET_DEVICE_OPTION="$CACHE_DEVICE" remove_partitions
|
|
TARGET_DEVICE_OPTION="$CORE_DEVICE" remove_partitions
|
|
|
|
# Create 1 primary partitions on CACHE_DEVICE
|
|
TARGET_DEVICE_OPTION="$CACHE_DEVICE" PARTITION_SIZE_OPTION=$CACHE_DEVICE_SIZE PARTITION_IDS_OPTION="1" make_primary_partitions
|
|
|
|
# Create 1 primary partitions on CORE_DEVICE
|
|
TARGET_DEVICE_OPTION="$CORE_DEVICE" PARTITION_SIZE_OPTION=$CORE_DEVICE_SIZE PARTITION_IDS_OPTION="1" make_primary_partitions
|
|
|
|
declare -a MODE=("wt" "wa")
|
|
|
|
echo "------Test read from cache"
|
|
|
|
for mode in "${MODE[@]}"
|
|
do
|
|
echo "------Start CAS Linux in $mode mode"
|
|
|
|
# This is where the real test starts
|
|
CACHE_ID_OPTION="1" CACHE_DEVICE_OPTION="${CACHE_DEVICE}"1 CACHE_MODE_OPTION="$mode"
|
|
CACHE_FORCE_OPTION="yes" start_cache
|
|
|
|
CACHE_ID_OPTION="1" CORE_DEVICE_OPTION="${CORE_DEVICE}"1 add_core
|
|
sleep 2
|
|
|
|
# iostat read
|
|
TMP_CACHE_DEVICE=$(echo "${CACHE_DEVICE}" | cut -c6-)
|
|
run_cmd "dd if=/dev/cas1-1 of=$TMP_DIR/file001.bin bs=$BLOCK_SIZE count=$COUNT skip=10000 iflag=direct"
|
|
READ_CACHE_1=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $5}')
|
|
run_cmd "dd if=/dev/cas1-1 of=$TMP_DIR/file001.bin bs=$BLOCK_SIZE count=$COUNT skip=10000 iflag=direct"
|
|
READ_CACHE_2=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $5}')
|
|
READ_CACHE_DELTA=$((($READ_CACHE_2-$READ_CACHE_1)*IOSTAT_BLOCK_SIZE))
|
|
DATA_READ=$(($COUNT*$BLOCK_SIZE))
|
|
if [ $READ_CACHE_DELTA -eq $DATA_READ ] ; then
|
|
echo -n "Blocks read from cache:$READ_CACHE_DELTA == $DATA_READ"; success
|
|
else
|
|
echo -n "Blocks read from cache:$READ_CACHE_DELTA != $DATA_READ"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
|
|
# Clear up after test
|
|
CACHE_ID_OPTION="1" stop_cache
|
|
done
|
|
|
|
echo "------Test write and than read from cache"
|
|
|
|
for mode in "${MODE[@]}"
|
|
do
|
|
echo "------Start CAS Linux in $mode mode"
|
|
|
|
# This is where the real test starts
|
|
CACHE_ID_OPTION="1" CACHE_DEVICE_OPTION="${CACHE_DEVICE}"1 CACHE_MODE_OPTION="$mode"
|
|
CACHE_FORCE_OPTION="yes" start_cache
|
|
|
|
CACHE_ID_OPTION="1" CORE_DEVICE_OPTION="${CORE_DEVICE}"1 add_core
|
|
sleep 2
|
|
|
|
# iostat write and write
|
|
TMP_CORE_DEVICE=$(echo "${CORE_DEVICE}" | cut -c6-)
|
|
WRITE_CORE_0=$(iostat "${CORE_DEVICE}" | grep $TMP_CORE_DEVICE | awk 'NR==1 {print $6}')
|
|
WRITE_CACHE_0=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $6}')
|
|
run_cmd "dd if=$TMP_DIR/file001.bin of=/dev/cas1-1 bs=$BLOCK_SIZE count=$COUNT seek=20000 oflag=direct"
|
|
WRITE_CORE_1=$(iostat "${CORE_DEVICE}" | grep $TMP_CORE_DEVICE | awk 'NR==1 {print $6}')
|
|
WRITE_CACHE_1=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $6}')
|
|
READ_CORE_1=$(iostat "${CORE_DEVICE}" | grep $TMP_CORE_DEVICE | awk 'NR==1 {print $5}')
|
|
READ_CACHE_1=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $5}')
|
|
WRITE_CORE_DELTA_1=$((($WRITE_CORE_1-$WRITE_CORE_0)*IOSTAT_BLOCK_SIZE))
|
|
WRITE_CACHE_DELTA_1=$((($WRITE_CACHE_1-$WRITE_CACHE_0)*IOSTAT_BLOCK_SIZE))
|
|
run_cmd "dd if=/dev/cas1-1 of=$TMP_DIR/file001.bin bs=$BLOCK_SIZE count=$COUNT skip=20000 iflag=direct"
|
|
READ_CORE_2=$(iostat "${CORE_DEVICE}" | grep $TMP_CORE_DEVICE | awk 'NR==1 {print $5}')
|
|
READ_CACHE_2=$(iostat "${CACHE_DEVICE}" | grep $TMP_CACHE_DEVICE | awk 'NR==1 {print $5}')
|
|
READ_CORE_DELTA_2=$((($READ_CORE_2-$READ_CORE_1)*IOSTAT_BLOCK_SIZE))
|
|
READ_CACHE_DELTA_2=$((($READ_CACHE_2-$READ_CACHE_1)*IOSTAT_BLOCK_SIZE))
|
|
DATA_WRITE=$(($COUNT*$BLOCK_SIZE))
|
|
|
|
# Verify writes on both cache and core
|
|
if [ "$mode" == "wa" ] ; then
|
|
if [ $WRITE_CORE_DELTA_1 -eq $DATA_WRITE ]; then
|
|
echo -n "Blocks write to core: $WRITE_CORE_DELTA_1 == $DATA_WRITE"; success
|
|
else
|
|
echo -n "Blocks write to core: $WRITE_CORE_DELTA_1 != $DATA_WRITE"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
if [ $WRITE_CACHE_DELTA_1 -eq 0 ]; then
|
|
echo -n "Blocks write to cache: $WRITE_CACHE_DELTA_1 == 0"; success
|
|
else
|
|
echo -n "Blocks write to cache: $WRITE_CACHE_DELTA_1 != 0"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
else
|
|
if [ $WRITE_CORE_DELTA_1 -eq $DATA_WRITE ]; then
|
|
echo -n "Blocks write to core: $WRITE_CORE_DELTA_1 == $DATA_WRITE"; success
|
|
else
|
|
echo -n "Blocks write to core: $WRITE_CORE_DELTA_1 != $DATA_WRITE"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
if [ $WRITE_CACHE_DELTA_1 -eq $DATA_WRITE ]; then
|
|
echo -n "Blocks write to cache: $WRITE_CACHE_DELTA_1 == $DATA_WRITE"; success
|
|
else
|
|
echo -n "Blocks write to cache: $WRITE_CACHE_DELTA_1 != $DATA_WRITE"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
fi
|
|
|
|
# Verify reads on both cache and core
|
|
if [ "$mode" == "wa" ] ; then
|
|
if [ $READ_CORE_DELTA_2 -eq $DATA_WRITE ]; then
|
|
echo -n "Blocks read from core: $READ_CORE_DELTA_2 == $DATA_WRITE"; success
|
|
else
|
|
echo -n "Blocks read from core: $READ_CORE_DELTA_2 != $DATA_WRITE"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
if [ $READ_CACHE_DELTA_2 -eq 0 ]; then
|
|
echo -n "Blocks read from cache: $READ_CACHE_DELTA_2 == 0"; success
|
|
else
|
|
if [ $READ_CACHE_DELTA_2 -eq 4096 ]; then
|
|
echo -n "Blocks read from cache: $READ_CACHE_DELTA_2 == 4096"; success
|
|
else
|
|
echo -n "Blocks read from cache: $READ_CACHE_DELTA_2 != 0"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
fi
|
|
else
|
|
if [ $READ_CORE_DELTA_2 -eq 0 ]; then
|
|
echo -n "Blocks read from core: $READ_CORE_DELTA_2 == 0"; success
|
|
else
|
|
echo -n "Blocks read from core: $READ_CORE_DELTA_2 != 0"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
if [ $READ_CACHE_DELTA_2 -ge $DATA_WRITE ]; then
|
|
echo -n "Blocks read from cache: $READ_CACHE_DELTA_2 >= $DATA_WRITE"; success
|
|
else
|
|
echo -n "Blocks read from cache: $READ_CACHE_DELTA_2 != $DATA_WRITE"; error
|
|
L_TEST_STATUS=1
|
|
fi
|
|
fi
|
|
|
|
# Clear up after test
|
|
CACHE_ID_OPTION="1" stop_cache
|
|
done
|
|
|
|
# Always return 0 at the end of the test - if at any point something has failed
|
|
# in the API functions, test will end and return a proper result.
|
|
# If you need to check other things during the test and end the test earlier, you
|
|
# should end the test using "end_test $retval" function
|
|
end_test $L_TEST_STATUS
|