Skip to content

Commit c60f6ff

Browse files
committed
add README and patches.plist
1 parent 01546fd commit c60f6ff

File tree

2 files changed

+225
-1
lines changed

2 files changed

+225
-1
lines changed

README.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,38 @@
11
# CpuTopologyRebuild
2+
A Lilu plugin that optimizes Alder Lake's heterogeneous core configuration.
23

3-
#### Credits
4+
For example, this kext is possible to recognize the Core i9-12900K's topology as 16 cores 24 threads or 8 cores 24 threads.
5+
6+
### Background
7+
OpenCore's `ProvideCurrentCpuInfo` quirk enables Alder Lake's both P-Cores and E-Cores, but all cores and threads are recognized as equivalent. This can cause potentially single thread or real world performance degradation.
8+
9+
This kext aims to improve performance by rebuild the topology for these cores and threads.
10+
11+
The effect of this kext is not yet clear, but I've seen not only a cosmetic effect, but also some performance improvements. For example, the Geekbench 5 score on the Windows VM have increased in the case of allocating a small number of cores to VMware Fusion.
12+
13+
### Usage
14+
* Use this kext with `ProvideCurrentCpuInfo` quirk.
15+
* `-ctrsmt` boot arg makes E-Cores to be recognized as the 3-way SMT logical threads of the P-Cores. For example, it is recognized as 8 cores 24 threads in Core i9. This option seems to give the closest performance to E-Cores disabled configuration.
16+
* When HT disabled, E-Cores are recognized as a logical thread of P-Cores with or without `-ctrsmt`.
17+
18+
### Topology examples
19+
|||ProvideCurrentCpuInfo|ProvideCurrentCpuInfo<br>+ CpuTopologyRebuild.kext|ProvideCurrentCpuInfo<br>+ CpuTopologyRebuild.kext<br>+ `-ctrsmt`|
20+
|-|:-|-:|-:|-:|
21+
|Core i9|8P+8E+HT|24c24t|16c24t|8c24t|
22+
| |8P+8E |16c16t| 8c16t|8c16t|
23+
|Core i7|8P+4E+HT|20c20t|12c20t|8c20t|
24+
| |8P+4E |12c12t| 8c12t|8c12t|
25+
|Core i5|6P+4E+HT|16c16t|10c16t|6c16t|
26+
| |6P+4E |10c10t| 6c10t|6c10t|
27+
28+
### About patches.plist
29+
patches.plist can be used instead of `ProvideCurrentCpuInfo` quirk. It is not needed normally, but ProvideCurrentCpuInfo doesn't work for High Sierra and earlier, so you can use this patch for older macOS.
30+
31+
### Current problems
32+
* Changing the number of cores in cpuid info causes instability such as random boot failing, so it has not been changed now. Therefore, the number of cores and threads changes can be seen only in limited situations such as a Geekbench result window.
33+
* For the same reason, RestrictEvents.kext's `revcpuname` does not work because the number of cores recognized by RestrictEvents.kext and About This Mac window are different.
34+
35+
### Credits
436
- [Apple](https://www.apple.com) for macOS
537
- [vit9696](https://github.com/vit9696) for original [CpuTopologySync](https://github.com/acidanthera/CpuTopologySync/tree/b2ce2619ea7e58ec4553ed3441aa03af6b771cdf)
638
- [b00t0x](https://github.com/b00t0x) for writing the software and maintaining it

patches.plist

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>Kernel</key>
6+
<dict>
7+
<key>Patch</key>
8+
<array>
9+
<dict>
10+
<key>Arch</key>
11+
<string>Any</string>
12+
<key>Base</key>
13+
<string>_cpuid_set_info</string>
14+
<key>Comment</key>
15+
<string>core/thread count = 24 for 8P+8E Core i9</string>
16+
<key>Count</key>
17+
<integer>2</integer>
18+
<key>Enabled</key>
19+
<false/>
20+
<key>Find</key>
21+
<data>uTUAAAAPMg==</data>
22+
<key>Identifier</key>
23+
<string>kernel</string>
24+
<key>Limit</key>
25+
<integer>0</integer>
26+
<key>Mask</key>
27+
<data></data>
28+
<key>MaxKernel</key>
29+
<string></string>
30+
<key>MinKernel</key>
31+
<string></string>
32+
<key>Replace</key>
33+
<data>uBgAGAAx0g==</data>
34+
<key>ReplaceMask</key>
35+
<data></data>
36+
<key>Skip</key>
37+
<integer>0</integer>
38+
</dict>
39+
<dict>
40+
<key>Arch</key>
41+
<string>Any</string>
42+
<key>Base</key>
43+
<string>_cpuid_set_info</string>
44+
<key>Comment</key>
45+
<string>core/thread count = 20 for 8P+4E Core i7</string>
46+
<key>Count</key>
47+
<integer>2</integer>
48+
<key>Enabled</key>
49+
<false/>
50+
<key>Find</key>
51+
<data>uTUAAAAPMg==</data>
52+
<key>Identifier</key>
53+
<string>kernel</string>
54+
<key>Limit</key>
55+
<integer>0</integer>
56+
<key>Mask</key>
57+
<data></data>
58+
<key>MaxKernel</key>
59+
<string></string>
60+
<key>MinKernel</key>
61+
<string></string>
62+
<key>Replace</key>
63+
<data>uBQAFAAx0g==</data>
64+
<key>ReplaceMask</key>
65+
<data></data>
66+
<key>Skip</key>
67+
<integer>0</integer>
68+
</dict>
69+
<dict>
70+
<key>Arch</key>
71+
<string>Any</string>
72+
<key>Base</key>
73+
<string>_cpuid_set_info</string>
74+
<key>Comment</key>
75+
<string>core/thread count = 16 for 6P+4E Core i5-12600K</string>
76+
<key>Count</key>
77+
<integer>2</integer>
78+
<key>Enabled</key>
79+
<false/>
80+
<key>Find</key>
81+
<data>uTUAAAAPMg==</data>
82+
<key>Identifier</key>
83+
<string>kernel</string>
84+
<key>Limit</key>
85+
<integer>0</integer>
86+
<key>Mask</key>
87+
<data></data>
88+
<key>MaxKernel</key>
89+
<string></string>
90+
<key>MinKernel</key>
91+
<string></string>
92+
<key>Replace</key>
93+
<data>uBAAEAAx0g==</data>
94+
<key>ReplaceMask</key>
95+
<data></data>
96+
<key>Skip</key>
97+
<integer>0</integer>
98+
</dict>
99+
<dict>
100+
<key>Arch</key>
101+
<string>Any</string>
102+
<key>Base</key>
103+
<string></string>
104+
<key>Comment</key>
105+
<string>cores_per_package = 128 for Big Sur or later</string>
106+
<key>Count</key>
107+
<integer>1</integer>
108+
<key>Enabled</key>
109+
<true/>
110+
<key>Find</key>
111+
<data>wegag8ABiQ==</data>
112+
<key>Identifier</key>
113+
<string>kernel</string>
114+
<key>Limit</key>
115+
<integer>0</integer>
116+
<key>Mask</key>
117+
<data>//3///3//w==</data>
118+
<key>MaxKernel</key>
119+
<string></string>
120+
<key>MinKernel</key>
121+
<string>20.0.0</string>
122+
<key>Replace</key>
123+
<data>wegakLCAiQ==</data>
124+
<key>ReplaceMask</key>
125+
<data>//3///3//w==</data>
126+
<key>Skip</key>
127+
<integer>0</integer>
128+
</dict>
129+
<dict>
130+
<key>Arch</key>
131+
<string>Any</string>
132+
<key>Base</key>
133+
<string></string>
134+
<key>Comment</key>
135+
<string>cores_per_package = 128 for Catalina or earlier 1</string>
136+
<key>Count</key>
137+
<integer>1</integer>
138+
<key>Enabled</key>
139+
<true/>
140+
<key>Find</key>
141+
<data>weoa/8KJ</data>
142+
<key>Identifier</key>
143+
<string>kernel</string>
144+
<key>Limit</key>
145+
<integer>0</integer>
146+
<key>Mask</key>
147+
<data></data>
148+
<key>MaxKernel</key>
149+
<string>19.99.99</string>
150+
<key>MinKernel</key>
151+
<string></string>
152+
<key>Replace</key>
153+
<data>uoAAAACJ</data>
154+
<key>ReplaceMask</key>
155+
<data></data>
156+
<key>Skip</key>
157+
<integer>0</integer>
158+
</dict>
159+
<dict>
160+
<key>Arch</key>
161+
<string>Any</string>
162+
<key>Base</key>
163+
<string></string>
164+
<key>Comment</key>
165+
<string>cores_per_package = 128 for Catalina or earlier 2</string>
166+
<key>Count</key>
167+
<integer>1</integer>
168+
<key>Enabled</key>
169+
<true/>
170+
<key>Find</key>
171+
<data>wega/8CJ</data>
172+
<key>Identifier</key>
173+
<string>kernel</string>
174+
<key>Limit</key>
175+
<integer>0</integer>
176+
<key>Mask</key>
177+
<data></data>
178+
<key>MaxKernel</key>
179+
<string>19.99.99</string>
180+
<key>MinKernel</key>
181+
<string></string>
182+
<key>Replace</key>
183+
<data>uIAAAACJ</data>
184+
<key>ReplaceMask</key>
185+
<data></data>
186+
<key>Skip</key>
187+
<integer>0</integer>
188+
</dict>
189+
</array>
190+
</dict>
191+
</dict>
192+
</plist>

0 commit comments

Comments
 (0)