|
94 | 94 | # Vendor constants |
95 | 95 | AMD = 'AMD' |
96 | 96 | APM = 'Applied Micro' |
| 97 | +APPLE = 'Apple' |
97 | 98 | ARM = 'ARM' |
98 | 99 | BROADCOM = 'Broadcom' |
99 | 100 | CAVIUM = 'Cavium' |
|
123 | 124 |
|
124 | 125 | CPU_ARCHITECTURES = [AARCH32, AARCH64, POWER, RISCV32, RISCV64, X86_64] |
125 | 126 | CPU_FAMILIES = [AMD, ARM, INTEL, POWER, POWER_LE, RISCV] |
126 | | -CPU_VENDORS = [AMD, APM, ARM, BROADCOM, CAVIUM, DEC, IBM, INTEL, MARVELL, MOTOROLA, NVIDIA, QUALCOMM] |
| 127 | +CPU_VENDORS = [AMD, APM, APPLE, ARM, BROADCOM, CAVIUM, DEC, IBM, INTEL, MARVELL, MOTOROLA, NVIDIA, QUALCOMM] |
127 | 128 | # ARM implementer IDs (i.e., the hexadeximal keys) taken from ARMv8-A Architecture Reference Manual |
128 | 129 | # (ARM DDI 0487A.j, Section G6.2.102, Page G6-4493) |
129 | 130 | VENDOR_IDS = { |
@@ -384,11 +385,18 @@ def get_cpu_vendor(): |
384 | 385 |
|
385 | 386 | elif os_type == DARWIN: |
386 | 387 | cmd = "sysctl -n machdep.cpu.vendor" |
387 | | - out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False) |
| 388 | + out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False, log_ok=False) |
388 | 389 | out = out.strip() |
389 | 390 | if ec == 0 and out in VENDOR_IDS: |
390 | 391 | vendor = VENDOR_IDS[out] |
391 | 392 | _log.debug("Determined CPU vendor on DARWIN as being '%s' via cmd '%s" % (vendor, cmd)) |
| 393 | + else: |
| 394 | + cmd = "sysctl -n machdep.cpu.brand_string" |
| 395 | + out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False, log_ok=False) |
| 396 | + out = out.strip().split(' ')[0] |
| 397 | + if ec == 0 and out in CPU_VENDORS: |
| 398 | + vendor = out |
| 399 | + _log.debug("Determined CPU vendor on DARWIN as being '%s' via cmd '%s" % (vendor, cmd)) |
392 | 400 |
|
393 | 401 | if vendor is None: |
394 | 402 | vendor = UNKNOWN |
@@ -533,9 +541,11 @@ def get_cpu_speed(): |
533 | 541 | cmd = "sysctl -n hw.cpufrequency_max" |
534 | 542 | _log.debug("Trying to determine CPU frequency on Darwin via cmd '%s'" % cmd) |
535 | 543 | out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False) |
536 | | - if ec == 0: |
| 544 | + out = out.strip() |
| 545 | + cpu_freq = None |
| 546 | + if ec == 0 and out: |
537 | 547 | # returns clock frequency in cycles/sec, but we want MHz |
538 | | - cpu_freq = float(out.strip()) // (1000 ** 2) |
| 548 | + cpu_freq = float(out) // (1000 ** 2) |
539 | 549 |
|
540 | 550 | else: |
541 | 551 | raise SystemToolsException("Could not determine CPU clock frequency (OS: %s)." % os_type) |
@@ -578,7 +588,7 @@ def get_cpu_features(): |
578 | 588 | for feature_set in ['extfeatures', 'features', 'leaf7_features']: |
579 | 589 | cmd = "sysctl -n machdep.cpu.%s" % feature_set |
580 | 590 | _log.debug("Trying to determine CPU features on Darwin via cmd '%s'", cmd) |
581 | | - out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False) |
| 591 | + out, ec = run_cmd(cmd, force_in_dry_run=True, trace=False, stream_output=False, log_ok=False) |
582 | 592 | if ec == 0: |
583 | 593 | cpu_feat.extend(out.strip().lower().split()) |
584 | 594 |
|
|
0 commit comments