OP-TEE Benchmark
Enable Benchmark feature
Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Igor Opaniuk <igor.opaniuk@linaro.org>
diff --git a/common.mk b/common.mk
index 8d08228..062b6b9 100644
--- a/common.mk
+++ b/common.mk
@@ -15,12 +15,16 @@
OPTEE_CLIENT_PATH ?= $(ROOT)/optee_client
OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
OPTEE_TEST_PATH ?= $(ROOT)/optee_test
-OPTEE_TEST_OUT_PATH ?= $(ROOT)/optee_test/out
+OPTEE_TEST_OUT_PATH ?= $(ROOT)/optee_test/out
HELLOWORLD_PATH ?= $(ROOT)/hello_world
+BENCHMARK_APP_PATH ?= $(ROOT)/optee_benchmark
# default high verbosity. slow uarts shall specify lower if prefered
CFG_TEE_CORE_LOG_LEVEL ?= 3
+# default disable latency benchmarks (over all OP-TEE layers)
+CFG_TEE_BENCHMARK ?= n
+
CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
# Accessing a shared folder on the host from QEMU:
@@ -145,6 +149,10 @@
################################################################################
# Linux
################################################################################
+ifeq ($(CFG_TEE_BENCHMARK),y)
+LINUX_DEFCONFIG_BENCH ?= $(CURDIR)/kconfigs/tee_bench.conf
+endif
+
LINUX_COMMON_FLAGS ?= LOCALVERSION= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL)
linux-common: linux-defconfig
@@ -153,7 +161,8 @@
$(LINUX_PATH)/.config: $(LINUX_DEFCONFIG_COMMON_FILES)
cd $(LINUX_PATH) && \
ARCH=$(LINUX_DEFCONFIG_COMMON_ARCH) \
- scripts/kconfig/merge_config.sh $(LINUX_DEFCONFIG_COMMON_FILES)
+ scripts/kconfig/merge_config.sh $(LINUX_DEFCONFIG_COMMON_FILES) \
+ $(LINUX_DEFCONFIG_BENCH)
linux-defconfig-clean-common:
rm -f $(LINUX_PATH)/.config
@@ -250,17 +259,19 @@
CROSS_COMPILE_ta_arm64=$(AARCH64_CROSS_COMPILE) \
CROSS_COMPILE_ta_arm32=$(AARCH32_CROSS_COMPILE) \
CFG_TEE_CORE_LOG_LEVEL=$(CFG_TEE_CORE_LOG_LEVEL) \
- DEBUG=$(DEBUG)
+ DEBUG=$(DEBUG) \
+ CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK)
optee-os-common:
$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_COMMON_FLAGS)
OPTEE_OS_CLEAN_COMMON_FLAGS ?= $(OPTEE_OS_COMMON_EXTRA_FLAGS)
-optee-os-clean-common: xtest-clean helloworld-clean
+optee-os-clean-common: xtest-clean helloworld-clean benchmark-app-clean-common
$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_CLEAN_COMMON_FLAGS) clean
-OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)
+OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
+ CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK) \
optee-client-common:
$(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_COMMON_FLAGS)
@@ -280,7 +291,8 @@
TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
OPTEE_CLIENT_EXPORT=$(OPTEE_CLIENT_EXPORT) \
COMPILE_NS_USER=$(COMPILE_NS_USER) \
- O=$(OPTEE_TEST_OUT_PATH)
+ O=$(OPTEE_TEST_OUT_PATH) \
+ CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK)
xtest-common: optee-os optee-client
$(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_COMMON_FLAGS)
@@ -313,6 +325,19 @@
$(MAKE) -C $(HELLOWORLD_PATH) $(HELLOWORLD_CLEAN_COMMON_FLAGS) clean
################################################################################
+# benchmark_app
+################################################################################
+BENCHMARK_APP_COMMON_FLAGS ?= HOST_CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
+ TEEC_EXPORT=$(OPTEE_CLIENT_EXPORT) \
+ TEEC_INTERNAL_INCLUDES=$(OPTEE_CLIENT_PATH)/libteec
+
+benchmark-app-common: optee-os optee-client
+ $(MAKE) -C $(BENCHMARK_APP_PATH) $(BENCHMARK_APP_COMMON_FLAGS)
+
+benchmark-app-clean-common:
+ $(MAKE) -C $(BENCHMARK_APP_PATH) clean
+
+################################################################################
# rootfs
################################################################################
update_rootfs-common: busybox filelist-tee
@@ -329,7 +354,7 @@
rm -f $(GEN_ROOTFS_FILELIST)
filelist-tee-common: fl:=$(GEN_ROOTFS_FILELIST)
-filelist-tee-common: optee-client xtest helloworld
+filelist-tee-common: optee-client xtest helloworld benchmark-app
@echo "# filelist-tee-common /start" > $(fl)
@echo "dir /lib/optee_armtz 755 0 0" >> $(fl)
@echo "# xtest / optee_test" >> $(fl)
@@ -345,6 +370,10 @@
"$(HELLOWORLD_PATH)/ta/8aaaf200-2450-11e4-abe2-0002a5d5c51b.ta" \
"444 0 0" >> $(fl); \
fi
+ @if [ -e $(BENCHMARK_APP_PATH)/benchmark ]; then \
+ echo "file /bin/benchmark" \
+ "$(BENCHMARK_APP_PATH)/benchmark 755 0 0" >> $(fl); \
+ fi
@if [ "$(QEMU_USERNET_ENABLE)" = "y" ]; then \
echo "slink /etc/rc.d/S02_udhcp_networking /etc/init.d/udhcpc 755 0 0" \
>> $(fl); \
diff --git a/kconfigs/tee_bench.conf b/kconfigs/tee_bench.conf
new file mode 100644
index 0000000..cf6cba9
--- /dev/null
+++ b/kconfigs/tee_bench.conf
@@ -0,0 +1 @@
+CONFIG_OPTEE_BENCHMARK=y
diff --git a/qemu.mk b/qemu.mk
index 4995161..ad80872 100644
--- a/qemu.mk
+++ b/qemu.mk
@@ -23,9 +23,9 @@
################################################################################
# Targets
################################################################################
-all: bios-qemu qemu soc-term
+all: bios-qemu qemu soc-term benchmark-app
clean: bios-qemu-clean busybox-clean linux-clean optee-os-clean \
- optee-client-clean qemu-clean soc-term-clean check-clean
+ optee-client-clean qemu-clean soc-term-clean check-clean benchmark-app-clean
-include toolchain.mk
@@ -131,6 +131,13 @@
helloworld-clean: helloworld-clean-common
################################################################################
+# benchmark
+################################################################################
+benchmark-app: benchmark-app-common
+
+benchmark-app-clean: benchmark-app-clean-common
+
+################################################################################
# Root FS
################################################################################
filelist-tee: filelist-tee-common