Test "Add mcstat tool" on arm64

Change-Id: I4bf1260e999c16fe7b9c339af3833ea007277889
This commit is contained in:
Shiratori, Takehiro
2018-12-06 20:49:23 +09:00
committed by Masamichi Takagi
parent 1422838dd1
commit 05c315857c
5 changed files with 359 additions and 0 deletions

View File

@ -0,0 +1,20 @@
# Makefile COPYRIGHT FUJITSU LIMITED 2018
CC = gcc
TARGET = get_rusage
LDFLAGS = -Wall
include $(HOME)/.mck_test_config
INCLUDE_DIR = $(BIN)/../include
LIBDIR = $(BIN)/../lib
all: $(TARGET)
get_rusage: get_rusage.c
$(CC) -o $@ $^ $(LDFLAGS) -I$(INCLUDE_DIR) -Wl,-rpath=$(LIBDIR) -L$(LIBDIR) -lihk
test: all
./run.sh
clean:
rm -f $(TARGET)

50
test/mcstat/arm64/README Normal file
View File

@ -0,0 +1,50 @@
/* README COPYRIGHT FUJITSU LIMITED 2018 */
mcstatテストセットREADME
(1) テストの実行方法
以下の手順でテストを実行する
1. $HOME/.mck_test_configを用意する
当該ファイルは、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
$HOMEにコピーし、適宜編集する
2. make testを実行する
(2) テスト項目詳細
TEST001 メモリ総容量の表示が期待通りであるか確認する
TEST002 現在の使用量の表示が期待通りであるか確認する
TEST003 メモリ最大使用量の表示が期待通りであるか確認する
TEST004 システム時間の表示が期待通りであるか確認する
TEST005 ユーザ時間の表示が期待通りであるか確認する
TEST006 現在動作中のスレッド数が期待通りであるか確認する
TEST007 表示されている最大スレッド数が期待通りであるか確認する
TEST008 -nオプションを付与した場合、ヘッダが1つだけ表示されることを確認する
TEST009 -nオプションを付与しなかった場合、ヘッダが10行ごとに出力されることを確認する
TEST010 -sオプションでMcKernelのステータスのみ表示することを確認する
TEST011 -hオプションでusageが表示されることを確認する
TEST012 -hオプションを他オプションと同時に指定してもusage表示が優先されることを確認する
TEST013 delayを指定した秒間単位で行を出力することを確認する
TEST014 delayのみを指定した場合、間隔単位で継続出力を行うことを確認する
TEST015 不正なオプションを指定した場合に期待通りの動作になることを確認する
(3) 実行結果ログ
result.logファイル内に実行時のログを記載する。
実行に利用したIHK/McKernelは、IA版における下記の版数相当に加えて、
https://postpeta.pccluster.org/redmine/issues/1237
https://postpeta.pccluster.org/redmine/issues/1223
の関連修正を加えたarm64版移植IHK/McKernelである。
IHK
commit d6fcbee8cb91f9ec4b49f97c918e696ac0335aaf
Author: Shiratori, Takehiro <fj0300es@aa.jp.fujitsu.com>
Date: Tue Oct 16 16:25:33 2018 +0900
McKernel
commit 6f9fef2b13447c74c36d15cf5ebd186f8395ccca
Author: Ken Sato <ken.sato.ty@hitachi-solutions.com>
Date: Tue Sep 25 10:05:41 2018 +0900
(4) 備考
特になし。
以上。

View File

@ -0,0 +1,73 @@
/* get_rusage.c COPYRIGHT FUJITSU LIMITED 2018 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ihklib.h>
#include <mckernel/ihklib_rusage.h>
static void usage(char *cmd)
{
printf("Usage:\n");
printf(" %s <os_number>\n", cmd);
}
int main(int argc, char *argv[])
{
int os_num = 0;
int ret = -1;
int i = 0;
struct mckernel_rusage mck_rusage;
if (argc != 2) {
usage(argv[0]);
goto out;
}
os_num = atoi(argv[1]);
if (os_num < 0 || 63 < os_num) {
printf("Invalid argument 1 os_num.\n");
usage(argv[0]);
goto out;
}
memset(&mck_rusage, 0, sizeof(mck_rusage));
ret = ihk_os_getrusage(os_num, &mck_rusage, sizeof(mck_rusage));
if (ret) {
perror("ihk_os_getrusage()");
goto out;
}
for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) {
printf("memory_stat_rss[%d] : 0x%lx\n", i,
mck_rusage.memory_stat_rss[i]);
}
for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) {
printf("memory_stat_mapped_file[%d] : 0x%lx\n", i,
mck_rusage.memory_stat_mapped_file[i]);
}
printf("memory_max_usage : 0x%lx\n", mck_rusage.memory_max_usage);
printf("memory_kmem_usage : 0x%lx\n", mck_rusage.memory_kmem_usage);
printf("memory_kmem_max_usage : 0x%lx\n", mck_rusage.memory_kmem_max_usage);
for (i = 0; i < IHK_MAX_NUM_NUMA_NODES; i++) {
printf("memory_numa_stat[%d] : 0x%lx\n", i,
mck_rusage.memory_numa_stat[i]);
}
printf("cpuacct_stat_system : 0x%lx\n", mck_rusage.cpuacct_stat_system);
printf("cpuacct_stat_user : 0x%lx\n", mck_rusage.cpuacct_stat_user);
printf("cpuacct_usage : 0x%lx\n", mck_rusage.cpuacct_usage);
for (i = 0; i < IHK_MAX_NUM_CPUS; i++) {
printf("cpuacct_usage_percpu[%d] : 0x%lx\n", i,
mck_rusage.cpuacct_usage_percpu[i]);
}
printf("num_threads : 0x%x\n", mck_rusage.num_threads);
printf("max_num_threads : 0x%x\n", mck_rusage.max_num_threads);
out:
return ret;
}

View File

@ -0,0 +1,20 @@
gcc -o get_rusage get_rusage.c -Wall -I/opt/ppos/bin/../include -Wl,-rpath=/opt/ppos/bin/../lib -L/opt/ppos/bin/../lib -lihk
./run.sh
mcstop+release.sh ... done
mcreboot.sh -c 4-7 -m 512M@0 ... done
TEST001: OK
TEST002: OK
TEST003: OK
TEST004: OK
TEST005: OK
TEST006: OK
TEST007: OK
TEST008: OK
TEST009: OK
TEST010: OK
TEST011: OK
TEST012: OK
TEST013: OK
./run.sh: 172 行: 6701 Terminated stdbuf -i0 -o0 -e0 ${MCSTAT} 1 > ./tmp.log 2>&1
TEST014: OK
TEST015: OK

196
test/mcstat/arm64/run.sh Executable file
View File

@ -0,0 +1,196 @@
#!/bin/sh
## run.sh COPYRIGHT FUJITSU LIMITED 2018 ##
USELTP=0
USEOSTEST=1
MCREBOOT=0
. ../../common.sh
MCSTAT="${BIN}/mcstat"
BOOTPARAM="-c 4-7 -m 512M@0"
mcreboot
sleep 1
${MCEXEC} ${TESTMCK} -s mem_limits -n 0 -- -s $((64*1024*1024)) -c 1 -f mmap > /dev/null 2>&1
sleep 1
result=0
#################
## mcstat test ##
#################
output=`${MCSTAT} | sed -n -e 3p`
mck_mem_total=$(awk '{print $1}' <<< ${output})
mem_current=$(awk '{print $2}' <<< ${output})
mem_max=$(awk '{print $3}' <<< ${output})
tsc_system=$(awk '{print $4}' <<< ${output})
tsc_user=$(awk '{print $5}' <<< ${output})
thread_current=$(awk '{print $6}' <<< ${output})
thread_max=$(awk '{print $7}' <<< ${output})
output=`./get_rusage 0`
exp_kmem_current=`echo "${output}" | grep "memory_kmem_usage" | cut -c 21-`
exp_umem_current=`echo "${output}" | grep "memory_numa_stat\[0\]" | cut -c 23-`
exp_mem_current=$((${exp_kmem_current}+${exp_umem_current}))
exp_kmem_max=`echo "${output}" | grep "memory_kmem_max_usage" | cut -c 25-`
exp_umem_max=`echo "${output}" | grep "memory_max_usage" | cut -c 20-`
exp_mem_max=$((${exp_kmem_max}+${exp_umem_max}))
exp_tsc_system=`echo "${output}" | grep "cpuacct_stat_system" | cut -c 23-`
exp_tsc_user=`echo "${output}" | grep "cpuacct_stat_user" | cut -c 21-`
exp_thread_current=`echo "${output}" | grep "num_threads" | head -1 | cut -c 15-`
exp_thread_max=`echo "${output}" | grep "max_num_threads" | cut -c 19-`
mck_mem_total=`echo "scale=3; ${mck_mem_total} - ${mem_current}" | bc`
mck_mem_total=${mck_mem_total%.*}
if [ 502 -le ${mck_mem_total} -a ${mck_mem_total} -lt 512 ]; then
echo "TEST001: OK"
else
echo "TEST001: NG, memory total value (exp:near512MiB val:${mck_mem_total}MiB)."
result=-1
fi
exp_mem_current=$((${exp_mem_current} / 1024 / 1024))
mem_current=${mem_current%.*}
if [ ${mem_current} == ${exp_mem_current} ]; then
echo "TEST002: OK"
else
echo "TEST002: NG, memory current value (exp:${exp_mem_current}MiB val:${mem_current}MiB)"
result=-1
fi
exp_mem_max=$((${exp_mem_max} / 1024 / 1024))
mem_max=${mem_max%.*}
if [ ${mem_max} == ${exp_mem_max} ]; then
echo "TEST003: OK"
else
echo "TEST003: NG, memory max value (exp:${exp_mem_max}MiB val:${mem_current}MiB)"
result=-1
fi
exp_tsc_system=$((${exp_tsc_system}))
if [ ${tsc_system} == ${exp_tsc_system} ]; then
echo "TEST004: OK"
else
echo "TEST004: NG, tsc system value (exp:${exp_tsc_system} val:${tsc_system})"
result=-1
fi
exp_tsc_user=$((${exp_tsc_user}))
if [ ${tsc_user} == ${exp_tsc_user} ]; then
echo "TEST005: OK"
else
echo "TEST005: NG, tsc user value (exp:${exp_tsc_system} val:${tsc_system})"
result=-1
fi
exp_thread_current=$((${exp_thread_current}))
if [ ${thread_current} == ${exp_thread_current} ]; then
echo "TEST006: OK"
else
echo "TEST006: NG, current thread value (exp:${exp_thread_current} val:${thread_current})"
result=-1
fi
exp_thread_max=$((${exp_thread_max}))
if [ ${thread_max} == ${exp_thread_max} ]; then
echo "TEST007: OK"
else
echo "TEST007: NG, max thread value (exp:${exp_thread_max} val:${thread_max})"
result=-1
fi
output=`${MCSTAT} -n 1 20 | grep -c "\-\-\-\-\-\-\- memory"`
if [ ${output} == 1 ]; then
echo "TEST008: OK"
else
echo "TEST008: NG, header output frequency -n option setting."
result=-1
fi
output=`${MCSTAT} 1 20 | grep -c "\-\-\-\-\-\-\- memory"`
if [ ${output} == 2 ]; then
echo "TEST009: OK"
else
echo "TEST009: NG, header output frequency -n option not setting."
result=-1
fi
output=`${MCSTAT} -s | awk '{print toupper($0)}'`
output=`echo ${output} | cut -c 18-`
exp_status=`${IHKOSCTL} 0 get status`
if [ ${output} == ${exp_status} ]; then
echo "TEST010: OK"
else
echo "TEST010: NG, -s option get status.(exp:${exp_status} status:${output})"
result=-1
fi
${MCSTAT} -h 2>&1 | grep -q "Usage"
if [ $? == 0 ]; then
echo "TEST011: OK"
else
echo "TEST011: NG, -h option setting."
result=-1
fi
${MCSTAT} -s -h 2>&1 | grep -q "Usage"
if [ $? == 0 ]; then
echo "TEST012: OK"
else
echo "TEST012: NG, -h and other option setting."
result=-1
fi
(time ${MCSTAT} 5 2) > ./tmp.log 2>&1
output=`cat ./tmp.log | tac | sed -n -e 3p | cut -c 8-12`
output=${output%.*}
if [ ${output} == 5 ]; then
output=`cat ./tmp.log | sort | uniq -c | sort -nr | head -1 | cut -c 7-8`
if [ ${output} == 2 ]; then
echo "TEST013: OK"
else
echo "TEST013: NG, delay/count option setting. (lines mismatch)"
result=-1
fi
else
echo "TEST013: NG, delay/count option setting. (times mismatch)"
result=-1
fi
stdbuf -i0 -o0 -e0 ${MCSTAT} 1 > ./tmp.log 2>&1 &
sleep 10
kill `pidof mcstat`
output=`cat ./tmp.log | sort | uniq -c | sort -nr | head -1 | cut -c 6-7`
if [ ${output} == 11 ]; then
echo "TEST014: OK"
else
echo "TEST014: NG, delay option only setting."
result=-1
fi
${MCSTAT} -k > ./tmp.log 2>&1
if [ $? == 0 ]; then
cat ./tmp.log | grep -q "invalid option"
if [ $? == 0 ]; then
echo "TEST015: OK"
else
echo "TEST015: NG, invalid option setting. (log mismatch)"
result=-1
fi
else
echo "TEST015: NG, invalid option setting. (result mismatch)"
result=-1
fi
rm -f ./tmp.log
exit ${result}