Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Asymmetric machine architecture not supported" on Intel CPU with hybrid architecture #850

Open
Anthonysdu opened this issue Oct 20, 2022 · 5 comments · May be fixed by #892
Open

"Asymmetric machine architecture not supported" on Intel CPU with hybrid architecture #850

Anthonysdu opened this issue Oct 20, 2022 · 5 comments · May be fixed by #892
Assignees
Labels
resource allocation related to allocation of resources like CPU cores and memory

Comments

@Anthonysdu
Copy link
Contributor

Hi, I am running benchexec on Ubuntu 20.04.4 LTS,

and got this error:

Asymmetric machine architecture not supported: CPU cores with different number of sibling cores.

here is my cpu information:

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 20
On-line CPU(s) list: 0-19
Thread(s) per core: 1
Core(s) per socket: 14
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 154
Model name: 12th Gen Intel(R) Core(TM) i7-12700H

@Anthonysdu
Copy link
Contributor Author

Can I ask you give some advice how to solve it?

@PhilippWendler PhilippWendler changed the title Asymmetric machine architecture not supported: CPU cores with different number of sibling cores. "Asymmetric machine architecture not supported" on Intel CPU with hybrid architecture Oct 21, 2022
@PhilippWendler
Copy link
Member

Your CPU has 14 cores, but they are not all equal. 6 of them are much faster than the other 8, and the 6 support hyper threading. This is a situation that BenchExec currently does not support.

It is also questionable whether it makes sense to use such a CPU for benchmarking at all. If a run is allowed to be executed on both fast and slow cores, the performance will vary drastically depending on how the OS decides to schedule it and thus be likely non-deterministic and not reproducible. On the other hand, if CPU cores are split between runs and some runs are executed on the fast cores and others on the slow cores, the results will not be useful as well.

The only thing that I think would be ok is to use only either the fast cores or the slow cores for benchmarking, and keep the other cores unused. And I think that it should already be doable with BenchExec if you specify the cores manually (but I could not test it so far).

So first you have to find out which of the 20 core numbers that the Linux kernel assigns belong to the 6+6 fast cores (with hyper threading) and which to the 8 slow cores. Then you can decide on one of the two sets and pass it to benchexec with --allowedCores N,M-K.

If you can tell me how I can programmatically find out which cores are fast/slow (I guess that this is somehow reflected in the files below /sys/devices/system/cpu/), I could also add some logic to BenchExec that would provide a better error message with a hint for the user what to do.

@PhilippWendler
Copy link
Member

@Anthonysdu You had posted an answer here, but GitHub no longer shows it. Did you delete it?

Could you please run zip --symlinks -r cpu-topology.zip /sys/devices/system/cpu and upload the resulting ZIP file here? This would help me to find out how BenchExec can handle this situation properly.

@PhilippWendler PhilippWendler added the resource allocation related to allocation of resources like CPU cores and memory label Oct 26, 2022
@Anthonysdu
Copy link
Contributor Author

cpu-topology.zip
Hi @PhilippWendler, Sorry I posted an unreadable format so I delete it. Please find the attached zip file.

I solved the issue by checking lscpu -e and manually selected the cores which are symmetrically allocated.

Thank you!

@PhilippWendler
Copy link
Member

I see. The info might be useful, so I am reposting your comment:

I solved the problem by manually find the cores information:

lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ
  0    0      0    0 0:0:0:0          yes 4679.3491 400.0000
  1    0      0    0 0:0:0:0          yes 4679.3491 400.0000
  2    0      0    1 1:1:1:0          yes 4700.0000 400.0000
  3    0      0    1 1:1:1:0          yes 4700.0000 400.0000
  4    0      0    2 2:2:2:0          yes 4679.3491 400.0000
  5    0      0    2 2:2:2:0          yes 4679.3491 400.0000
  6    0      0    3 3:3:3:0          yes 4679.3491 400.0000
  7    0      0    3 3:3:3:0          yes 4679.3491 400.0000
  8    0      0    4 4:4:4:0          yes 4700.0000 400.0000
  9    0      0    4 4:4:4:0          yes 4700.0000 400.0000
 10    0      0    5 5:5:5:0          yes 4679.3491 400.0000
 11    0      0    5 5:5:5:0          yes 4679.3491 400.0000
 12    0      0    6 6:6:6:0          yes 3500.0000 400.0000
 13    0      0    7 7:7:6:0          yes 3500.0000 400.0000
 14    0      0    8 8:8:6:0          yes 3500.0000 400.0000
 15    0      0    9 9:9:6:0          yes 3500.0000 400.0000
 16    0      0   10 10:10:7:0        yes 3500.0000 400.0000
 17    0      0   11 11:11:7:0        yes 3500.0000 400.0000
 18    0      0   12 12:12:7:0        yes 3500.0000 400.0000
 19    0      0   13 13:13:7:0        yes 3500.0000 400.0000`

Then I choose cores 0-5 in benchexec and run successfully.

Thanks for the ZIP!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
resource allocation related to allocation of resources like CPU cores and memory
Development

Successfully merging a pull request may close this issue.

3 participants