12代已经发售快一年了,据我所知绝大多数的调度问题都发生在win10,但解决方案并不是简单地一句“换win11”,因为也有不少人换了win11后问题照旧的。我现在来讲一下为什么win10最容易出问题,以及为了最大化大小核的使用,一定要换win11的最新版本的缘由。
在我之前的帖子已经粗略介绍过intelthread director的基本原理,现在我把完整的调度逻辑展示一下:
1、系统检查线程的“优先级”,高优先级的线程进一步检查关于这个线程的性能的那张表,低优先级的线程则检查关于能效的那张表。
2、如果是检查性能,在完整的硬件调度下,会进一步检查这个线程属于哪一个class,使用了高级指令(如avx,vnni)的线程属于class1和class2,ipc加速比高的线程也属于这两个class,具体两个class之间的区别我暂时还没搞清楚,不过不影响理解,这些线程将由硬件显性地指向大核。如果线程中有很多时间空转和等待,比如io密集型线程和处于同步等待的线程,那么属于class3,硬件会显性地指向小核。Class0线程是硬件无法给出大小核迁移决策的线程,这一类线程将由系统按照“默认设置”进行调度。显然,默认设置可以设置为默认大核或者默认小核,这是系统层面可以决定也是可以修改的。
3、如果是检查能效,那么在前面2的基础上,还会再综合功耗数据,算出能效值,然后将线程发到能效最高的核心,这个有可能是大核也有可能是小核,但基本上小核居多,因为在某些情况下可能大核的频率更低,小核频率更高,反而大核的能效高。
Win10最大的问题就是cpu驱动中没有关于线程class分级的逻辑,这就导致intel thread director最重要的调度逻辑部分没法起作用,只有关于核心自身的性能和能效的那张表可以用,也就是说,在win10硬件基本不参与调度,几乎是系统自身的调度逻辑在起作用,所以调度逻辑很粗不够动态,出错的可能性也很大,更不用说充分利用大小核架构了。
但win11自身也并不是就没有问题,除了前面的调度逻辑外,系统自身还有一套调度逻辑可以覆盖硬件调度,而由于不同的厂商的设置不同,可能就会出问题。我自己修改的调度文件就是将系统层面的调度逻辑删除,让硬件调度充分发挥,只保留了耗时线程调度大核的逻辑,所以我这套最新的调度文件搭配win11的21h2版本已经是比较完美的了,对一些小bug的修理一直在进行中。既然微软intel不优化那我就自己来,最新版本调度文件提供
https://pan.baidu.com/s/1WvQ3bm8rnN3SsDFa8BuUFw?pwd=qmgg
在我之前的帖子已经粗略介绍过intelthread director的基本原理,现在我把完整的调度逻辑展示一下:
1、系统检查线程的“优先级”,高优先级的线程进一步检查关于这个线程的性能的那张表,低优先级的线程则检查关于能效的那张表。
2、如果是检查性能,在完整的硬件调度下,会进一步检查这个线程属于哪一个class,使用了高级指令(如avx,vnni)的线程属于class1和class2,ipc加速比高的线程也属于这两个class,具体两个class之间的区别我暂时还没搞清楚,不过不影响理解,这些线程将由硬件显性地指向大核。如果线程中有很多时间空转和等待,比如io密集型线程和处于同步等待的线程,那么属于class3,硬件会显性地指向小核。Class0线程是硬件无法给出大小核迁移决策的线程,这一类线程将由系统按照“默认设置”进行调度。显然,默认设置可以设置为默认大核或者默认小核,这是系统层面可以决定也是可以修改的。
3、如果是检查能效,那么在前面2的基础上,还会再综合功耗数据,算出能效值,然后将线程发到能效最高的核心,这个有可能是大核也有可能是小核,但基本上小核居多,因为在某些情况下可能大核的频率更低,小核频率更高,反而大核的能效高。
Win10最大的问题就是cpu驱动中没有关于线程class分级的逻辑,这就导致intel thread director最重要的调度逻辑部分没法起作用,只有关于核心自身的性能和能效的那张表可以用,也就是说,在win10硬件基本不参与调度,几乎是系统自身的调度逻辑在起作用,所以调度逻辑很粗不够动态,出错的可能性也很大,更不用说充分利用大小核架构了。
但win11自身也并不是就没有问题,除了前面的调度逻辑外,系统自身还有一套调度逻辑可以覆盖硬件调度,而由于不同的厂商的设置不同,可能就会出问题。我自己修改的调度文件就是将系统层面的调度逻辑删除,让硬件调度充分发挥,只保留了耗时线程调度大核的逻辑,所以我这套最新的调度文件搭配win11的21h2版本已经是比较完美的了,对一些小bug的修理一直在进行中。既然微软intel不优化那我就自己来,最新版本调度文件提供
https://pan.baidu.com/s/1WvQ3bm8rnN3SsDFa8BuUFw?pwd=qmgg