diff options
author | James Kung <kong1191@gmail.com> | 2015-01-13 19:36:23 +0800 |
---|---|---|
committer | James Kung <kong1191@gmail.com> | 2015-01-13 19:36:23 +0800 |
commit | a1ba11e0da1df5eaaad2b2931cf39ae4360c11a3 (patch) | |
tree | 39e49b9dfe8cdb94820928da0e8a88451b2ebb10 | |
parent | d1ec6d84799b4aaa7eeca605d67a1cc1b22a507e (diff) |
Caculate time interval in normal world application
-rw-r--r-- | host/simple_client.c | 28 | ||||
-rw-r--r-- | ta/simple_ta.c | 23 |
2 files changed, 25 insertions, 26 deletions
diff --git a/host/simple_client.c b/host/simple_client.c index 05f39ec..2ab715a 100644 --- a/host/simple_client.c +++ b/host/simple_client.c @@ -153,23 +153,26 @@ TEEC_Result measure_time_of_secure_sys_call(TEEC_Session *sess) TEEC_Operation op; TEEC_Result res; uint32_t err_origin; - uint64_t sys_call_one_way_clock_count = 0; - uint64_t sys_call_round_trip_clock_count = 0; + uint64_t start_svc_clock_count = 0; + uint64_t enter_svc_clock_count = 0; + uint64_t return_svc_clock_count = 0; memset(&op, 0, sizeof(op)); op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT, - TEEC_NONE, + TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE); - op.params[0].tmpref.buffer = (void *)&sys_call_one_way_clock_count; - op.params[0].tmpref.size = sizeof(sys_call_one_way_clock_count); + op.params[0].tmpref.buffer = (void *)&start_svc_clock_count; + op.params[0].tmpref.size = sizeof(start_svc_clock_count); - op.params[1].tmpref.buffer = (void *)&sys_call_round_trip_clock_count; - op.params[1].tmpref.size = sizeof(sys_call_round_trip_clock_count); + op.params[1].tmpref.buffer = (void *)&enter_svc_clock_count; + op.params[1].tmpref.size = sizeof(enter_svc_clock_count); + op.params[2].tmpref.buffer = (void *)&return_svc_clock_count; + op.params[2].tmpref.size = sizeof(return_svc_clock_count); res = TEEC_InvokeCommand(sess, TAF_MEASURE_SYS_CALL_TIME, &op, &err_origin); @@ -179,13 +182,16 @@ TEEC_Result measure_time_of_secure_sys_call(TEEC_Session *sess) } else { uint32_t freq = arm_sys_counter_get_frequency(); - uint64_t one_way_time = convert_to_time_in_us(freq, sys_call_one_way_clock_count); - uint64_t round_trip_time = convert_to_time_in_us(freq, sys_call_round_trip_clock_count); + uint64_t one_way_clock_count = enter_svc_clock_count - start_svc_clock_count; + uint64_t round_trip_clock_count = return_svc_clock_count - start_svc_clock_count; + uint64_t one_way_time = convert_to_time_in_us(freq, enter_svc_clock_count - start_svc_clock_count); + uint64_t round_trip_time = convert_to_time_in_us(freq, return_svc_clock_count - start_svc_clock_count); printf("Performance Measurement: [Secure system call]\n"); printf("\tSystem counter frequency = %d\n", freq); - printf("\tOne way trip clock count = %" PRId64 " time = %" PRId64 " us\n", sys_call_one_way_clock_count, one_way_time); - printf("\tRound trip clock count = %" PRId64 " time = %" PRId64 " us\n", sys_call_round_trip_clock_count, round_trip_time); + printf("\tCounter: start=%" PRId64 " ta=%" PRId64 " end=%" PRId64 "\n", start_svc_clock_count, enter_svc_clock_count, return_svc_clock_count); + printf("\tOne way trip clock count = %" PRId64 " time = %" PRId64 " us\n", one_way_clock_count, one_way_time); + printf("\tRound trip clock count = %" PRId64 " time = %" PRId64 " us\n", round_trip_clock_count, round_trip_time); } return res; diff --git a/ta/simple_ta.c b/ta/simple_ta.c index 8f260fe..fea8ad7 100644 --- a/ta/simple_ta.c +++ b/ta/simple_ta.c @@ -30,6 +30,7 @@ #include <utee_defines.h> #include <assert.h> #include <stdint.h> +#include <inttypes.h> #include <mpa.h> #include <tee_internal_api.h> @@ -82,7 +83,6 @@ TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, /* Return system counter value to Host app */ memcpy(params[0].memref.buffer, &ta_counter_value, sizeof(ta_counter_value)); - DMSG("counter ta=%lld", ta_counter_value); /* * The DMSG() macro is non-standard, TEE Internal API doesn't * specify any means to logging from a TA. @@ -117,8 +117,6 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id, uint64_t sys_call_start_counter_value = 0; uint64_t sys_call_received_counter_value = 0; uint64_t sys_call_return_counter_value = 0; - uint64_t one_way_trip_counter_value = 0; - uint64_t round_trip_counter_value = 0; uint32_t exp_param_types = 0; DMSG("Enter Invoke Command Entry Point"); @@ -137,7 +135,7 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id, case TAF_MEASURE_SYS_CALL_TIME: exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, - TEE_PARAM_TYPE_NONE, + TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE); if (param_types != exp_param_types) { @@ -151,19 +149,14 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id, sys_call_return_counter_value = arm_sys_counter_get_counter(); - one_way_trip_counter_value = sys_call_received_counter_value - sys_call_start_counter_value; - params[0].memref.size = sizeof(one_way_trip_counter_value); - memcpy(params[0].memref.buffer, &one_way_trip_counter_value, params[0].memref.size); + params[0].memref.size = sizeof(sys_call_start_counter_value); + memcpy(params[0].memref.buffer, &sys_call_start_counter_value, params[0].memref.size); - round_trip_counter_value = sys_call_return_counter_value - sys_call_start_counter_value; - params[1].memref.size = sizeof(round_trip_counter_value); - memcpy(params[1].memref.buffer, &round_trip_counter_value, params[1].memref.size); + params[1].memref.size = sizeof(sys_call_received_counter_value); + memcpy(params[1].memref.buffer, &sys_call_received_counter_value, params[1].memref.size); - DMSG("System Call Performance Measurement:"); - DMSG("\tCounter: start=%lld received=%lld end=%lld", - sys_call_start_counter_value, sys_call_received_counter_value, sys_call_return_counter_value); - DMSG("\tone_way_trip_counter_value=%lld", one_way_trip_counter_value); - DMSG("\tround_trip_counter_value=%lld", round_trip_counter_value); + params[1].memref.size = sizeof(sys_call_return_counter_value); + memcpy(params[2].memref.buffer, &sys_call_return_counter_value, params[1].memref.size); break; |