1use crate::types::VMBrand;
5
6const LEAF_CACHE_SIZE: usize = 64;
9
10use std::sync::Mutex;
11static LEAF_CACHE: Mutex<[(u32, bool); LEAF_CACHE_SIZE]> =
12 Mutex::new([(u32::MAX, false); LEAF_CACHE_SIZE]);
13static LEAF_CACHE_IDX: Mutex<usize> = Mutex::new(0);
14
15#[derive(Debug, Clone, Copy, Default)]
17pub struct CpuidResult {
18 pub eax: u32,
19 pub ebx: u32,
20 pub ecx: u32,
21 pub edx: u32,
22}
23
24#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
26pub fn cpuid(leaf: u32, subleaf: u32) -> CpuidResult {
27 let r = raw_cpuid::native_cpuid::cpuid_count(leaf, subleaf);
28 CpuidResult {
29 eax: r.eax,
30 ebx: r.ebx,
31 ecx: r.ecx,
32 edx: r.edx,
33 }
34}
35
36#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))]
37pub fn cpuid(_leaf: u32, _subleaf: u32) -> CpuidResult {
38 CpuidResult::default()
39}
40
41pub fn is_leaf_supported(leaf: u32) -> bool {
43 {
45 let cache = LEAF_CACHE.lock().unwrap();
46 for &(l, v) in cache.iter() {
47 if l == leaf {
48 return v;
49 }
50 }
51 }
52
53 let max_leaf = if leaf >= 0x8000_0000 {
55 cpuid(0x8000_0000, 0).eax
56 } else if leaf >= 0x4000_0000 {
57 cpuid(0x4000_0000, 0).eax
58 } else {
59 cpuid(0, 0).eax
60 };
61
62 let result = leaf <= max_leaf;
63
64 let mut cache = LEAF_CACHE.lock().unwrap();
66 let mut idx = LEAF_CACHE_IDX.lock().unwrap();
67 cache[*idx % LEAF_CACHE_SIZE] = (leaf, result);
68 *idx = idx.wrapping_add(1);
69
70 result
71}
72
73pub fn is_intel() -> bool {
75 let r = cpuid(0, 0);
76 r.ebx == 0x756e_6547 && r.edx == 0x4965_6e69 && r.ecx == 0x6c65_746e
78}
79
80pub fn is_amd() -> bool {
82 let r = cpuid(0, 0);
83 r.ebx == 0x6874_7541 && r.edx == 0x6974_6e65 && r.ecx == 0x444d_4163
85}
86
87pub fn vendor_string(ebx: u32, ecx: u32, edx: u32) -> String {
89 let mut bytes = [0u8; 12];
90 bytes[0..4].copy_from_slice(&ebx.to_le_bytes());
91 bytes[4..8].copy_from_slice(&edx.to_le_bytes());
92 bytes[8..12].copy_from_slice(&ecx.to_le_bytes());
93 String::from_utf8_lossy(&bytes).to_string()
94}
95
96pub fn cpu_brand_string() -> String {
98 if !is_leaf_supported(0x8000_0004) {
99 return String::new();
100 }
101 let mut brand = [0u8; 48];
102 for (i, leaf) in (0x8000_0002u32..=0x8000_0004).enumerate() {
103 let r = cpuid(leaf, 0);
104 let off = i * 16;
105 brand[off..off + 4].copy_from_slice(&r.eax.to_le_bytes());
106 brand[off + 4..off + 8].copy_from_slice(&r.ebx.to_le_bytes());
107 brand[off + 8..off + 12].copy_from_slice(&r.ecx.to_le_bytes());
108 brand[off + 12..off + 16].copy_from_slice(&r.edx.to_le_bytes());
109 }
110 let s = String::from_utf8_lossy(&brand);
111 s.trim_end_matches('\0').trim().to_string()
112}
113
114#[derive(Debug, Clone, Copy, Default)]
116pub struct CpuStepping {
117 pub model: u32,
118 pub family: u32,
119 pub extmodel: u32,
120}
121
122pub fn fetch_steppings() -> CpuStepping {
124 let eax = cpuid(1, 0).eax;
125 let model = (eax >> 4) & 0xf;
126 let family = (eax >> 8) & 0xf;
127 let extmodel = (eax >> 16) & 0xf;
128 CpuStepping { model, family, extmodel }
129}
130
131pub fn is_celeron(brand: &str) -> bool {
133 brand.contains("Celeron")
134}
135
136pub fn vmid_template(leaf: u32) -> (bool, VMBrand) {
140 if !is_leaf_supported(leaf) {
141 return (false, VMBrand::Invalid);
142 }
143 let r = cpuid(leaf, 0);
144 let v = vendor_string(r.ebx, r.ecx, r.edx);
145
146 static TABLE: &[(&str, VMBrand)] = &[
148 ("KVMKVMKVM", VMBrand::KVM),
149 ("Microsoft Hv", VMBrand::HyperV),
150 ("VMwareVMware", VMBrand::VMware),
151 ("XenVMMXenVMM", VMBrand::Xen),
152 ("prl hyperv", VMBrand::Parallels),
153 ("prl hv", VMBrand::Parallels),
154 ("VBoxVBoxVBox", VMBrand::VBox),
155 (" lrpepyh vr", VMBrand::Parallels), ("bhyve bhyve", VMBrand::Bhyve),
157 ("ACRNACRNACRN", VMBrand::ACRN),
158 ("QNXQVMBSQG", VMBrand::QNX),
159 ("GenuineIntel", VMBrand::Invalid), ("AuthenticAMD", VMBrand::Invalid),
161 ("HygonGenuine", VMBrand::Invalid),
162 (" KVMH", VMBrand::KVMHyperV),
163 ("QEMU", VMBrand::QEMU),
164 ("Jailhouse", VMBrand::Jailhouse),
165 ("Apple VZ", VMBrand::AppleVZ),
166 ("UnisysSpar64", VMBrand::Unisys),
167 ("LMHS", VMBrand::LMHS),
168 ("NoirVisor", VMBrand::NoirVisor),
169 ("SimpleVisor", VMBrand::SimpleVisor),
170 ("Barevisor", VMBrand::Barevisor),
171 ("HyperPlatform", VMBrand::HyperPlatform),
172 ("MiniVisor", VMBrand::MiniVisor),
173 ("DBVM", VMBrand::DBVM),
174 ("Intel TDX", VMBrand::IntelTDX),
175 ("VirtualApple", VMBrand::UTM),
176 ];
177
178 for &(sig, brand) in TABLE {
179 if v.contains(sig) {
180 if brand == VMBrand::Invalid {
181 return (false, VMBrand::Invalid);
182 }
183 return (true, brand);
184 }
185 }
186
187 if leaf == 0x4000_0001 {
189 let eax = r.eax;
190 if eax == 0x4d_494b54 {
191 return (true, VMBrand::IntelKGT);
193 }
194 }
195
196 (false, VMBrand::Invalid)
197}
198
199pub struct CpuEntry {
202 pub model: &'static str,
203 pub threads: u32,
204}
205
206pub static INTEL_CORE_DB: &[CpuEntry] = &[
208 CpuEntry { model: "i3-1000G1", threads: 4 },
209 CpuEntry { model: "i3-1000G4", threads: 4 },
210 CpuEntry { model: "i3-10100", threads: 8 },
211 CpuEntry { model: "i3-10100E", threads: 8 },
212 CpuEntry { model: "i3-10100F", threads: 8 },
213 CpuEntry { model: "i3-10100T", threads: 8 },
214 CpuEntry { model: "i3-10100TE", threads: 8 },
215 CpuEntry { model: "i3-10105", threads: 8 },
216 CpuEntry { model: "i3-10105F", threads: 8 },
217 CpuEntry { model: "i3-10105T", threads: 8 },
218 CpuEntry { model: "i3-10110U", threads: 4 },
219 CpuEntry { model: "i3-10110Y", threads: 4 },
220 CpuEntry { model: "i3-10300", threads: 8 },
221 CpuEntry { model: "i3-10300T", threads: 8 },
222 CpuEntry { model: "i3-10305", threads: 8 },
223 CpuEntry { model: "i3-10305T", threads: 8 },
224 CpuEntry { model: "i3-10320", threads: 8 },
225 CpuEntry { model: "i3-10325", threads: 8 },
226 CpuEntry { model: "i3-1110G4", threads: 4 },
227 CpuEntry { model: "i3-1115G4E", threads: 4 },
228 CpuEntry { model: "i3-1115GRE", threads: 4 },
229 CpuEntry { model: "i3-1115G4", threads: 4 },
230 CpuEntry { model: "i3-1120G4", threads: 8 },
231 CpuEntry { model: "i3-1125G4", threads: 8 },
232 CpuEntry { model: "i3-12100", threads: 8 },
233 CpuEntry { model: "i3-12100F", threads: 8 },
234 CpuEntry { model: "i3-12100T", threads: 8 },
235 CpuEntry { model: "i3-12300", threads: 8 },
236 CpuEntry { model: "i3-12300T", threads: 8 },
237 CpuEntry { model: "i3-1210U", threads: 8 },
238 CpuEntry { model: "i3-1215U", threads: 8 },
239 CpuEntry { model: "i3-1215UE", threads: 8 },
240 CpuEntry { model: "i3-1215UL", threads: 8 },
241 CpuEntry { model: "i3-1220P", threads: 12 },
242 CpuEntry { model: "i3-13100", threads: 8 },
243 CpuEntry { model: "i3-13100F", threads: 8 },
244 CpuEntry { model: "i3-13100T", threads: 8 },
245 CpuEntry { model: "i3-1315U", threads: 8 },
246 CpuEntry { model: "i3-1315UE", threads: 8 },
247 CpuEntry { model: "i3-14100", threads: 8 },
248 CpuEntry { model: "i3-14100F", threads: 8 },
249 CpuEntry { model: "i3-14100T", threads: 8 },
250 CpuEntry { model: "i5-10200H", threads: 8 },
251 CpuEntry { model: "i5-10210U", threads: 8 },
252 CpuEntry { model: "i5-10210Y", threads: 8 },
253 CpuEntry { model: "i5-10300H", threads: 8 },
254 CpuEntry { model: "i5-10310U", threads: 8 },
255 CpuEntry { model: "i5-10400", threads: 12 },
256 CpuEntry { model: "i5-10400F", threads: 12 },
257 CpuEntry { model: "i5-10400H", threads: 8 },
258 CpuEntry { model: "i5-10400T", threads: 12 },
259 CpuEntry { model: "i5-10500", threads: 12 },
260 CpuEntry { model: "i5-10500H", threads: 12 },
261 CpuEntry { model: "i5-10500T", threads: 12 },
262 CpuEntry { model: "i5-10500TE", threads: 12 },
263 CpuEntry { model: "i5-10505", threads: 12 },
264 CpuEntry { model: "i5-10600", threads: 12 },
265 CpuEntry { model: "i5-10600K", threads: 12 },
266 CpuEntry { model: "i5-10600KF", threads: 12 },
267 CpuEntry { model: "i5-10600T", threads: 12 },
268 CpuEntry { model: "i5-1030G4", threads: 8 },
269 CpuEntry { model: "i5-1030G7", threads: 8 },
270 CpuEntry { model: "i5-1035G1", threads: 8 },
271 CpuEntry { model: "i5-1035G4", threads: 8 },
272 CpuEntry { model: "i5-1035G7", threads: 8 },
273 CpuEntry { model: "i5-1130G7", threads: 8 },
274 CpuEntry { model: "i5-1135G7", threads: 8 },
275 CpuEntry { model: "i5-11260H", threads: 12 },
276 CpuEntry { model: "i5-11300H", threads: 8 },
277 CpuEntry { model: "i5-11320H", threads: 8 },
278 CpuEntry { model: "i5-11400", threads: 12 },
279 CpuEntry { model: "i5-11400F", threads: 12 },
280 CpuEntry { model: "i5-11400H", threads: 12 },
281 CpuEntry { model: "i5-11400T", threads: 12 },
282 CpuEntry { model: "i5-11500", threads: 12 },
283 CpuEntry { model: "i5-11500H", threads: 12 },
284 CpuEntry { model: "i5-11500T", threads: 12 },
285 CpuEntry { model: "i5-11600", threads: 12 },
286 CpuEntry { model: "i5-11600K", threads: 12 },
287 CpuEntry { model: "i5-11600KF", threads: 12 },
288 CpuEntry { model: "i5-11600T", threads: 12 },
289 CpuEntry { model: "i5-1230U", threads: 12 },
290 CpuEntry { model: "i5-1235U", threads: 12 },
291 CpuEntry { model: "i5-1235UL", threads: 12 },
292 CpuEntry { model: "i5-12400", threads: 12 },
293 CpuEntry { model: "i5-12400F", threads: 12 },
294 CpuEntry { model: "i5-12400T", threads: 12 },
295 CpuEntry { model: "i5-12450H", threads: 12 },
296 CpuEntry { model: "i5-12450HX", threads: 12 },
297 CpuEntry { model: "i5-12500", threads: 12 },
298 CpuEntry { model: "i5-12500H", threads: 16 },
299 CpuEntry { model: "i5-12500T", threads: 12 },
300 CpuEntry { model: "i5-12600", threads: 12 },
301 CpuEntry { model: "i5-12600H", threads: 16 },
302 CpuEntry { model: "i5-12600HX", threads: 16 },
303 CpuEntry { model: "i5-12600K", threads: 16 },
304 CpuEntry { model: "i5-12600KF", threads: 16 },
305 CpuEntry { model: "i5-12600T", threads: 12 },
306 CpuEntry { model: "i5-1240P", threads: 16 },
307 CpuEntry { model: "i5-1240U", threads: 12 },
308 CpuEntry { model: "i5-1245U", threads: 12 },
309 CpuEntry { model: "i5-1245UE", threads: 12 },
310 CpuEntry { model: "i5-1250P", threads: 16 },
311 CpuEntry { model: "i5-1250PE", threads: 16 },
312 CpuEntry { model: "i5-13400", threads: 16 },
313 CpuEntry { model: "i5-13400F", threads: 16 },
314 CpuEntry { model: "i5-13400T", threads: 16 },
315 CpuEntry { model: "i5-13450HX", threads: 16 },
316 CpuEntry { model: "i5-13490F", threads: 16 },
317 CpuEntry { model: "i5-13500", threads: 20 },
318 CpuEntry { model: "i5-13500H", threads: 16 },
319 CpuEntry { model: "i5-13500HX", threads: 16 },
320 CpuEntry { model: "i5-13500T", threads: 20 },
321 CpuEntry { model: "i5-13600", threads: 20 },
322 CpuEntry { model: "i5-13600H", threads: 16 },
323 CpuEntry { model: "i5-13600HX", threads: 20 },
324 CpuEntry { model: "i5-13600K", threads: 20 },
325 CpuEntry { model: "i5-13600KF", threads: 20 },
326 CpuEntry { model: "i5-13600T", threads: 20 },
327 CpuEntry { model: "i5-1340P", threads: 16 },
328 CpuEntry { model: "i5-1345U", threads: 12 },
329 CpuEntry { model: "i5-1345UE", threads: 12 },
330 CpuEntry { model: "i5-14400", threads: 16 },
331 CpuEntry { model: "i5-14400F", threads: 16 },
332 CpuEntry { model: "i5-14400T", threads: 16 },
333 CpuEntry { model: "i5-14500", threads: 20 },
334 CpuEntry { model: "i5-14500HX", threads: 20 },
335 CpuEntry { model: "i5-14500T", threads: 20 },
336 CpuEntry { model: "i5-14600", threads: 20 },
337 CpuEntry { model: "i5-14600K", threads: 20 },
338 CpuEntry { model: "i5-14600KF", threads: 20 },
339 CpuEntry { model: "i5-14600T", threads: 20 },
340 CpuEntry { model: "i7-10510U", threads: 8 },
341 CpuEntry { model: "i7-10510Y", threads: 8 },
342 CpuEntry { model: "i7-10700", threads: 16 },
343 CpuEntry { model: "i7-10700E", threads: 16 },
344 CpuEntry { model: "i7-10700F", threads: 16 },
345 CpuEntry { model: "i7-10700K", threads: 16 },
346 CpuEntry { model: "i7-10700KF", threads: 16 },
347 CpuEntry { model: "i7-10700T", threads: 16 },
348 CpuEntry { model: "i7-10700TE", threads: 16 },
349 CpuEntry { model: "i7-10710U", threads: 12 },
350 CpuEntry { model: "i7-10750H", threads: 12 },
351 CpuEntry { model: "i7-10810U", threads: 12 },
352 CpuEntry { model: "i7-10850H", threads: 12 },
353 CpuEntry { model: "i7-10870H", threads: 16 },
354 CpuEntry { model: "i7-10875H", threads: 16 },
355 CpuEntry { model: "i7-1060G7", threads: 8 },
356 CpuEntry { model: "i7-1060NG7", threads: 8 },
357 CpuEntry { model: "i7-1065G7", threads: 8 },
358 CpuEntry { model: "i7-1068G7", threads: 8 },
359 CpuEntry { model: "i7-1068NG7", threads: 8 },
360 CpuEntry { model: "i7-1160G7", threads: 8 },
361 CpuEntry { model: "i7-1165G7", threads: 8 },
362 CpuEntry { model: "i7-11370H", threads: 8 },
363 CpuEntry { model: "i7-11375H", threads: 8 },
364 CpuEntry { model: "i7-11390H", threads: 8 },
365 CpuEntry { model: "i7-11600H", threads: 12 },
366 CpuEntry { model: "i7-1180G7", threads: 8 },
367 CpuEntry { model: "i7-11800H", threads: 16 },
368 CpuEntry { model: "i7-11850H", threads: 16 },
369 CpuEntry { model: "i7-11850HE", threads: 16 },
370 CpuEntry { model: "i7-1185G7", threads: 8 },
371 CpuEntry { model: "i7-1185G7E", threads: 8 },
372 CpuEntry { model: "i7-1185GRE", threads: 8 },
373 CpuEntry { model: "i7-11700", threads: 16 },
374 CpuEntry { model: "i7-11700F", threads: 16 },
375 CpuEntry { model: "i7-11700K", threads: 16 },
376 CpuEntry { model: "i7-11700KF", threads: 16 },
377 CpuEntry { model: "i7-11700T", threads: 16 },
378 CpuEntry { model: "i7-1260P", threads: 16 },
379 CpuEntry { model: "i7-1260U", threads: 12 },
380 CpuEntry { model: "i7-1265U", threads: 12 },
381 CpuEntry { model: "i7-1265UE", threads: 12 },
382 CpuEntry { model: "i7-12650H", threads: 16 },
383 CpuEntry { model: "i7-12700", threads: 20 },
384 CpuEntry { model: "i7-12700F", threads: 20 },
385 CpuEntry { model: "i7-12700H", threads: 20 },
386 CpuEntry { model: "i7-12700K", threads: 20 },
387 CpuEntry { model: "i7-12700KF", threads: 20 },
388 CpuEntry { model: "i7-12700T", threads: 20 },
389 CpuEntry { model: "i7-12800H", threads: 20 },
390 CpuEntry { model: "i7-12800HE", threads: 20 },
391 CpuEntry { model: "i7-12800HX", threads: 24 },
392 CpuEntry { model: "i7-12850HX", threads: 24 },
393 CpuEntry { model: "i7-1280P", threads: 20 },
394 CpuEntry { model: "i7-13620H", threads: 16 },
395 CpuEntry { model: "i7-13650HX", threads: 20 },
396 CpuEntry { model: "i7-13700", threads: 24 },
397 CpuEntry { model: "i7-13700F", threads: 24 },
398 CpuEntry { model: "i7-13700H", threads: 20 },
399 CpuEntry { model: "i7-13700HX", threads: 24 },
400 CpuEntry { model: "i7-13700K", threads: 24 },
401 CpuEntry { model: "i7-13700KF", threads: 24 },
402 CpuEntry { model: "i7-13700T", threads: 24 },
403 CpuEntry { model: "i7-1360P", threads: 16 },
404 CpuEntry { model: "i7-1365U", threads: 12 },
405 CpuEntry { model: "i7-1365UE", threads: 12 },
406 CpuEntry { model: "i7-14700", threads: 28 },
407 CpuEntry { model: "i7-14700F", threads: 28 },
408 CpuEntry { model: "i7-14700HX", threads: 28 },
409 CpuEntry { model: "i7-14700K", threads: 28 },
410 CpuEntry { model: "i7-14700KF", threads: 28 },
411 CpuEntry { model: "i7-14700T", threads: 28 },
412 CpuEntry { model: "i9-10850K", threads: 20 },
413 CpuEntry { model: "i9-10900", threads: 20 },
414 CpuEntry { model: "i9-10900E", threads: 20 },
415 CpuEntry { model: "i9-10900F", threads: 20 },
416 CpuEntry { model: "i9-10900K", threads: 20 },
417 CpuEntry { model: "i9-10900KF", threads: 20 },
418 CpuEntry { model: "i9-10900T", threads: 20 },
419 CpuEntry { model: "i9-10900TE", threads: 20 },
420 CpuEntry { model: "i9-10900X", threads: 20 },
421 CpuEntry { model: "i9-10940X", threads: 28 },
422 CpuEntry { model: "i9-10980HK", threads: 16 },
423 CpuEntry { model: "i9-10980XE", threads: 36 },
424 CpuEntry { model: "i9-11900", threads: 16 },
425 CpuEntry { model: "i9-11900F", threads: 16 },
426 CpuEntry { model: "i9-11900H", threads: 16 },
427 CpuEntry { model: "i9-11900K", threads: 16 },
428 CpuEntry { model: "i9-11900KB", threads: 16 },
429 CpuEntry { model: "i9-11900KF", threads: 16 },
430 CpuEntry { model: "i9-11900T", threads: 16 },
431 CpuEntry { model: "i9-11950H", threads: 16 },
432 CpuEntry { model: "i9-11980HK", threads: 16 },
433 CpuEntry { model: "i9-12900", threads: 24 },
434 CpuEntry { model: "i9-12900F", threads: 24 },
435 CpuEntry { model: "i9-12900H", threads: 20 },
436 CpuEntry { model: "i9-12900HK", threads: 20 },
437 CpuEntry { model: "i9-12900HX", threads: 32 },
438 CpuEntry { model: "i9-12900K", threads: 24 },
439 CpuEntry { model: "i9-12900KF", threads: 24 },
440 CpuEntry { model: "i9-12900KS", threads: 24 },
441 CpuEntry { model: "i9-12900T", threads: 24 },
442 CpuEntry { model: "i9-13900", threads: 32 },
443 CpuEntry { model: "i9-13900E", threads: 32 },
444 CpuEntry { model: "i9-13900F", threads: 32 },
445 CpuEntry { model: "i9-13900H", threads: 20 },
446 CpuEntry { model: "i9-13900HK", threads: 20 },
447 CpuEntry { model: "i9-13900HX", threads: 32 },
448 CpuEntry { model: "i9-13900K", threads: 32 },
449 CpuEntry { model: "i9-13900KF", threads: 32 },
450 CpuEntry { model: "i9-13900KS", threads: 32 },
451 CpuEntry { model: "i9-13900T", threads: 32 },
452 CpuEntry { model: "i9-13900TE", threads: 32 },
453 CpuEntry { model: "i9-13950HX", threads: 32 },
454 CpuEntry { model: "i9-13980HX", threads: 32 },
455 CpuEntry { model: "i9-14900", threads: 32 },
456 CpuEntry { model: "i9-14900F", threads: 32 },
457 CpuEntry { model: "i9-14900HX", threads: 32 },
458 CpuEntry { model: "i9-14900K", threads: 32 },
459 CpuEntry { model: "i9-14900KF", threads: 32 },
460 CpuEntry { model: "i9-14900KS", threads: 32 },
461 CpuEntry { model: "i9-14900T", threads: 32 },
462];
463
464pub static INTEL_XEON_DB: &[CpuEntry] = &[
466 CpuEntry { model: "Xeon D-1513N", threads: 10 },
467 CpuEntry { model: "Xeon D-1523N", threads: 8 },
468 CpuEntry { model: "Xeon D-1533N", threads: 10 },
469 CpuEntry { model: "Xeon D-1543N", threads: 16 },
470 CpuEntry { model: "Xeon D-1553N", threads: 16 },
471 CpuEntry { model: "Xeon D-2123IT", threads: 8 },
472 CpuEntry { model: "Xeon D-2141I", threads: 16 },
473 CpuEntry { model: "Xeon D-2143IT", threads: 16 },
474 CpuEntry { model: "Xeon D-2145NT", threads: 16 },
475 CpuEntry { model: "Xeon D-2146NT", threads: 16 },
476 CpuEntry { model: "Xeon D-2161I", threads: 24 },
477 CpuEntry { model: "Xeon D-2163IT", threads: 24 },
478 CpuEntry { model: "Xeon D-2166NT", threads: 24 },
479 CpuEntry { model: "Xeon D-2173IT", threads: 28 },
480 CpuEntry { model: "Xeon D-2177NT", threads: 28 },
481 CpuEntry { model: "Xeon D-2183IT", threads: 32 },
482 CpuEntry { model: "Xeon D-2187NT", threads: 32 },
483 CpuEntry { model: "Xeon E-2224", threads: 4 },
484 CpuEntry { model: "Xeon E-2224G", threads: 4 },
485 CpuEntry { model: "Xeon E-2226G", threads: 6 },
486 CpuEntry { model: "Xeon E-2226GE", threads: 6 },
487 CpuEntry { model: "Xeon E-2234", threads: 8 },
488 CpuEntry { model: "Xeon E-2236", threads: 12 },
489 CpuEntry { model: "Xeon E-2244G", threads: 8 },
490 CpuEntry { model: "Xeon E-2246G", threads: 12 },
491 CpuEntry { model: "Xeon E-2254ME", threads: 8 },
492 CpuEntry { model: "Xeon E-2254ML", threads: 8 },
493 CpuEntry { model: "Xeon E-2256G", threads: 12 },
494 CpuEntry { model: "Xeon E-2274G", threads: 8 },
495 CpuEntry { model: "Xeon E-2276G", threads: 12 },
496 CpuEntry { model: "Xeon E-2276ME", threads: 12 },
497 CpuEntry { model: "Xeon E-2276ML", threads: 12 },
498 CpuEntry { model: "Xeon E-2278G", threads: 16 },
499 CpuEntry { model: "Xeon E-2278GE", threads: 16 },
500 CpuEntry { model: "Xeon E-2278GEL", threads: 16},
501 CpuEntry { model: "Xeon E-2278MEL", threads: 16},
502 CpuEntry { model: "Xeon E-2286G", threads: 12 },
503 CpuEntry { model: "Xeon E-2286M", threads: 16 },
504 CpuEntry { model: "Xeon E-2288G", threads: 16 },
505 CpuEntry { model: "Xeon E-2314", threads: 4 },
506 CpuEntry { model: "Xeon E-2324G", threads: 4 },
507 CpuEntry { model: "Xeon E-2334", threads: 8 },
508 CpuEntry { model: "Xeon E-2336", threads: 12 },
509 CpuEntry { model: "Xeon E-2356G", threads: 12 },
510 CpuEntry { model: "Xeon E-2374G", threads: 8 },
511 CpuEntry { model: "Xeon E-2378", threads: 16 },
512 CpuEntry { model: "Xeon E-2378G", threads: 16 },
513 CpuEntry { model: "Xeon E-2386G", threads: 12 },
514 CpuEntry { model: "Xeon E-2388G", threads: 16 },
515 CpuEntry { model: "Xeon W-1250", threads: 12 },
516 CpuEntry { model: "Xeon W-1250E", threads: 12 },
517 CpuEntry { model: "Xeon W-1250P", threads: 12 },
518 CpuEntry { model: "Xeon W-1250TE", threads: 12 },
519 CpuEntry { model: "Xeon W-1270", threads: 16 },
520 CpuEntry { model: "Xeon W-1270E", threads: 16 },
521 CpuEntry { model: "Xeon W-1270P", threads: 16 },
522 CpuEntry { model: "Xeon W-1270TE", threads: 16 },
523 CpuEntry { model: "Xeon W-1290", threads: 20 },
524 CpuEntry { model: "Xeon W-1290E", threads: 20 },
525 CpuEntry { model: "Xeon W-1290P", threads: 20 },
526 CpuEntry { model: "Xeon W-1290T", threads: 20 },
527 CpuEntry { model: "Xeon W-1290TE", threads: 20 },
528 CpuEntry { model: "Xeon W-1350", threads: 12 },
529 CpuEntry { model: "Xeon W-1350P", threads: 12 },
530 CpuEntry { model: "Xeon W-1370", threads: 16 },
531 CpuEntry { model: "Xeon W-1370P", threads: 16 },
532 CpuEntry { model: "Xeon W-1390", threads: 20 },
533 CpuEntry { model: "Xeon W-1390P", threads: 20 },
534 CpuEntry { model: "Xeon W-1390T", threads: 20 },
535 CpuEntry { model: "Xeon W-3323", threads: 24 },
536 CpuEntry { model: "Xeon W-3335", threads: 32 },
537 CpuEntry { model: "Xeon W-3345", threads: 48 },
538 CpuEntry { model: "Xeon W-3365", threads: 64 },
539 CpuEntry { model: "Xeon W-3375", threads: 72 },
540 CpuEntry { model: "Xeon W-9-3575X", threads: 112},
541 CpuEntry { model: "Xeon W-7-2595X", threads: 64},
542 CpuEntry { model: "Xeon W-5-3435X", threads: 32},
543 CpuEntry { model: "Xeon W-3-2435", threads: 24},
544];
545
546pub static INTEL_ULTRA_DB: &[CpuEntry] = &[
548 CpuEntry { model: "Ultra 5 125U", threads: 12 },
549 CpuEntry { model: "Ultra 5 125H", threads: 14 },
550 CpuEntry { model: "Ultra 5 135U", threads: 12 },
551 CpuEntry { model: "Ultra 5 135H", threads: 14 },
552 CpuEntry { model: "Ultra 5 138U", threads: 12 },
553 CpuEntry { model: "Ultra 5 225", threads: 14 },
554 CpuEntry { model: "Ultra 5 226V", threads: 8 },
555 CpuEntry { model: "Ultra 5 245", threads: 14 },
556 CpuEntry { model: "Ultra 5 245K", threads: 14 },
557 CpuEntry { model: "Ultra 7 155U", threads: 12 },
558 CpuEntry { model: "Ultra 7 155H", threads: 22 },
559 CpuEntry { model: "Ultra 7 165U", threads: 12 },
560 CpuEntry { model: "Ultra 7 165H", threads: 22 },
561 CpuEntry { model: "Ultra 7 165UX", threads: 12 },
562 CpuEntry { model: "Ultra 7 255U", threads: 12 },
563 CpuEntry { model: "Ultra 7 258V", threads: 8 },
564 CpuEntry { model: "Ultra 7 265", threads: 20 },
565 CpuEntry { model: "Ultra 7 265K", threads: 20 },
566 CpuEntry { model: "Ultra 7 265KF", threads: 20 },
567 CpuEntry { model: "Ultra 9 185H", threads: 22 },
568 CpuEntry { model: "Ultra 9 285K", threads: 24 },
569];
570
571pub static AMD_RYZEN_DB: &[CpuEntry] = &[
573 CpuEntry { model: "Ryzen 3 2200G", threads: 4 },
574 CpuEntry { model: "Ryzen 3 2300X", threads: 4 },
575 CpuEntry { model: "Ryzen 3 3100", threads: 8 },
576 CpuEntry { model: "Ryzen 3 3200G", threads: 4 },
577 CpuEntry { model: "Ryzen 3 3200U", threads: 4 },
578 CpuEntry { model: "Ryzen 3 3300U", threads: 8 },
579 CpuEntry { model: "Ryzen 3 3300X", threads: 8 },
580 CpuEntry { model: "Ryzen 3 4100", threads: 8 },
581 CpuEntry { model: "Ryzen 3 4300G", threads: 8 },
582 CpuEntry { model: "Ryzen 3 4300GE", threads: 8 },
583 CpuEntry { model: "Ryzen 3 4300U", threads: 8 },
584 CpuEntry { model: "Ryzen 3 5300G", threads: 8 },
585 CpuEntry { model: "Ryzen 3 5300GE", threads: 8 },
586 CpuEntry { model: "Ryzen 3 5300U", threads: 8 },
587 CpuEntry { model: "Ryzen 3 5400U", threads: 8 },
588 CpuEntry { model: "Ryzen 3 5425C", threads: 8 },
589 CpuEntry { model: "Ryzen 3 5425U", threads: 8 },
590 CpuEntry { model: "Ryzen 3 7320C", threads: 8 },
591 CpuEntry { model: "Ryzen 3 7320U", threads: 8 },
592 CpuEntry { model: "Ryzen 3 7330U", threads: 8 },
593 CpuEntry { model: "Ryzen 5 1400", threads: 8 },
594 CpuEntry { model: "Ryzen 5 1500X", threads: 8 },
595 CpuEntry { model: "Ryzen 5 1600", threads: 12 },
596 CpuEntry { model: "Ryzen 5 1600X", threads: 12 },
597 CpuEntry { model: "Ryzen 5 2400G", threads: 8 },
598 CpuEntry { model: "Ryzen 5 2600", threads: 12 },
599 CpuEntry { model: "Ryzen 5 2600X", threads: 12 },
600 CpuEntry { model: "Ryzen 5 3400G", threads: 8 },
601 CpuEntry { model: "Ryzen 5 3500", threads: 6 },
602 CpuEntry { model: "Ryzen 5 3500U", threads: 8 },
603 CpuEntry { model: "Ryzen 5 3500X", threads: 6 },
604 CpuEntry { model: "Ryzen 5 3600", threads: 12 },
605 CpuEntry { model: "Ryzen 5 3600X", threads: 12 },
606 CpuEntry { model: "Ryzen 5 3600XT", threads: 12 },
607 CpuEntry { model: "Ryzen 5 4500", threads: 12 },
608 CpuEntry { model: "Ryzen 5 4500G", threads: 12 },
609 CpuEntry { model: "Ryzen 5 4500GE", threads: 12 },
610 CpuEntry { model: "Ryzen 5 4500U", threads: 8 },
611 CpuEntry { model: "Ryzen 5 4600G", threads: 12 },
612 CpuEntry { model: "Ryzen 5 4600GE", threads: 12 },
613 CpuEntry { model: "Ryzen 5 4600H", threads: 12 },
614 CpuEntry { model: "Ryzen 5 4600U", threads: 12 },
615 CpuEntry { model: "Ryzen 5 4680U", threads: 12 },
616 CpuEntry { model: "Ryzen 5 5500", threads: 12 },
617 CpuEntry { model: "Ryzen 5 5500G", threads: 12 },
618 CpuEntry { model: "Ryzen 5 5500GE", threads: 12 },
619 CpuEntry { model: "Ryzen 5 5500U", threads: 12 },
620 CpuEntry { model: "Ryzen 5 5505", threads: 12 },
621 CpuEntry { model: "Ryzen 5 5600", threads: 12 },
622 CpuEntry { model: "Ryzen 5 5600G", threads: 12 },
623 CpuEntry { model: "Ryzen 5 5600GE", threads: 12 },
624 CpuEntry { model: "Ryzen 5 5600H", threads: 12 },
625 CpuEntry { model: "Ryzen 5 5600HS", threads: 12 },
626 CpuEntry { model: "Ryzen 5 5600T", threads: 12 },
627 CpuEntry { model: "Ryzen 5 5600U", threads: 12 },
628 CpuEntry { model: "Ryzen 5 5600X", threads: 12 },
629 CpuEntry { model: "Ryzen 5 5600X3D", threads: 12 },
630 CpuEntry { model: "Ryzen 5 5625C", threads: 12 },
631 CpuEntry { model: "Ryzen 5 5625U", threads: 12 },
632 CpuEntry { model: "Ryzen 5 7500F", threads: 12 },
633 CpuEntry { model: "Ryzen 5 7520C", threads: 8 },
634 CpuEntry { model: "Ryzen 5 7520U", threads: 8 },
635 CpuEntry { model: "Ryzen 5 7530U", threads: 12 },
636 CpuEntry { model: "Ryzen 5 7535HS", threads: 12 },
637 CpuEntry { model: "Ryzen 5 7535U", threads: 12 },
638 CpuEntry { model: "Ryzen 5 7540U", threads: 12 },
639 CpuEntry { model: "Ryzen 5 7545U", threads: 12 },
640 CpuEntry { model: "Ryzen 5 7600", threads: 12 },
641 CpuEntry { model: "Ryzen 5 7600X", threads: 12 },
642 CpuEntry { model: "Ryzen 5 7600X3D", threads: 12 },
643 CpuEntry { model: "Ryzen 5 7640HS", threads: 12 },
644 CpuEntry { model: "Ryzen 5 7640U", threads: 12 },
645 CpuEntry { model: "Ryzen 5 7645HX", threads: 12 },
646 CpuEntry { model: "Ryzen 7 1700", threads: 16 },
647 CpuEntry { model: "Ryzen 7 1700X", threads: 16 },
648 CpuEntry { model: "Ryzen 7 1800X", threads: 16 },
649 CpuEntry { model: "Ryzen 7 2700", threads: 16 },
650 CpuEntry { model: "Ryzen 7 2700X", threads: 16 },
651 CpuEntry { model: "Ryzen 7 3700U", threads: 8 },
652 CpuEntry { model: "Ryzen 7 3700X", threads: 16 },
653 CpuEntry { model: "Ryzen 7 3750H", threads: 8 },
654 CpuEntry { model: "Ryzen 7 3800X", threads: 16 },
655 CpuEntry { model: "Ryzen 7 3800XT", threads: 16 },
656 CpuEntry { model: "Ryzen 7 3780U", threads: 8 },
657 CpuEntry { model: "Ryzen 7 4700G", threads: 16 },
658 CpuEntry { model: "Ryzen 7 4700GE", threads: 16 },
659 CpuEntry { model: "Ryzen 7 4700U", threads: 8 },
660 CpuEntry { model: "Ryzen 7 4800H", threads: 16 },
661 CpuEntry { model: "Ryzen 7 4800HS", threads: 16 },
662 CpuEntry { model: "Ryzen 7 4800U", threads: 16 },
663 CpuEntry { model: "Ryzen 7 4980U", threads: 16 },
664 CpuEntry { model: "Ryzen 7 5700G", threads: 16 },
665 CpuEntry { model: "Ryzen 7 5700GE", threads: 16 },
666 CpuEntry { model: "Ryzen 7 5700U", threads: 16 },
667 CpuEntry { model: "Ryzen 7 5700X", threads: 16 },
668 CpuEntry { model: "Ryzen 7 5700X3D", threads: 16 },
669 CpuEntry { model: "Ryzen 7 5800", threads: 16 },
670 CpuEntry { model: "Ryzen 7 5800H", threads: 16 },
671 CpuEntry { model: "Ryzen 7 5800HS", threads: 16 },
672 CpuEntry { model: "Ryzen 7 5800U", threads: 16 },
673 CpuEntry { model: "Ryzen 7 5800X", threads: 16 },
674 CpuEntry { model: "Ryzen 7 5800X3D", threads: 16 },
675 CpuEntry { model: "Ryzen 7 5825C", threads: 16 },
676 CpuEntry { model: "Ryzen 7 5825U", threads: 16 },
677 CpuEntry { model: "Ryzen 7 7700", threads: 16 },
678 CpuEntry { model: "Ryzen 7 7700X", threads: 16 },
679 CpuEntry { model: "Ryzen 7 7730U", threads: 16 },
680 CpuEntry { model: "Ryzen 7 7735HS", threads: 16 },
681 CpuEntry { model: "Ryzen 7 7735U", threads: 16 },
682 CpuEntry { model: "Ryzen 7 7736U", threads: 16 },
683 CpuEntry { model: "Ryzen 7 7745HX", threads: 16 },
684 CpuEntry { model: "Ryzen 7 7800X3D", threads: 16 },
685 CpuEntry { model: "Ryzen 7 7840HS", threads: 16 },
686 CpuEntry { model: "Ryzen 7 7840U", threads: 16 },
687 CpuEntry { model: "Ryzen 9 3900", threads: 24 },
688 CpuEntry { model: "Ryzen 9 3900X", threads: 24 },
689 CpuEntry { model: "Ryzen 9 3900XT", threads: 24 },
690 CpuEntry { model: "Ryzen 9 3950X", threads: 32 },
691 CpuEntry { model: "Ryzen 9 4900H", threads: 16 },
692 CpuEntry { model: "Ryzen 9 4900HS", threads: 16 },
693 CpuEntry { model: "Ryzen 9 5900", threads: 24 },
694 CpuEntry { model: "Ryzen 9 5900X", threads: 24 },
695 CpuEntry { model: "Ryzen 9 5950X", threads: 32 },
696 CpuEntry { model: "Ryzen 9 5900HS", threads: 16 },
697 CpuEntry { model: "Ryzen 9 5900HX", threads: 16 },
698 CpuEntry { model: "Ryzen 9 5980HX", threads: 16 },
699 CpuEntry { model: "Ryzen 9 5980HS", threads: 16 },
700 CpuEntry { model: "Ryzen 9 7900", threads: 24 },
701 CpuEntry { model: "Ryzen 9 7900X", threads: 24 },
702 CpuEntry { model: "Ryzen 9 7900X3D", threads: 24 },
703 CpuEntry { model: "Ryzen 9 7940HS", threads: 16 },
704 CpuEntry { model: "Ryzen 9 7945HX", threads: 32 },
705 CpuEntry { model: "Ryzen 9 7945HX3D", threads: 32 },
706 CpuEntry { model: "Ryzen 9 7950X", threads: 32 },
707 CpuEntry { model: "Ryzen 9 7950X3D", threads: 32 },
708 CpuEntry { model: "Threadripper 2920X", threads: 24 },
709 CpuEntry { model: "Threadripper 2950X", threads: 32 },
710 CpuEntry { model: "Threadripper 2970WX", threads: 48 },
711 CpuEntry { model: "Threadripper 2990WX", threads: 64 },
712 CpuEntry { model: "Threadripper 3960X", threads: 48 },
713 CpuEntry { model: "Threadripper 3970X", threads: 64 },
714 CpuEntry { model: "Threadripper 3990X", threads: 128},
715 CpuEntry { model: "Threadripper PRO 3945WX", threads: 24},
716 CpuEntry { model: "Threadripper PRO 3955WX", threads: 32},
717 CpuEntry { model: "Threadripper PRO 3975WX", threads: 64},
718 CpuEntry { model: "Threadripper PRO 3995WX", threads: 128},
719 CpuEntry { model: "Threadripper PRO 5945WX", threads: 24},
720 CpuEntry { model: "Threadripper PRO 5955WX", threads: 32},
721 CpuEntry { model: "Threadripper PRO 5965WX", threads: 48},
722 CpuEntry { model: "Threadripper PRO 5975WX", threads: 64},
723 CpuEntry { model: "Threadripper PRO 5995WX", threads: 128},
724 CpuEntry { model: "Threadripper PRO 7965WX", threads: 48},
725 CpuEntry { model: "Threadripper PRO 7975WX", threads: 64},
726 CpuEntry { model: "Threadripper PRO 7985WX", threads: 128},
727 CpuEntry { model: "Threadripper PRO 7995WX", threads: 192},
728];
729
730pub fn lookup_expected_threads(brand: &str) -> Option<u32> {
733 for e in INTEL_CORE_DB {
735 if brand.contains(e.model) {
736 return Some(e.threads);
737 }
738 }
739 for e in INTEL_XEON_DB {
741 if brand.contains(e.model) {
742 return Some(e.threads);
743 }
744 }
745 for e in INTEL_ULTRA_DB {
747 if brand.contains(e.model) {
748 return Some(e.threads);
749 }
750 }
751 for e in AMD_RYZEN_DB {
753 if brand.contains(e.model) {
754 return Some(e.threads);
755 }
756 }
757 None
758}