Files
mckernel/test/issues/1473/xpmem_attach03.sh.in
Yoshihisa Morizumi d2db639853 xpmem: support large page
1. try to use as large page as possible on attach
2. pre-map resident remote pages on attach

Change-Id: I5580682a4199e94085a9bad9ce3958a0f14cdcea
2021-03-03 05:07:49 +00:00

231 lines
7.0 KiB
Bash

#!/usr/bin/bash
run() {
tid=05
ng=0
echo "*** C${issue}T${tid} start *******************************"
echo "** xpmem testsuite"
pushd @WITH_XPMEM_BUILD@/test
test -e /tmp/xpmem.share && rm -f /tmp/xpmem.share
test -e /tmp/xpmem.lock && rm -f /tmp/xpmem.lock
# create TMP_SHARE_SIZE bytes defined in xpmem_test.h
for i in `seq 0 31` ; do
echo -n 0 >> /tmp/xpmem.share
done
echo 0 > /tmp/xpmem.lock
# Run the main test app
@WITH_MCK@/bin/mcexec $PWD/xpmem_master
popd
# xpmem basic test
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_001
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_002
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_003
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_004
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_005
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_006
sleep 3
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_007
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_008
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_009
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_010
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/XTP_011
}
SCRIPT_PATH=$(readlink -m "${BASH_SOURCE[0]}")
SCRIPT_NAME="${SCRIPT_PATH##*/}"
# prepare recorddir
. @CMAKE_INSTALL_PREFIX@/bin/common.sh
recorddir=$WORKDIR/output/$SCRIPT_NAME
[[ ! -d $recorddir ]] && mkdir -p $recorddir
recordfile=$WORKDIR/output/$SCRIPT_NAME.log
# define patch function
. @CMAKE_INSTALL_PREFIX@/bin/util.sh
patch_and_build large_page ihk_kmsg_size || exit 1
# boot patched McKernel
if [[ -e ${AUTOTEST_HOME}/bin/config.sh ]]; then
${AUTOTEST_HOME}/bin/boot.sh reboot
else
. @WITH_MCK_SRC@/test/common.sh
fi
sudo insmod @WITH_XPMEM@/lib/modules/`uname -r`/xpmem.ko
sudo chmod og+rw /dev/xpmem
sum_ng=0
issue=1259
tid=01
ng=0
echo "*** C${issue}T${tid} start *******************************"
echo "** xpmem_attach to Huge mapped memory range"
echo "** end of range is aligned with Large page size"
for pgshift in $PGSHIFT_LIST; do
((pgshift == $PAGE_SHIFT)) && continue
@WITH_MCK@/sbin/ihkosctl 0 clear_kmsg
log_file=$recorddir/C${issue}T${tid}_${pgshift}.log
echo pageshift: ${pgshift}
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem ${pgshift} 2 0 > ${log_file}
@WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file}
EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'`
SEG_ADDR=$(grep -o "anonymous_map_addr: [^ ]* " $log_file | awk '{ print $2; }')
SEG_PGSIZE=`cat ${log_file} | awk '/OK/,/DONE/' | \
grep -o "large_page_allocation.*${SEG_ADDR}.*" | awk '{ print $5; }'`
XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'`
XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'`
if [ "${SEG_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
echo "** [ OK ] seg_addr ($SEG_ADDR) is allocated before xpmem_attach"
else
echo "** [ NG ] seg_addr ($SEG_ADDR) is not allocated before xpmem_attach"
let ng++
fi
if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using large pages"
else
echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using large pages"
let ng++
fi
done
((sum_ng += ng))
if [ ${ng} -eq 0 ]; then
echo "*** C${issue}T${tid}: PASSED"
else
echo "*** C${issue}T${tid}: FAILED"
fi
echo ""
tid=02
ng=0
echo "*** C${issue}T${tid} start *******************************"
echo "** xpmem_attach to Huge mapped memory range"
echo "** end of range is NOT aligned with Large page size"
for pgshift in $PGSHIFT_LIST; do
((pgshift == $PAGE_SHIFT)) && continue
@WITH_MCK@/sbin/ihkosctl 0 clear_kmsg
log_file=$recorddir/C${issue}T${tid}_${pgshift}.log
echo pageshift: ${pgshift}
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem ${pgshift} 2 $PAGE_SIZE > ${log_file}
@WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file}
EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'`
SEG_ADDR=$(grep -o "anonymous_map_addr: [^ ]* " $log_file | awk '{ print $2; }')
SEG_PGSIZE=`cat ${log_file} | awk '/OK/,/DONE/' | \
grep -o "large_page_allocation.*${SEG_ADDR}.*" | awk '{ print $5; }'`
XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'`
XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'`
if [ "${SEG_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
printf "** [ OK ] "
else
printf "** [ NG ] "
let ng++
fi
echo "size of 1st page of segment at ${SEG_ADDR}: ${SEG_PGSIZE}, expected: ${EXPECT_PGSIZE}"
if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
printf "** [ OK ] "
else
printf "** [ NG ] "
let ng++
fi
echo "size of 1st page of attachment at ${XPMEM_ADDR}: ${XPMEM_PGSIZE}, expected: ${EXPECT_PGSIZE}"
done
((sum_ng += ng))
if [ ${ng} -eq 0 ]; then
echo "*** C${issue}T${tid}: PASSED"
else
echo "*** C${issue}T${tid}: FAILED"
fi
echo ""
tid=03
ng=0
echo "*** C${issue}T${tid} start *******************************"
echo "** xpmem_attach to small mapped memory range"
@WITH_MCK@/sbin/ihkosctl 0 clear_kmsg
log_file=$recorddir/C${issue}T${tid}.log
echo pageshift: small page
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/huge_page_xpmem -1 2 0 > ${log_file}
@WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file}
EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'`
XPMEM_ADDR=`grep xpmem_attachment_addr ${log_file} | awk '{ print $NF; }'`
XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'`
if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using small pages"
else
echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using small pages"
((ng++))
fi
((sum_ng += ng))
if [ ${ng} -eq 0 ]; then
echo "*** C${issue}T${tid}: PASSED"
else
echo "*** C${issue}T${tid}: FAILED"
fi
echo ""
tid=04
ng=0
echo "*** C${issue}T${tid} start *******************************"
echo "** xpmem_attach to multi pagesize range"
pgshift=$(echo $PGSHIFT_LIST | awk '{print $2}')
@WITH_MCK@/sbin/ihkosctl 0 clear_kmsg
log_file=$recorddir/C${issue}T${tid}_${pgshift}.log
echo pageshift: ${pgshift}
@WITH_MCK@/bin/mcexec @CMAKE_INSTALL_PREFIX@/bin/multi_vmr_xpmem ${pgshift} 1 | tee ${log_file}
@WITH_MCK@/sbin/ihkosctl 0 kmsg >> ${log_file}
EXPECT_PGSIZE=`grep EXPECT_PAGE_SIZE ${log_file} | awk '{ print $2; }'`
XPMEM_ADDR=`grep xpmem_large ${log_file} | awk '{ print $NF; }'`
XPMEM_PGSIZE=`grep -o "xpmem_page_attach.*${XPMEM_ADDR}.*" ${log_file} | awk '{ print $NF; }'`
if [ "${XPMEM_PGSIZE}" = "${EXPECT_PGSIZE}" ]; then
echo "** [ OK ] xpmem_addr ($XPMEM_ADDR) is allocated using large pages"
else
echo "** [ NG ] xpmem_addr ($XPMEM_ADDR) is NOT allocated using large pages"
let ng++
fi
((sum_ng += ng))
if [ ${ng} -eq 0 ]; then
echo "*** C${issue}T${tid}: PASSED"
else
echo "*** C${issue}T${tid}: FAILED"
fi
echo ""
run 2>&1 | tee $recordfile
grep -E '(FAIL| NG )' $recordfile && ((sum_ng++))
sudo rmmod xpmem.ko
exit $sum_ng