Page 350 - 《软件学报》2020年第9期
P. 350

赵姗  等:S-Bridge:性能非对称多核处理器下负载均衡代理机制                                               2971


         其中, Cap 表示 Core k 跟 Core j 之间的处理能力的比值,也就是 CPU 因子,C 是通过测试得到的系数因子; CPI                  i
                 k
                 j                                                                            B m
         表示 App i 与 App m 的 CPI_B 的比值,也就是任务因子.由于现有的异构多核处理器系统主要有两种类型的 CPU
         核(比如 big.LITTLE),本文选择在大核上运行的纯计算任务(CPI_B 为 1)作为参考,这种类型的任务的负载扩展
         因此假定为 1.

         3.3   实   现
             本研究在 ARM big.LITTLE 平台(Cubieboard4 CC-A80)运行的 Linux 内核 3.4 版本上对 S-Bridge 进行了实
         现.同时,为证明 S-Bridge 的通用性和可移植性,在 X86 平台(Intel Core™ i7-2600K)运行的 Linux 内核 3.13 版本
         也进行了实现.
             S-Bridge 提供一系列接口与调度器交互,在创建、调度或迁移线程的时候,通过 S-Bridge 架构性能收集器
         的接口进行线程性能数据的收集,基于可扩展负载均衡模型进行经验分析,并通过规则生成器生成的参数对线
         程的负载进行动态扩展,将线程分配到更加适合的核上运行.CPU 异构配置收集器提供接口获取或设置 CPU 核
         处理能力的值,由于平台大小核具有确定的微架构参数,本文对表示大小核之间处理能力差异的 CPU 因子提前
         测试并进行初始化.其中,较为核心的架构性能收集器部分主要功能通过以下回调函数进行实现.
             (1)  do_fork 和 do_exec:当线程被直接创建或者调用 exec(⋅)新建的时候,该函数为每个新建立的线程分配
                 并初始化相应的数据结构,比如用来保存架构性能数据的结构,在扩展因子矩阵中分配相应的项,并
                 将该线程的扩展因子的初始值设置为 1,这个值表示在做负载均衡的时候不会对线程的负载有任何
                 影响,还是保持原有的基础负载;
             (2)  do_migration:在负载均衡的时候,当线程被迁移时,线程的性能数据被实时地更新.该函数中,读取性
                 能数据的接口通过内核监控模块的加载进行初始化;
             (3)  do_statistic:基于历史的性能数据进行分析和预测.为了简化,这个函数在将来的工作中被定义和扩展;
             (4)  factor_gen:根据扩展负载的度量模型生成线程的扩展因子,并更新扩展因子矩阵相应线程的项.扩展
                 因子矩阵里主要包括产生缩放因子的基础上可扩展的负载度量模型和更新的缩放因子矩阵相应的
                 条目.每个条目的信息包括 CPU 核类型、任务名称、不同阶段的负载因子等信息.
             S-Bridge 为了做到独立和架构无关性,硬件性能数据的获取通过专门的内核监控模块来实现,用来访问和
         读取底层硬件性能事件计数器,在架构性能收集器的回调函数只是对全局读取函数的指针进行初始化,当内核
         模块加载的时候,会对函数指针进行赋值.在实现过程中,由于 ARM 平台的 PMU 性能事件支持尚未完备,需要在
         3.4 内核中增加对于特定硬件事件的支持,具体包括访存缺失数、分支预测错误数等.

         4    实   验

         4.1   实验目标与设置

             在本节中,由于 S-Bridge 最突出贡献是在不修改调度算法本身的前提下,协助异构多核处理器环境下没有
         异构支持的调度器进行快速适配和性能优化;同时,S-Bridge 是独立的架构无关的负载均衡代理层,具有方便的
         移植性,适用于不同的调度器,因此,实验拟分别在 ARM 和 X86 平台上对 S-Bridge 的有效性和通用性进行评估,
         实验对象是主流的调度器 CFS(没有异构感知)和 HMP(异构感知)算法.
             (1)  针对非异构感知的调度算法 S-Bridge 的有效性
             本文在 big.LITTLE 设计的 ARM 平台上,以目前 Linux 中主流的 CFS 调度算法为实例进行 S-Bridge 支持
         前后的对比实验.实验基于 UltraOcta A80 处理器的 ARM 平台,包括 Cortex-A15(指定为大核,缩写为 B)和 Cortex-
         A7(指定为小核,缩写为 S)两种类型的核,如第 2.2 节描述,两种核具有不同的微架构设计,分别适用于高性能和
         低功耗的场景,大小核的频率分别为 1.608G 和 0.72G.该平台运行的内核版本为 Linux kernel 3.4.
             (2) S-Bridge 方法的通用性
   345   346   347   348   349   350   351   352   353   354   355