Intel大小核技术调研
简介
2021年8月19日,Intel召开了一年一度的架构日活动,其中Alder Lake Soc是Intel首个采用混合架构的CPU产品,可以采用若干个性能核(P-core)Golden Cove和能效核(E-core)Grace Mont进行搭配,以适应不同的应用场景,如PC、服务器或者终端设备。
大小核结构在终端设备以ARM公司的big.LITTLE为主,已经十分流行,而Intel这次除了提出了混合架构的Alder Lake,也提出了一个全新的概念——Intel Thread Director,是我们今天关注的重点。
Intel Thread Director(简称ITD)是一个硬件微控制器,从硬件层面上想要帮助操作系统进行任务的调度和迁移,ITD可以监控每个核上的thread,查看其性能表现,获取其load/store、branch、访存等指令的比率和正在执行指令的类型等统计信息,可以为操作系统提供参考依据,比如一个P核上的任务不停的在循环等待,此时ITD可以为操作系统提供信息将其转移到E核上。
在任务调度中,有一个不可忽视的问题就是最开始thread会分配到哪一个核上面,Intel的回答是采用默认分配的策略,优先分配到P核上,然后再分配到E核上,在电量有限的场景比如电池供电,也可以优先分配到E核上。
除了任务调度,Intel宣称ITD也可以对频率进行优化,可以在微秒级别而不是毫秒级别对频率进行快速调节。
工作细节
在之后的HOT Chips上,Intel又给出了ITD的更多细节。
Intel将任务根据IPC在P核和E核上的比值,将任务分为了四类
- Class 3: Bottleneck is not in the compute, e.g. IO or busy loops that don’t scale
- Class 0: Most Applications
- Class 1: Workloads using AVX/AVX2 instructions
- Class 2: Workloads using AVX-VNNI instructions
可以看到ITD和OS根据EHFI表进行通信,ITD会周期性地写EHFI,而OS调度器可以根据该表为thread选取合适的核。根据Intel手册中提到,ITD为每个class每个core的信息,然后调度器根据该信息计算比值然后进行调度。
The table contains two types of guiding information: performance related guidance and energy efficiency related guidance. It is up to the OS to choose which of the two to refer to when scheduling software threads on logical processors. The table is dynamically updated by the hardware. A notification interrupt is delivered to the OS immediately after the table update.
When the OS Scheduler needs to decide which of two logical processors (i,j) to assign to which of two software threads whose Class IDs are k1 and k2, it can compute the two performance ratios: Perfijkx = Perfikx / Perfjkx, or two energy efficiency ratios: Energyijkx = Energyikx / Energyjkx between the two logical processors for each of the two classes, depending on whether the OS is scheduling for performance or for energy efficiency.
For example, assume that the system is scheduling for performance and that Perfijk1 > Perfijk2. The OS Scheduler will assign the software thread whose Class ID is k1 to logical processor i, and the one whose Class ID is k2 to logical processor j.
上面引文提到"whether the OS is scheduling for performance or for energy efficiency",那么如何知道thread需要perf还是power呢,可以根据优先级和是否后台运行来决定是放到大核还是小核上。比如有个background的任务,其目标是获得power efficiency,于是os调度器读取EHFI的值,选出Energy开销比较小的核。
在查询资料的过程中,我看到一个关于ITD是否可以“学习”的有意思的问题,资料上介绍ITD上运行着一个经过大量时间预先训练的算法,根据该算法对核上任务进行分析,但是不会根据任务的信息对算法进行自我更新,因此是不会学习的。如果算法分析不准确,操作系统直接忽视他的建议就好。
开发进度
Intel正在和微软紧密合作,希望可以将最新的feature利用到Windows11中,而Linux的开发仍在进行中。
总结和看法
在我看来,ITD又是计算机领域中一个为了加快速度将工作从软件转移到硬件去做的典范,但除了加快速度,由于ITD是硬件层面实现的,它掌握着更多的信息,相比于之前操作系统自己要计算workload来说对每个核上的负载有个更全面深刻的理解,比如可以根据指令类型判断任务是否是需要功耗的任务,一般AVX-VNNI或其他AVX2指令均为功耗开销比较大的指令,ITD可以根据正在执行指令的类型对任务进行刻画和分类等,我个人认为,倘若如Intel举的例子中说到的根据IPC进行分类,那么我觉得就发挥不出ITD的潜力了,因为对任务IPC的计算操作系统也可以很方便的实现。