diff options
author | howard zhang <howard.zhang@arm.com> | 2021-03-29 13:54:21 +0800 |
---|---|---|
committer | Howard Zhang <howard.zhang@arm.com> | 2021-05-07 16:42:58 +0800 |
commit | 0bff4afd0fa8ac02dd27a4ba66a217d92e0020cf (patch) | |
tree | 9f5c5a17ef4fccf9a8830f0a19c54f1ca1aaa4b3 /pkg/procid/procid_test.go | |
parent | 8a2f7e716dcc62f04d2808e8ade34941c94fc956 (diff) |
Init all vCPU when initializing machine on ARM64
This patch is to solve problem that vCPU timer mess up when
adding vCPU dynamically on ARM64, for detailed information
please refer to:
https://github.com/google/gvisor/issues/5739
There is no influence on x86 and here are main changes for
ARM64:
1. create maxVCPUs number of vCPU in machine initialization
2. we want to sync gvisor vCPU number with host CPU number,
so use smaller number between runtime.NumCPU and
KVM_CAP_MAX_VCPUS to be maxVCPUS
3. put unused vCPUs into architecture-specific map initialvCPUs
4. When machine need to bind a new vCPU with tid, rather
than creating new one, it would pick a vCPU from map initalvCPUs
5. change the setSystemTime function. When vCPU number increasing,
the time cost for function setTSC(use syscall to set cntvoff) is
liner growth from around 300 ns to 100000 ns, and this leads to
the function setSystemTimeLegacy can not get correct offset
value.
6. initializing StdioFDs and goferFD before a platform to avoid
StdioFDs confects with vCPU fds
Signed-off-by: howard zhang <howard.zhang@arm.com>
Diffstat (limited to 'pkg/procid/procid_test.go')
0 files changed, 0 insertions, 0 deletions