OPTEE Benchmark框架

安全之安全(security²)博客目录导读

OPTEE调试技术汇总

目录

一、序言

二、Benchmark框架

三、Benchmark实现细节

1、设计概况

2、时间戳源

3、调用时序图

4、添加自定义时间戳

5、构建并运行Benchmark

6、限制和进一步措施


一、序言

        本节中描述的特性依赖于上游不可用的Linux kernel patch,并且在OP-TEE版本3.15.0之前一直在linaro-swg kernel repository中维护。带有此补丁的最新内核源代码可以在基于Linux 5.14的 optee-3.15.0分支中找到。

        Benchmark测试框架在OP-TEE 3.16.0或更高版本上仍然可以像这里描述的那样工作,前提是:(a)使用从分支optee-3.15.0构建的Linux内核,或者(b)benchmark kernel patch 被前向移植。

        如果内核补丁缺失,打印如下错误:

OPTEE Benchmark框架_第1张图片

二、Benchmark框架

        由于其性质,OP-TEE是一个跨越多个体系结构层的解决方案,其中每个层都包含自己的复杂部分。为了进一步优化性能,需要一种工具来为每一层提供详细和精确的分析信息。

        需要接收以下情况的延迟(latency)值:

        从非安全世界下的client应用程序到可信应用程序再返回的往返时间。浏览每一层所需时间的详细信息,并原路返回:

  • libTEEC -> Linux OP-TEE kernel driver

  • Linux OP-TEE kernel driver -> OP-TEE OS Core

  • OP-TEE OS Core -> TA entry point (not supported yet)

三、Benchmark实现细节

1、设计概况

        Benchmark框架由以下组件组成:

1)Benchmark Client Application (CA):一个专用的客户端应用程序,它负责分配时间戳循环缓冲区,在Benchmark PTA中注册这些缓冲区,并使用所有OP-TEE层生成的所有时间戳数据。最后,将时间戳数据放入扩展名为.ts的适当文件中。更多的构建细节可以在optee_benchmark上找到。

2)Benchmark Pseudo Trusted Application (PTA):它拥有共享内存中的所有每个cpu循环非安全缓冲区。必须(由CA)调用Benchmark PTA来注册时间戳循环缓冲区。然后,Benchmark PTA调用OP-TEE Linux驱动程序(通过一些RPC方法)在Linux内核层中注册这个循环缓冲区。

3)libTEEC and Linux kernel OP-TEE driver:包括处理来自Benchmark PTA的时间戳缓冲区注册请求的功能。

        当启用Benchmark测试时,所有OP-TEE层(libTEEC、Linux内核OP-TEE驱动程序、OP-TEE操作系统核心)在分配/注册循环缓冲区的条件下,都会用所有调用请求的时间戳数据填充已注册的时间戳循环缓冲区。

OPTEE Benchmark框架_第2张图片

2、时间戳源

        Arm性能监视器单元被用作时间戳值的主要来源。之所以选择这种技术,是因为它支持所有Armv7-A/Armv8-A核。除了它可以提供精确的cpu周期计数器值之外,还可以启用EL0访问所有事件,因此用户模式应用程序可以直接从协处理器寄存器读取cpu计数器值,通过避免对EL1内核进行额外的系统调用来实现最小的延迟。

        除了CPU周期计数器值,时间戳本身还包含以下信息:

        1)执行CPU核心索引

        2)OP-TEE层id,该时间戳是从哪里获得的

        3)记录时间戳时的程序计数器值,可用于获取符号名称(文件名和行号)。

3、调用时序图

OPTEE Benchmark框架_第3张图片

4、添加自定义时间戳

        目前,时间戳只针对InvokeCommand调用,但也可以在受支持的OP-TEE层中选择自定义位置。在自定义的c源文件中添加时间戳存储命令:

        1)包含适当的头文件      

  • OP-TEE OS Core: bench.h

  • Linux kernel OP-TEE module: optee_bench.h

  • libTEEC: teec_benchmark.h

        2)在您想要放置时间戳的地方的函数中调用bm_timestamp()(对于linux kmod使用optee_bm_timestamp())。

5、构建并运行Benchmark

        请参阅optee_benchmark提供的说明。

6、限制和进一步措施

        应用程序的实现,该应用程序将分析时间戳数据,并为提供avg/min/max值(CPU周期和时间值)的不同类型的调用提供统计数据。

        添加对支持OP-TEE的所有平台的支持。

        增加对S-EL0时间戳的支持。

        为每个时间戳附加额外的有效负载信息,例如,会话。

        在OP-TEE操作系统核心中断上下文中的时间戳。

参考:Benchmark framework — OP-TEE documentation documentation

你可能感兴趣的:(TEE之安全,OPTEE,TEE,Benchmark,框架)