[libvirt] [PATCH 00/17] Make virt-login-shell suck much less

The virt-login-shell is a program intended to be run as the login shell for a user in the host OS. When invoked it will connect to libvirtd and run a shell inside the container whose name matches the login user. The current impl of virt-login-shell has a number of limitations with it that make it painful to use in practice - It leaks env variables set by the host PAM stack into the containerized shell. eg things like XDG_RUNTIME_DIR get left set pointing to directories only visible on the host. - You can't use scp to copy things directly into the container, because it doesn't support the '-c' arg that openssh expects shells to have - The choice of user shell is hardcoded on the host side and so won't honour /etc/passwd settings inside the container - It doesn't join the new shell into the containers cgroups, so resources limits are not correctly applied - It throws away most error messages making diagnosis of problems (such as missing homedir in the container) impossible. This series of patches fixes all these problems making virt-login-shell a much more pleasant thing to use in the real world. The series is bigger than I would have liked because it turns out nodeinfo.c is a big mess of code. Because virt-login-shell is setuid we need to be selective about what we link it, and nodeinfo.c pulled in a huge chain of dependant code. So the first half ot he series is all about refactoring nodeinfo.c to isolate it into smaller pieces. Daniel P. Berrange (17): nodeinfo: remove sysfs_prefix from all methods nodeinfo: make nodeGetInfo() call nodeGetMemory for memory size nodeinfo: split CPU info retrieval out of nodeGetInfo nodeinfo: rename all memory APIs to have a virHostMem prefix nodeinfo: rename all CPU APIs to have a virHostCPU prefix nodeinfo: move host CPU APIs out into virhostcpu.c file nodeinfo: move host memory APIs out into virhostcpu file util: add function for looking up the user shell libvirt-lxc: add virDomainLxcEnterCGroup API virsh: make lxc-enter-namespace also join the cgroups virt-login-shell: honour the -c option to launch commands virt-login-shell: change way we request a login shell virt-login-shell: allow shell to be a simple string argument virt-login-shell: avoid loosing error during cleanup virt-login-shell: fully reset container environment virt-login-shell: add ability to auto-detect shell from container virt-login-shell: add ability to join the container cgroups cfg.mk | 6 +- config-post.h | 2 + include/libvirt/libvirt-lxc.h | 2 + po/POTFILES.in | 2 + src/Makefile.am | 8 +- src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_driver.c | 6 +- src/libvirt-lxc.c | 47 + src/libvirt_linux.syms | 7 +- src/libvirt_lxc.syms | 5 + src/libvirt_private.syms | 27 +- src/lxc/lxc_conf.c | 2 +- src/lxc/lxc_controller.c | 4 +- src/lxc/lxc_driver.c | 24 +- src/nodeinfo.c | 2101 +------------------- src/nodeinfo.h | 49 +- src/nodeinfopriv.h | 39 - src/openvz/openvz_conf.c | 4 +- src/openvz/openvz_driver.c | 14 +- src/phyp/phyp_driver.c | 2 +- src/qemu/qemu_capabilities.c | 4 +- src/qemu/qemu_driver.c | 30 +- src/qemu/qemu_process.c | 4 +- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 24 +- src/util/vircgroup.c | 5 +- src/util/virhostcpu.c | 1299 ++++++++++++ src/util/virhostcpu.h | 54 + src/util/virhostcpupriv.h | 45 + src/util/virhostmem.c | 865 ++++++++ src/util/virhostmem.h | 60 + src/util/virnuma.c | 4 +- src/util/virutil.c | 51 +- src/util/virutil.h | 1 + src/vbox/vbox_common.c | 15 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 10 +- src/vz/vz_sdk.c | 2 +- src/xen/xen_driver.c | 5 +- tests/Makefile.am | 22 +- tests/vircgrouptest.c | 6 +- .../linux-aarch64-f21-mustang.cpuinfo | 0 .../linux-aarch64-f21-mustang.expected | 0 .../linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo | 0 .../linux-aarch64-rhelsa-3.19.0-mustang.expected | 0 .../linux-armv6l-raspberrypi.cpuinfo | 0 .../linux-armv6l-raspberrypi.expected | 0 .../linux-cpustat-24cpu.out | 0 .../linux-cpustat-24cpu.stat | 0 .../linux-deconf-cpus/cpu/cpu0}/online | 0 .../linux-deconf-cpus/cpu/cpu1}/online | 0 .../linux-deconf-cpus/cpu/cpu10}/online | 0 .../linux-deconf-cpus/cpu/cpu100}/online | 0 .../linux-deconf-cpus/cpu/cpu101}/online | 0 .../linux-deconf-cpus/cpu/cpu102}/online | 0 .../linux-deconf-cpus/cpu/cpu103}/online | 0 .../linux-deconf-cpus/cpu/cpu104}/online | 0 .../linux-deconf-cpus}/cpu/cpu104/topology/core_id | 0 .../cpu/cpu104}/topology/core_siblings | 0 .../cpu/cpu104}/topology/core_siblings_list | 0 .../cpu/cpu104}/topology/physical_package_id | 0 .../cpu/cpu104/topology/thread_siblings | 0 .../cpu/cpu104/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu105}/online | 0 .../linux-deconf-cpus/cpu/cpu106}/online | 0 .../linux-deconf-cpus/cpu/cpu107}/online | 0 .../linux-deconf-cpus/cpu/cpu108}/online | 0 .../linux-deconf-cpus/cpu/cpu109}/online | 0 .../linux-deconf-cpus/cpu/cpu11}/online | 0 .../linux-deconf-cpus/cpu/cpu110}/online | 0 .../linux-deconf-cpus/cpu/cpu111}/online | 0 .../linux-deconf-cpus/cpu/cpu112}/online | 0 .../linux-deconf-cpus}/cpu/cpu112/topology/core_id | 0 .../cpu/cpu112}/topology/core_siblings | 0 .../cpu/cpu112}/topology/core_siblings_list | 0 .../cpu/cpu112}/topology/physical_package_id | 0 .../cpu/cpu112/topology/thread_siblings | 0 .../cpu/cpu112/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu113}/online | 0 .../linux-deconf-cpus/cpu/cpu114}/online | 0 .../linux-deconf-cpus/cpu/cpu115}/online | 0 .../linux-deconf-cpus/cpu/cpu116}/online | 0 .../linux-deconf-cpus/cpu/cpu117}/online | 0 .../linux-deconf-cpus/cpu/cpu118}/online | 0 .../linux-deconf-cpus/cpu/cpu119}/online | 0 .../linux-deconf-cpus/cpu/cpu12}/online | 0 .../linux-deconf-cpus/cpu/cpu120}/online | 0 .../linux-deconf-cpus}/cpu/cpu120/topology/core_id | 0 .../cpu/cpu120}/topology/core_siblings | 0 .../cpu/cpu120}/topology/core_siblings_list | 0 .../cpu/cpu120}/topology/physical_package_id | 0 .../cpu/cpu120/topology/thread_siblings | 0 .../cpu/cpu120/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu121}/online | 0 .../linux-deconf-cpus/cpu/cpu122}/online | 0 .../linux-deconf-cpus/cpu/cpu123}/online | 0 .../linux-deconf-cpus/cpu/cpu124}/online | 0 .../linux-deconf-cpus/cpu/cpu125}/online | 0 .../linux-deconf-cpus/cpu/cpu126}/online | 0 .../linux-deconf-cpus/cpu/cpu127}/online | 0 .../linux-deconf-cpus/cpu/cpu128}/online | 0 .../linux-deconf-cpus}/cpu/cpu128/topology/core_id | 0 .../cpu/cpu128/topology/core_siblings | 0 .../cpu/cpu128/topology/core_siblings_list | 0 .../cpu/cpu128}/topology/physical_package_id | 0 .../cpu/cpu128/topology/thread_siblings | 0 .../cpu/cpu128/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu129}/online | 0 .../linux-deconf-cpus/cpu/cpu13}/online | 0 .../linux-deconf-cpus/cpu/cpu130}/online | 0 .../linux-deconf-cpus/cpu/cpu131}/online | 0 .../linux-deconf-cpus/cpu/cpu132}/online | 0 .../linux-deconf-cpus/cpu/cpu133}/online | 0 .../linux-deconf-cpus/cpu/cpu134}/online | 0 .../linux-deconf-cpus/cpu/cpu135}/online | 0 .../linux-deconf-cpus/cpu/cpu136}/online | 0 .../linux-deconf-cpus}/cpu/cpu136/topology/core_id | 0 .../cpu/cpu136}/topology/core_siblings | 0 .../cpu/cpu136}/topology/core_siblings_list | 0 .../cpu/cpu136}/topology/physical_package_id | 0 .../cpu/cpu136/topology/thread_siblings | 0 .../cpu/cpu136/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu137}/online | 0 .../linux-deconf-cpus/cpu/cpu138}/online | 0 .../linux-deconf-cpus/cpu/cpu139}/online | 0 .../linux-deconf-cpus/cpu/cpu14}/online | 0 .../linux-deconf-cpus/cpu/cpu140}/online | 0 .../linux-deconf-cpus/cpu/cpu141}/online | 0 .../linux-deconf-cpus/cpu/cpu142}/online | 0 .../linux-deconf-cpus/cpu/cpu143}/online | 0 .../linux-deconf-cpus/cpu/cpu144}/online | 0 .../linux-deconf-cpus/cpu/cpu145}/online | 0 .../linux-deconf-cpus/cpu/cpu146}/online | 0 .../linux-deconf-cpus/cpu/cpu147}/online | 0 .../linux-deconf-cpus/cpu/cpu148}/online | 0 .../linux-deconf-cpus/cpu/cpu149}/online | 0 .../linux-deconf-cpus/cpu/cpu15}/online | 0 .../linux-deconf-cpus/cpu/cpu150}/online | 0 .../linux-deconf-cpus/cpu/cpu151}/online | 0 .../linux-deconf-cpus/cpu/cpu152}/online | 0 .../linux-deconf-cpus/cpu/cpu153}/online | 0 .../linux-deconf-cpus/cpu/cpu154}/online | 0 .../linux-deconf-cpus/cpu/cpu155}/online | 0 .../linux-deconf-cpus/cpu/cpu156}/online | 0 .../linux-deconf-cpus/cpu/cpu157}/online | 0 .../linux-deconf-cpus/cpu/cpu158}/online | 0 .../linux-deconf-cpus/cpu/cpu159}/online | 0 .../linux-deconf-cpus/cpu/cpu16}/online | 0 .../linux-deconf-cpus}/cpu/cpu16/topology/core_id | 0 .../cpu/cpu16}/topology/core_siblings | 0 .../cpu/cpu16}/topology/core_siblings_list | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../cpu/cpu16/topology/thread_siblings | 0 .../cpu/cpu16/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu17}/online | 0 .../linux-deconf-cpus/cpu/cpu18}/online | 0 .../linux-deconf-cpus/cpu/cpu19}/online | 0 .../linux-deconf-cpus/cpu/cpu2}/online | 0 .../linux-deconf-cpus/cpu/cpu20}/online | 0 .../linux-deconf-cpus/cpu/cpu21}/online | 0 .../linux-deconf-cpus/cpu/cpu22}/online | 0 .../linux-deconf-cpus/cpu/cpu23}/online | 0 .../linux-deconf-cpus/cpu/cpu24}/online | 0 .../linux-deconf-cpus}/cpu/cpu24/topology/core_id | 0 .../cpu/cpu24}/topology/core_siblings | 0 .../cpu/cpu24}/topology/core_siblings_list | 0 .../cpu/cpu24}/topology/physical_package_id | 0 .../cpu/cpu24/topology/thread_siblings | 0 .../cpu/cpu24/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu25}/online | 0 .../linux-deconf-cpus/cpu/cpu26}/online | 0 .../linux-deconf-cpus/cpu/cpu27}/online | 0 .../linux-deconf-cpus/cpu/cpu28}/online | 0 .../linux-deconf-cpus/cpu/cpu29}/online | 0 .../linux-deconf-cpus/cpu/cpu3}/online | 0 .../linux-deconf-cpus/cpu/cpu30}/online | 0 .../linux-deconf-cpus/cpu/cpu31}/online | 0 .../linux-deconf-cpus/cpu/cpu32}/online | 0 .../linux-deconf-cpus/cpu/cpu33}/online | 0 .../linux-deconf-cpus/cpu/cpu34}/online | 0 .../linux-deconf-cpus/cpu/cpu35}/online | 0 .../linux-deconf-cpus/cpu/cpu36}/online | 0 .../linux-deconf-cpus/cpu/cpu37}/online | 0 .../linux-deconf-cpus/cpu/cpu38}/online | 0 .../linux-deconf-cpus/cpu/cpu39}/online | 0 .../linux-deconf-cpus/cpu/cpu4}/online | 0 .../linux-deconf-cpus/cpu/cpu40}/online | 0 .../linux-deconf-cpus}/cpu/cpu40/topology/core_id | 0 .../cpu/cpu40}/topology/core_siblings | 0 .../cpu/cpu40}/topology/core_siblings_list | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../cpu/cpu40/topology/thread_siblings | 0 .../cpu/cpu40/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu41}/online | 0 .../linux-deconf-cpus/cpu/cpu42}/online | 0 .../linux-deconf-cpus/cpu/cpu43}/online | 0 .../linux-deconf-cpus/cpu/cpu44}/online | 0 .../linux-deconf-cpus/cpu/cpu45}/online | 0 .../linux-deconf-cpus/cpu/cpu46}/online | 0 .../linux-deconf-cpus/cpu/cpu47}/online | 0 .../linux-deconf-cpus/cpu/cpu48}/online | 0 .../linux-deconf-cpus}/cpu/cpu48/topology/core_id | 0 .../cpu/cpu48/topology/core_siblings | 0 .../cpu/cpu48/topology/core_siblings_list | 0 .../cpu/cpu48}/topology/physical_package_id | 0 .../cpu/cpu48/topology/thread_siblings | 0 .../cpu/cpu48/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu49}/online | 0 .../linux-deconf-cpus/cpu/cpu5}/online | 0 .../linux-deconf-cpus/cpu/cpu50}/online | 0 .../linux-deconf-cpus/cpu/cpu51}/online | 0 .../linux-deconf-cpus/cpu/cpu52}/online | 0 .../linux-deconf-cpus/cpu/cpu53}/online | 0 .../linux-deconf-cpus/cpu/cpu54}/online | 0 .../linux-deconf-cpus/cpu/cpu55}/online | 0 .../linux-deconf-cpus/cpu/cpu56}/online | 0 .../linux-deconf-cpus/cpu/cpu57}/online | 0 .../linux-deconf-cpus/cpu/cpu58}/online | 0 .../linux-deconf-cpus/cpu/cpu59}/online | 0 .../linux-deconf-cpus/cpu/cpu6}/online | 0 .../linux-deconf-cpus/cpu/cpu60}/online | 0 .../linux-deconf-cpus/cpu/cpu61}/online | 0 .../linux-deconf-cpus/cpu/cpu62}/online | 0 .../linux-deconf-cpus/cpu/cpu63}/online | 0 .../linux-deconf-cpus/cpu/cpu64}/online | 0 .../linux-deconf-cpus/cpu/cpu65}/online | 0 .../linux-deconf-cpus/cpu/cpu66}/online | 0 .../linux-deconf-cpus/cpu/cpu67}/online | 0 .../linux-deconf-cpus/cpu/cpu68}/online | 0 .../linux-deconf-cpus/cpu/cpu69}/online | 0 .../linux-deconf-cpus/cpu/cpu7}/online | 0 .../linux-deconf-cpus/cpu/cpu70}/online | 0 .../linux-deconf-cpus/cpu/cpu71}/online | 0 .../linux-deconf-cpus/cpu/cpu72}/online | 0 .../linux-deconf-cpus}/cpu/cpu72/topology/core_id | 0 .../cpu/cpu72}/topology/core_siblings | 0 .../cpu/cpu72}/topology/core_siblings_list | 0 .../cpu/cpu72}/topology/physical_package_id | 0 .../cpu/cpu72/topology/thread_siblings | 0 .../cpu/cpu72/topology/thread_siblings_list | 0 .../linux-deconf-cpus/cpu/cpu73}/online | 0 .../linux-deconf-cpus/cpu/cpu74}/online | 0 .../linux-deconf-cpus/cpu/cpu75}/online | 0 .../linux-deconf-cpus/cpu/cpu76}/online | 0 .../linux-deconf-cpus/cpu/cpu77}/online | 0 .../linux-deconf-cpus/cpu/cpu78}/online | 0 .../linux-deconf-cpus/cpu/cpu79}/online | 0 .../linux-deconf-cpus/cpu/cpu8}/online | 0 .../linux-deconf-cpus/cpu/cpu80}/online | 0 .../linux-deconf-cpus/cpu/cpu81}/online | 0 .../linux-deconf-cpus/cpu/cpu82}/online | 0 .../linux-deconf-cpus/cpu/cpu83}/online | 0 .../linux-deconf-cpus/cpu/cpu84}/online | 0 .../linux-deconf-cpus/cpu/cpu85}/online | 0 .../linux-deconf-cpus/cpu/cpu86}/online | 0 .../linux-deconf-cpus/cpu/cpu87}/online | 0 .../linux-deconf-cpus/cpu/cpu88}/online | 0 .../linux-deconf-cpus/cpu/cpu89}/online | 0 .../linux-deconf-cpus/cpu/cpu9}/online | 0 .../linux-deconf-cpus/cpu/cpu90}/online | 0 .../linux-deconf-cpus/cpu/cpu91}/online | 0 .../linux-deconf-cpus/cpu/cpu92}/online | 0 .../linux-deconf-cpus/cpu/cpu93}/online | 0 .../linux-deconf-cpus/cpu/cpu94}/online | 0 .../linux-deconf-cpus/cpu/cpu95}/online | 0 .../linux-deconf-cpus/cpu/cpu96}/online | 0 .../linux-deconf-cpus/cpu/cpu97}/online | 0 .../linux-deconf-cpus/cpu/cpu98}/online | 0 .../linux-deconf-cpus/cpu/cpu99}/online | 0 .../linux-deconf-cpus}/cpu/kernel_max | 0 .../linux-deconf-cpus/cpu/offline | 0 .../linux-deconf-cpus/cpu/online | 0 .../linux-deconf-cpus}/cpu/possible | 0 .../linux-deconf-cpus/cpu/present | 0 .../linux-deconf-cpus}/node/node0/cpu0 | 0 .../linux-deconf-cpus/node/node0}/cpu1 | 0 .../linux-deconf-cpus/node/node0}/cpu10 | 0 .../linux-deconf-cpus/node/node0}/cpu100 | 0 .../linux-deconf-cpus/node/node0}/cpu101 | 0 .../linux-deconf-cpus/node/node0}/cpu102 | 0 .../linux-deconf-cpus/node/node0}/cpu103 | 0 .../linux-deconf-cpus/node/node0}/cpu11 | 0 .../linux-deconf-cpus}/node/node0/cpu12 | 0 .../linux-deconf-cpus/node/node0}/cpu13 | 0 .../linux-deconf-cpus/node/node0}/cpu14 | 0 .../linux-deconf-cpus/node/node0}/cpu144 | 0 .../linux-deconf-cpus/node/node0}/cpu145 | 0 .../linux-deconf-cpus/node/node0}/cpu146 | 0 .../linux-deconf-cpus/node/node0}/cpu147 | 0 .../linux-deconf-cpus/node/node0}/cpu148 | 0 .../linux-deconf-cpus/node/node0}/cpu149 | 0 .../linux-deconf-cpus/node/node0}/cpu15 | 0 .../linux-deconf-cpus/node/node0}/cpu150 | 0 .../linux-deconf-cpus/node/node0}/cpu151 | 0 .../linux-deconf-cpus/node/node0}/cpu152 | 0 .../linux-deconf-cpus/node/node0}/cpu153 | 0 .../linux-deconf-cpus/node/node0}/cpu154 | 0 .../linux-deconf-cpus/node/node0}/cpu155 | 0 .../linux-deconf-cpus/node/node0}/cpu156 | 0 .../linux-deconf-cpus/node/node0}/cpu157 | 0 .../linux-deconf-cpus/node/node0}/cpu158 | 0 .../linux-deconf-cpus/node/node0}/cpu159 | 0 .../linux-deconf-cpus}/node/node0/cpu16 | 0 .../linux-deconf-cpus/node/node0}/cpu17 | 0 .../linux-deconf-cpus/node/node0}/cpu18 | 0 .../linux-deconf-cpus/node/node0}/cpu19 | 0 .../linux-deconf-cpus/node/node0}/cpu2 | 0 .../linux-deconf-cpus}/node/node0/cpu20 | 0 .../linux-deconf-cpus/node/node0}/cpu21 | 0 .../linux-deconf-cpus/node/node0}/cpu22 | 0 .../linux-deconf-cpus/node/node0}/cpu23 | 0 .../linux-deconf-cpus}/node/node0/cpu24 | 0 .../linux-deconf-cpus/node/node0}/cpu25 | 0 .../linux-deconf-cpus/node/node0}/cpu26 | 0 .../linux-deconf-cpus/node/node0}/cpu27 | 0 .../linux-deconf-cpus}/node/node0/cpu28 | 0 .../linux-deconf-cpus/node/node0}/cpu29 | 0 .../linux-deconf-cpus/node/node0}/cpu3 | 0 .../linux-deconf-cpus/node/node0}/cpu30 | 0 .../linux-deconf-cpus/node/node0}/cpu31 | 0 .../linux-deconf-cpus/node/node0}/cpu32 | 0 .../linux-deconf-cpus/node/node0}/cpu33 | 0 .../linux-deconf-cpus/node/node0}/cpu34 | 0 .../linux-deconf-cpus/node/node0}/cpu35 | 0 .../linux-deconf-cpus/node/node0}/cpu36 | 0 .../linux-deconf-cpus/node/node0}/cpu37 | 0 .../linux-deconf-cpus/node/node0}/cpu38 | 0 .../linux-deconf-cpus/node/node0}/cpu39 | 0 .../linux-deconf-cpus}/node/node0/cpu4 | 0 .../linux-deconf-cpus/node/node0}/cpu5 | 0 .../linux-deconf-cpus/node/node0}/cpu56 | 0 .../linux-deconf-cpus/node/node0}/cpu57 | 0 .../linux-deconf-cpus/node/node0}/cpu58 | 0 .../linux-deconf-cpus/node/node0}/cpu59 | 0 .../linux-deconf-cpus/node/node0}/cpu6 | 0 .../linux-deconf-cpus/node/node0}/cpu60 | 0 .../linux-deconf-cpus/node/node0}/cpu61 | 0 .../linux-deconf-cpus/node/node0}/cpu62 | 0 .../linux-deconf-cpus/node/node0}/cpu63 | 0 .../linux-deconf-cpus/node/node0}/cpu64 | 0 .../linux-deconf-cpus/node/node0}/cpu65 | 0 .../linux-deconf-cpus/node/node0}/cpu66 | 0 .../linux-deconf-cpus/node/node0}/cpu67 | 0 .../linux-deconf-cpus/node/node0}/cpu68 | 0 .../linux-deconf-cpus/node/node0}/cpu69 | 0 .../linux-deconf-cpus/node/node0}/cpu7 | 0 .../linux-deconf-cpus/node/node0}/cpu70 | 0 .../linux-deconf-cpus/node/node0}/cpu71 | 0 .../linux-deconf-cpus}/node/node0/cpu8 | 0 .../linux-deconf-cpus/node/node0}/cpu80 | 0 .../linux-deconf-cpus/node/node0}/cpu81 | 0 .../linux-deconf-cpus/node/node0}/cpu82 | 0 .../linux-deconf-cpus/node/node0}/cpu83 | 0 .../linux-deconf-cpus/node/node0}/cpu84 | 0 .../linux-deconf-cpus/node/node0}/cpu85 | 0 .../linux-deconf-cpus/node/node0}/cpu86 | 0 .../linux-deconf-cpus/node/node0}/cpu87 | 0 .../linux-deconf-cpus/node/node0}/cpu88 | 0 .../linux-deconf-cpus/node/node0}/cpu89 | 0 .../linux-deconf-cpus/node/node0}/cpu9 | 0 .../linux-deconf-cpus/node/node0}/cpu90 | 0 .../linux-deconf-cpus/node/node0}/cpu91 | 0 .../linux-deconf-cpus/node/node0}/cpu92 | 0 .../linux-deconf-cpus/node/node0}/cpu93 | 0 .../linux-deconf-cpus/node/node0}/cpu94 | 0 .../linux-deconf-cpus/node/node0}/cpu95 | 0 .../linux-deconf-cpus/node/node0}/cpu96 | 0 .../linux-deconf-cpus/node/node0}/cpu97 | 0 .../linux-deconf-cpus/node/node0}/cpu98 | 0 .../linux-deconf-cpus/node/node0}/cpu99 | 0 .../linux-deconf-cpus/node/node0/meminfo | 0 .../linux-deconf-cpus}/node/node1/cpu40 | 0 .../linux-deconf-cpus/node/node1}/cpu41 | 0 .../linux-deconf-cpus/node/node1}/cpu42 | 0 .../linux-deconf-cpus/node/node1}/cpu43 | 0 .../linux-deconf-cpus}/node/node1/cpu44 | 0 .../linux-deconf-cpus/node/node1}/cpu45 | 0 .../linux-deconf-cpus/node/node1}/cpu46 | 0 .../linux-deconf-cpus/node/node1}/cpu47 | 0 .../linux-deconf-cpus}/node/node1/cpu48 | 0 .../linux-deconf-cpus/node/node1}/cpu49 | 0 .../linux-deconf-cpus/node/node1}/cpu50 | 0 .../linux-deconf-cpus/node/node1}/cpu51 | 0 .../linux-deconf-cpus}/node/node1/cpu52 | 0 .../linux-deconf-cpus/node/node1}/cpu53 | 0 .../linux-deconf-cpus/node/node1}/cpu54 | 0 .../linux-deconf-cpus/node/node1}/cpu55 | 0 .../linux-deconf-cpus}/node/node1/cpu72 | 0 .../linux-deconf-cpus}/node/node1/cpu73 | 0 .../linux-deconf-cpus}/node/node1/cpu74 | 0 .../linux-deconf-cpus}/node/node1/cpu75 | 0 .../linux-deconf-cpus}/node/node1/cpu76 | 0 .../linux-deconf-cpus}/node/node1/cpu77 | 0 .../linux-deconf-cpus}/node/node1/cpu78 | 0 .../linux-deconf-cpus}/node/node1/cpu79 | 0 .../linux-deconf-cpus/node/node1/meminfo | 0 .../linux-deconf-cpus}/node/node16/cpu104 | 0 .../linux-deconf-cpus}/node/node16/cpu105 | 0 .../linux-deconf-cpus}/node/node16/cpu106 | 0 .../linux-deconf-cpus}/node/node16/cpu107 | 0 .../linux-deconf-cpus}/node/node16/cpu108 | 0 .../linux-deconf-cpus}/node/node16/cpu109 | 0 .../linux-deconf-cpus}/node/node16/cpu110 | 0 .../linux-deconf-cpus}/node/node16/cpu111 | 0 .../linux-deconf-cpus}/node/node16/cpu112 | 0 .../linux-deconf-cpus}/node/node16/cpu113 | 0 .../linux-deconf-cpus}/node/node16/cpu114 | 0 .../linux-deconf-cpus}/node/node16/cpu115 | 0 .../linux-deconf-cpus}/node/node16/cpu116 | 0 .../linux-deconf-cpus}/node/node16/cpu117 | 0 .../linux-deconf-cpus}/node/node16/cpu118 | 0 .../linux-deconf-cpus}/node/node16/cpu119 | 0 .../linux-deconf-cpus/node/node16/meminfo | 0 .../linux-deconf-cpus}/node/node17/cpu120 | 0 .../linux-deconf-cpus}/node/node17/cpu121 | 0 .../linux-deconf-cpus}/node/node17/cpu122 | 0 .../linux-deconf-cpus}/node/node17/cpu123 | 0 .../linux-deconf-cpus}/node/node17/cpu124 | 0 .../linux-deconf-cpus}/node/node17/cpu125 | 0 .../linux-deconf-cpus}/node/node17/cpu126 | 0 .../linux-deconf-cpus}/node/node17/cpu127 | 0 .../linux-deconf-cpus}/node/node17/cpu128 | 0 .../linux-deconf-cpus}/node/node17/cpu129 | 0 .../linux-deconf-cpus}/node/node17/cpu130 | 0 .../linux-deconf-cpus}/node/node17/cpu131 | 0 .../linux-deconf-cpus}/node/node17/cpu132 | 0 .../linux-deconf-cpus}/node/node17/cpu133 | 0 .../linux-deconf-cpus}/node/node17/cpu134 | 0 .../linux-deconf-cpus}/node/node17/cpu135 | 0 .../linux-deconf-cpus}/node/node17/cpu136 | 0 .../linux-deconf-cpus}/node/node17/cpu137 | 0 .../linux-deconf-cpus}/node/node17/cpu138 | 0 .../linux-deconf-cpus}/node/node17/cpu139 | 0 .../linux-deconf-cpus}/node/node17/cpu140 | 0 .../linux-deconf-cpus}/node/node17/cpu141 | 0 .../linux-deconf-cpus}/node/node17/cpu142 | 0 .../linux-deconf-cpus}/node/node17/cpu143 | 0 .../linux-deconf-cpus/node/node17/meminfo | 0 .../linux-deconf-cpus}/node/online | 0 .../linux-deconf-cpus}/node/possible | 0 .../linux-f21-mustang/cpu/cpu0}/online | 0 .../linux-f21-mustang/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu1}/online | 0 .../linux-f21-mustang/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/core_siblings | 0 .../cpu/cpu1}/topology/core_siblings_list | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../cpu/cpu1/topology/thread_siblings | 0 .../cpu/cpu1/topology/thread_siblings_list} | 0 .../linux-f21-mustang/cpu/cpu2}/online | 0 .../linux-f21-mustang/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/core_siblings | 0 .../cpu/cpu2}/topology/core_siblings_list | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../cpu/cpu2/topology/thread_siblings | 0 .../cpu/cpu2/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu3}/online | 0 .../linux-f21-mustang/cpu/cpu3}/topology/core_id | 0 .../cpu/cpu3}/topology/core_siblings | 0 .../cpu/cpu3}/topology/core_siblings_list | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../cpu/cpu3/topology/thread_siblings | 0 .../cpu/cpu3/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu4}/online | 0 .../linux-f21-mustang/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/core_siblings | 0 .../cpu/cpu4}/topology/core_siblings_list | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../cpu/cpu4/topology/thread_siblings | 0 .../cpu/cpu4/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu5}/online | 0 .../linux-f21-mustang/cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/core_siblings | 0 .../cpu/cpu5}/topology/core_siblings_list | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../cpu/cpu5/topology/thread_siblings | 0 .../cpu/cpu5/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu6}/online | 0 .../linux-f21-mustang/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/core_siblings | 0 .../cpu/cpu6}/topology/core_siblings_list | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../cpu/cpu6/topology/thread_siblings | 0 .../cpu/cpu6/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/cpu7}/online | 0 .../linux-f21-mustang/cpu/cpu7}/topology/core_id | 0 .../cpu/cpu7}/topology/core_siblings | 0 .../cpu/cpu7}/topology/core_siblings_list | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../cpu/cpu7/topology/thread_siblings | 0 .../cpu/cpu7/topology/thread_siblings_list | 0 .../linux-f21-mustang/cpu/kernel_max | 0 .../linux-f21-mustang}/cpu/offline | 0 .../linux-f21-mustang/cpu}/online | 0 .../linux-f21-mustang/cpu}/possible | 0 .../linux-f21-mustang}/cpu/present | 0 .../linux-ppc-test1.cpuinfo | 0 .../linux-ppc-test1.expected | 0 .../linux-ppc64-deconf-cpus.cpuinfo | 0 .../linux-ppc64-deconf-cpus.expected | 0 .../linux-ppc64-subcores1.cpuinfo | 0 .../linux-ppc64-subcores1.expected | 0 .../linux-ppc64-subcores2.cpuinfo | 0 .../linux-ppc64-subcores2.expected | 0 .../linux-ppc64-subcores3.cpuinfo | 0 .../linux-ppc64-subcores3.expected | 0 .../linux-raspberrypi/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0/topology/core_siblings} | 0 .../cpu/cpu0/topology/core_siblings_list} | 0 .../cpu/cpu0/topology/physical_package_id | 0 .../cpu/cpu0/topology/thread_siblings} | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-raspberrypi/cpu/kernel_max} | 0 .../linux-raspberrypi/cpu/offline | 0 .../linux-raspberrypi/cpu}/online | 0 .../linux-raspberrypi/cpu}/possible | 0 .../linux-raspberrypi/cpu/present} | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu0}/online | 0 .../cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0}/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu1}/online | 0 .../cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/core_siblings | 0 .../cpu/cpu1}/topology/core_siblings_list | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../cpu/cpu1/topology/thread_siblings | 0 .../cpu/cpu1/topology/thread_siblings_list} | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu2}/online | 0 .../cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/core_siblings | 0 .../cpu/cpu2}/topology/core_siblings_list | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../cpu/cpu2/topology/thread_siblings | 0 .../cpu/cpu2/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu3}/online | 0 .../cpu/cpu3}/topology/core_id | 0 .../cpu/cpu3}/topology/core_siblings | 0 .../cpu/cpu3}/topology/core_siblings_list | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../cpu/cpu3/topology/thread_siblings | 0 .../cpu/cpu3/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu4}/online | 0 .../cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/core_siblings | 0 .../cpu/cpu4}/topology/core_siblings_list | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../cpu/cpu4/topology/thread_siblings | 0 .../cpu/cpu4/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu5}/online | 0 .../cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/core_siblings | 0 .../cpu/cpu5}/topology/core_siblings_list | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../cpu/cpu5/topology/thread_siblings | 0 .../cpu/cpu5/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu6}/online | 0 .../cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/core_siblings | 0 .../cpu/cpu6}/topology/core_siblings_list | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../cpu/cpu6/topology/thread_siblings | 0 .../cpu/cpu6/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang/cpu/cpu7}/online | 0 .../cpu/cpu7}/topology/core_id | 0 .../cpu/cpu7}/topology/core_siblings | 0 .../cpu/cpu7}/topology/core_siblings_list | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../cpu/cpu7/topology/thread_siblings | 0 .../cpu/cpu7/topology/thread_siblings_list | 0 .../linux-rhelsa-3.19.0-mustang}/cpu/kernel_max | 0 .../linux-rhelsa-3.19.0-mustang}/cpu/offline | 0 .../linux-rhelsa-3.19.0-mustang/cpu/online | 0 .../linux-rhelsa-3.19.0-mustang/cpu}/possible | 0 .../linux-rhelsa-3.19.0-mustang}/cpu/present | 0 .../linux-subcores1/cpu/cpu0}/online | 0 .../linux-subcores1}/cpu/cpu0/topology/core_id | 0 .../cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0/topology/physical_package_id | 0 .../cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu1}/online | 0 .../linux-subcores1/cpu/cpu10}/online | 0 .../linux-subcores1/cpu/cpu100}/online | 0 .../linux-subcores1/cpu/cpu101}/online | 0 .../linux-subcores1/cpu/cpu102}/online | 0 .../linux-subcores1/cpu/cpu103}/online | 0 .../linux-subcores1/cpu/cpu104}/online | 0 .../linux-subcores1}/cpu/cpu104/topology/core_id | 0 .../cpu/cpu104}/topology/core_siblings | 0 .../cpu/cpu104}/topology/core_siblings_list | 0 .../cpu/cpu104}/topology/physical_package_id | 0 .../cpu/cpu104/topology/thread_siblings | 0 .../cpu/cpu104/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu105}/online | 0 .../linux-subcores1/cpu/cpu106}/online | 0 .../linux-subcores1/cpu/cpu107}/online | 0 .../linux-subcores1/cpu/cpu108}/online | 0 .../linux-subcores1/cpu/cpu109}/online | 0 .../linux-subcores1/cpu/cpu11}/online | 0 .../linux-subcores1/cpu/cpu110}/online | 0 .../linux-subcores1/cpu/cpu111}/online | 0 .../linux-subcores1/cpu/cpu112}/online | 0 .../linux-subcores1}/cpu/cpu112/topology/core_id | 0 .../cpu/cpu112}/topology/core_siblings | 0 .../cpu/cpu112}/topology/core_siblings_list | 0 .../cpu/cpu112/topology/physical_package_id | 0 .../cpu/cpu112/topology/thread_siblings | 0 .../cpu/cpu112/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu113}/online | 0 .../linux-subcores1/cpu/cpu114}/online | 0 .../linux-subcores1/cpu/cpu115}/online | 0 .../linux-subcores1/cpu/cpu116}/online | 0 .../linux-subcores1/cpu/cpu117}/online | 0 .../linux-subcores1/cpu/cpu118}/online | 0 .../linux-subcores1/cpu/cpu119}/online | 0 .../linux-subcores1/cpu/cpu12}/online | 0 .../linux-subcores1/cpu/cpu120}/online | 0 .../linux-subcores1}/cpu/cpu120/topology/core_id | 0 .../cpu/cpu120}/topology/core_siblings | 0 .../cpu/cpu120}/topology/core_siblings_list | 0 .../cpu/cpu120}/topology/physical_package_id | 0 .../cpu/cpu120/topology/thread_siblings | 0 .../cpu/cpu120/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu121}/online | 0 .../linux-subcores1/cpu/cpu122}/online | 0 .../linux-subcores1/cpu/cpu123}/online | 0 .../linux-subcores1/cpu/cpu124}/online | 0 .../linux-subcores1/cpu/cpu125}/online | 0 .../linux-subcores1/cpu/cpu126}/online | 0 .../linux-subcores1/cpu/cpu127}/online | 0 .../linux-subcores1/cpu/cpu128}/online | 0 .../linux-subcores1}/cpu/cpu128/topology/core_id | 0 .../cpu/cpu128}/topology/core_siblings | 0 .../cpu/cpu128}/topology/core_siblings_list | 0 .../cpu/cpu128}/topology/physical_package_id | 0 .../cpu/cpu128/topology/thread_siblings | 0 .../cpu/cpu128/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu129}/online | 0 .../linux-subcores1/cpu/cpu13}/online | 0 .../linux-subcores1/cpu/cpu130}/online | 0 .../linux-subcores1/cpu/cpu131}/online | 0 .../linux-subcores1/cpu/cpu132}/online | 0 .../linux-subcores1/cpu/cpu133}/online | 0 .../linux-subcores1/cpu/cpu134}/online | 0 .../linux-subcores1/cpu/cpu135}/online | 0 .../linux-subcores1/cpu/cpu136}/online | 0 .../linux-subcores1}/cpu/cpu136/topology/core_id | 0 .../cpu/cpu136/topology/core_siblings | 0 .../cpu/cpu136/topology/core_siblings_list | 0 .../cpu/cpu136}/topology/physical_package_id | 0 .../cpu/cpu136/topology/thread_siblings | 0 .../cpu/cpu136/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu137}/online | 0 .../linux-subcores1/cpu/cpu138}/online | 0 .../linux-subcores1/cpu/cpu139}/online | 0 .../linux-subcores1/cpu/cpu14}/online | 0 .../linux-subcores1/cpu/cpu140}/online | 0 .../linux-subcores1/cpu/cpu141}/online | 0 .../linux-subcores1/cpu/cpu142}/online | 0 .../linux-subcores1/cpu/cpu143}/online | 0 .../linux-subcores1/cpu/cpu144}/online | 0 .../linux-subcores1/cpu/cpu144/topology/core_id | 0 .../cpu/cpu144}/topology/core_siblings | 0 .../cpu/cpu144}/topology/core_siblings_list | 0 .../cpu/cpu144}/topology/physical_package_id | 0 .../cpu/cpu144/topology/thread_siblings | 0 .../cpu/cpu144/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu145}/online | 0 .../linux-subcores1/cpu/cpu146}/online | 0 .../linux-subcores1/cpu/cpu147}/online | 0 .../linux-subcores1/cpu/cpu148}/online | 0 .../linux-subcores1/cpu/cpu149}/online | 0 .../linux-subcores1/cpu/cpu15}/online | 0 .../linux-subcores1/cpu/cpu150}/online | 0 .../linux-subcores1/cpu/cpu151}/online | 0 .../linux-subcores1/cpu/cpu152}/online | 0 .../linux-subcores1/cpu/cpu152}/topology/core_id | 0 .../cpu/cpu152}/topology/core_siblings | 0 .../cpu/cpu152}/topology/core_siblings_list | 0 .../cpu/cpu152/topology/physical_package_id | 0 .../cpu/cpu152/topology/thread_siblings | 0 .../cpu/cpu152/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu153}/online | 0 .../linux-subcores1/cpu/cpu154}/online | 0 .../linux-subcores1/cpu/cpu155}/online | 0 .../linux-subcores1/cpu/cpu156}/online | 0 .../linux-subcores1/cpu/cpu157}/online | 0 .../linux-subcores1/cpu/cpu158}/online | 0 .../linux-subcores1/cpu/cpu159}/online | 0 .../linux-subcores1/cpu/cpu16}/online | 0 .../linux-subcores1/cpu/cpu16/topology/core_id | 0 .../cpu/cpu16}/topology/core_siblings | 0 .../cpu/cpu16}/topology/core_siblings_list | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../cpu/cpu16/topology/thread_siblings | 0 .../cpu/cpu16/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu17}/online | 0 .../linux-subcores1/cpu/cpu18}/online | 0 .../linux-subcores1/cpu/cpu19}/online | 0 .../linux-subcores1/cpu/cpu2}/online | 0 .../linux-subcores1/cpu/cpu20}/online | 0 .../linux-subcores1/cpu/cpu21}/online | 0 .../linux-subcores1/cpu/cpu22}/online | 0 .../linux-subcores1/cpu/cpu23}/online | 0 .../linux-subcores1/cpu/cpu24}/online | 0 .../linux-subcores1/cpu/cpu24/topology/core_id | 0 .../cpu/cpu24/topology/core_siblings | 0 .../cpu/cpu24/topology/core_siblings_list | 0 .../cpu/cpu24}/topology/physical_package_id | 0 .../cpu/cpu24/topology/thread_siblings | 0 .../cpu/cpu24/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu25}/online | 0 .../linux-subcores1/cpu/cpu26}/online | 0 .../linux-subcores1/cpu/cpu27}/online | 0 .../linux-subcores1/cpu/cpu28}/online | 0 .../linux-subcores1/cpu/cpu29}/online | 0 .../linux-subcores1/cpu/cpu3}/online | 0 .../linux-subcores1/cpu/cpu30}/online | 0 .../linux-subcores1/cpu/cpu31}/online | 0 .../linux-subcores1/cpu/cpu32}/online | 0 .../linux-subcores1}/cpu/cpu32/topology/core_id | 0 .../cpu/cpu32}/topology/core_siblings | 0 .../cpu/cpu32}/topology/core_siblings_list | 0 .../cpu/cpu32}/topology/physical_package_id | 0 .../cpu/cpu32/topology/thread_siblings | 0 .../cpu/cpu32/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu33}/online | 0 .../linux-subcores1/cpu/cpu34}/online | 0 .../linux-subcores1/cpu/cpu35}/online | 0 .../linux-subcores1/cpu/cpu36}/online | 0 .../linux-subcores1/cpu/cpu37}/online | 0 .../linux-subcores1/cpu/cpu38}/online | 0 .../linux-subcores1/cpu/cpu39}/online | 0 .../linux-subcores1/cpu/cpu4}/online | 0 .../linux-subcores1/cpu/cpu40}/online | 0 .../linux-subcores1}/cpu/cpu40/topology/core_id | 0 .../cpu/cpu40}/topology/core_siblings | 0 .../cpu/cpu40}/topology/core_siblings_list | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../cpu/cpu40/topology/thread_siblings | 0 .../cpu/cpu40/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu41}/online | 0 .../linux-subcores1/cpu/cpu42}/online | 0 .../linux-subcores1/cpu/cpu43}/online | 0 .../linux-subcores1/cpu/cpu44}/online | 0 .../linux-subcores1/cpu/cpu45}/online | 0 .../linux-subcores1/cpu/cpu46}/online | 0 .../linux-subcores1/cpu/cpu47}/online | 0 .../linux-subcores1/cpu/cpu48}/online | 0 .../linux-subcores1}/cpu/cpu48/topology/core_id | 0 .../cpu/cpu48}/topology/core_siblings | 0 .../cpu/cpu48}/topology/core_siblings_list | 0 .../cpu/cpu48}/topology/physical_package_id | 0 .../cpu/cpu48/topology/thread_siblings | 0 .../cpu/cpu48/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu49}/online | 0 .../linux-subcores1/cpu/cpu5}/online | 0 .../linux-subcores1/cpu/cpu50}/online | 0 .../linux-subcores1/cpu/cpu51}/online | 0 .../linux-subcores1/cpu/cpu52}/online | 0 .../linux-subcores1/cpu/cpu53}/online | 0 .../linux-subcores1/cpu/cpu54}/online | 0 .../linux-subcores1/cpu/cpu55}/online | 0 .../linux-subcores1/cpu/cpu56}/online | 0 .../linux-subcores1}/cpu/cpu56/topology/core_id | 0 .../cpu/cpu56/topology/core_siblings | 0 .../cpu/cpu56/topology/core_siblings_list | 0 .../cpu/cpu56}/topology/physical_package_id | 0 .../cpu/cpu56/topology/thread_siblings | 0 .../cpu/cpu56/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu57}/online | 0 .../linux-subcores1/cpu/cpu58}/online | 0 .../linux-subcores1/cpu/cpu59}/online | 0 .../linux-subcores1/cpu/cpu6}/online | 0 .../linux-subcores1/cpu/cpu60}/online | 0 .../linux-subcores1/cpu/cpu61}/online | 0 .../linux-subcores1/cpu/cpu62}/online | 0 .../linux-subcores1/cpu/cpu63}/online | 0 .../linux-subcores1/cpu/cpu64}/online | 0 .../linux-subcores1/cpu/cpu64}/topology/core_id | 0 .../cpu/cpu64}/topology/core_siblings | 0 .../cpu/cpu64}/topology/core_siblings_list | 0 .../cpu/cpu64}/topology/physical_package_id | 0 .../cpu/cpu64/topology/thread_siblings | 0 .../cpu/cpu64/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu65}/online | 0 .../linux-subcores1/cpu/cpu66}/online | 0 .../linux-subcores1/cpu/cpu67}/online | 0 .../linux-subcores1/cpu/cpu68}/online | 0 .../linux-subcores1/cpu/cpu69}/online | 0 .../linux-subcores1/cpu/cpu7}/online | 0 .../linux-subcores1/cpu/cpu70}/online | 0 .../linux-subcores1/cpu/cpu71}/online | 0 .../linux-subcores1/cpu/cpu72}/online | 0 .../linux-subcores1}/cpu/cpu72/topology/core_id | 0 .../cpu/cpu72}/topology/core_siblings | 0 .../cpu/cpu72}/topology/core_siblings_list | 0 .../cpu/cpu72}/topology/physical_package_id | 0 .../cpu/cpu72/topology/thread_siblings | 0 .../cpu/cpu72/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu73}/online | 0 .../linux-subcores1/cpu/cpu74}/online | 0 .../linux-subcores1/cpu/cpu75}/online | 0 .../linux-subcores1/cpu/cpu76}/online | 0 .../linux-subcores1/cpu/cpu77}/online | 0 .../linux-subcores1/cpu/cpu78}/online | 0 .../linux-subcores1/cpu/cpu79}/online | 0 .../linux-subcores1/cpu/cpu8}/online | 0 .../linux-subcores1}/cpu/cpu8/topology/core_id | 0 .../cpu/cpu8}/topology/core_siblings | 0 .../cpu/cpu8}/topology/core_siblings_list | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../cpu/cpu8/topology/thread_siblings | 0 .../cpu/cpu8/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu80}/online | 0 .../linux-subcores1}/cpu/cpu80/topology/core_id | 0 .../cpu/cpu80/topology/core_siblings | 0 .../cpu/cpu80/topology/core_siblings_list | 0 .../cpu/cpu80}/topology/physical_package_id | 0 .../cpu/cpu80/topology/thread_siblings | 0 .../cpu/cpu80/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu81}/online | 0 .../linux-subcores1/cpu/cpu82}/online | 0 .../linux-subcores1/cpu/cpu83}/online | 0 .../linux-subcores1/cpu/cpu84}/online | 0 .../linux-subcores1/cpu/cpu85}/online | 0 .../linux-subcores1/cpu/cpu86}/online | 0 .../linux-subcores1/cpu/cpu87}/online | 0 .../linux-subcores1/cpu/cpu88}/online | 0 .../linux-subcores1}/cpu/cpu88/topology/core_id | 0 .../cpu/cpu88}/topology/core_siblings | 0 .../cpu/cpu88}/topology/core_siblings_list | 0 .../cpu/cpu88}/topology/physical_package_id | 0 .../cpu/cpu88/topology/thread_siblings | 0 .../cpu/cpu88/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu89}/online | 0 .../linux-subcores1/cpu/cpu9}/online | 0 .../linux-subcores1/cpu/cpu90}/online | 0 .../linux-subcores1/cpu/cpu91}/online | 0 .../linux-subcores1/cpu/cpu92}/online | 0 .../linux-subcores1/cpu/cpu93}/online | 0 .../linux-subcores1/cpu/cpu94}/online | 0 .../linux-subcores1/cpu/cpu95}/online | 0 .../linux-subcores1/cpu/cpu96}/online | 0 .../linux-subcores1}/cpu/cpu96/topology/core_id | 0 .../cpu/cpu96}/topology/core_siblings | 0 .../cpu/cpu96}/topology/core_siblings_list | 0 .../cpu/cpu96}/topology/physical_package_id | 0 .../cpu/cpu96/topology/thread_siblings | 0 .../cpu/cpu96/topology/thread_siblings_list | 0 .../linux-subcores1/cpu/cpu97}/online | 0 .../linux-subcores1/cpu/cpu98}/online | 0 .../linux-subcores1/cpu/cpu99}/online | 0 .../linux-subcores1}/cpu/kernel_max | 0 .../linux-subcores1/cpu/offline | 0 .../linux-subcores1/cpu/online | 0 .../linux-subcores1}/cpu/possible | 0 .../linux-subcores1}/cpu/present | 0 .../linux-subcores1}/node/node0/cpu0 | 0 .../linux-subcores1}/node/node0/cpu1 | 0 .../linux-subcores1}/node/node0/cpu10 | 0 .../linux-subcores1}/node/node0/cpu11 | 0 .../linux-subcores1}/node/node0/cpu12 | 0 .../linux-subcores1}/node/node0/cpu13 | 0 .../linux-subcores1}/node/node0/cpu14 | 0 .../linux-subcores1}/node/node0/cpu15 | 0 .../linux-subcores1}/node/node0/cpu16 | 0 .../linux-subcores1}/node/node0/cpu17 | 0 .../linux-subcores1}/node/node0/cpu18 | 0 .../linux-subcores1}/node/node0/cpu19 | 0 .../linux-subcores1}/node/node0/cpu2 | 0 .../linux-subcores1}/node/node0/cpu20 | 0 .../linux-subcores1}/node/node0/cpu21 | 0 .../linux-subcores1}/node/node0/cpu22 | 0 .../linux-subcores1}/node/node0/cpu23 | 0 .../linux-subcores1/node/node0}/cpu24 | 0 .../linux-subcores1/node/node0}/cpu25 | 0 .../linux-subcores1/node/node0}/cpu26 | 0 .../linux-subcores1/node/node0}/cpu27 | 0 .../linux-subcores1/node/node0}/cpu28 | 0 .../linux-subcores1/node/node0}/cpu29 | 0 .../linux-subcores1}/node/node0/cpu3 | 0 .../linux-subcores1/node/node0}/cpu30 | 0 .../linux-subcores1/node/node0}/cpu31 | 0 .../linux-subcores1/node/node0}/cpu32 | 0 .../linux-subcores1/node/node0}/cpu33 | 0 .../linux-subcores1/node/node0}/cpu34 | 0 .../linux-subcores1/node/node0}/cpu35 | 0 .../linux-subcores1/node/node0}/cpu36 | 0 .../linux-subcores1/node/node0}/cpu37 | 0 .../linux-subcores1/node/node0}/cpu38 | 0 .../linux-subcores1/node/node0}/cpu39 | 0 .../linux-subcores1}/node/node0/cpu4 | 0 .../linux-subcores1}/node/node0/cpu5 | 0 .../linux-subcores1}/node/node0/cpu6 | 0 .../linux-subcores1}/node/node0/cpu7 | 0 .../linux-subcores1}/node/node0/cpu8 | 0 .../linux-subcores1}/node/node0/cpu9 | 0 .../linux-subcores1/node/node0/meminfo | 0 .../linux-subcores1}/node/node1/cpu40 | 0 .../linux-subcores1/node/node1}/cpu41 | 0 .../linux-subcores1/node/node1}/cpu42 | 0 .../linux-subcores1/node/node1}/cpu43 | 0 .../linux-subcores1}/node/node1/cpu44 | 0 .../linux-subcores1/node/node1}/cpu45 | 0 .../linux-subcores1/node/node1}/cpu46 | 0 .../linux-subcores1/node/node1}/cpu47 | 0 .../linux-subcores1}/node/node1/cpu48 | 0 .../linux-subcores1}/node/node1/cpu49 | 0 .../linux-subcores1}/node/node1/cpu50 | 0 .../linux-subcores1}/node/node1/cpu51 | 0 .../linux-subcores1}/node/node1/cpu52 | 0 .../linux-subcores1}/node/node1/cpu53 | 0 .../linux-subcores1}/node/node1/cpu54 | 0 .../linux-subcores1}/node/node1/cpu55 | 0 .../linux-subcores1}/node/node1/cpu56 | 0 .../linux-subcores1}/node/node1/cpu57 | 0 .../linux-subcores1}/node/node1/cpu58 | 0 .../linux-subcores1}/node/node1/cpu59 | 0 .../linux-subcores1}/node/node1/cpu60 | 0 .../linux-subcores1}/node/node1/cpu61 | 0 .../linux-subcores1}/node/node1/cpu62 | 0 .../linux-subcores1}/node/node1/cpu63 | 0 .../linux-subcores1}/node/node1/cpu64 | 0 .../linux-subcores1}/node/node1/cpu65 | 0 .../linux-subcores1}/node/node1/cpu66 | 0 .../linux-subcores1}/node/node1/cpu67 | 0 .../linux-subcores1}/node/node1/cpu68 | 0 .../linux-subcores1}/node/node1/cpu69 | 0 .../linux-subcores1}/node/node1/cpu70 | 0 .../linux-subcores1}/node/node1/cpu71 | 0 .../linux-subcores1}/node/node1/cpu72 | 0 .../linux-subcores1}/node/node1/cpu73 | 0 .../linux-subcores1}/node/node1/cpu74 | 0 .../linux-subcores1}/node/node1/cpu75 | 0 .../linux-subcores1}/node/node1/cpu76 | 0 .../linux-subcores1}/node/node1/cpu77 | 0 .../linux-subcores1}/node/node1/cpu78 | 0 .../linux-subcores1}/node/node1/cpu79 | 0 .../linux-subcores1/node/node1/meminfo | 0 .../linux-subcores1}/node/node16/cpu100 | 0 .../linux-subcores1}/node/node16/cpu101 | 0 .../linux-subcores1}/node/node16/cpu102 | 0 .../linux-subcores1}/node/node16/cpu103 | 0 .../linux-subcores1}/node/node16/cpu104 | 0 .../linux-subcores1}/node/node16/cpu105 | 0 .../linux-subcores1}/node/node16/cpu106 | 0 .../linux-subcores1}/node/node16/cpu107 | 0 .../linux-subcores1}/node/node16/cpu108 | 0 .../linux-subcores1}/node/node16/cpu109 | 0 .../linux-subcores1}/node/node16/cpu110 | 0 .../linux-subcores1}/node/node16/cpu111 | 0 .../linux-subcores1}/node/node16/cpu112 | 0 .../linux-subcores1}/node/node16/cpu113 | 0 .../linux-subcores1}/node/node16/cpu114 | 0 .../linux-subcores1}/node/node16/cpu115 | 0 .../linux-subcores1}/node/node16/cpu116 | 0 .../linux-subcores1}/node/node16/cpu117 | 0 .../linux-subcores1}/node/node16/cpu118 | 0 .../linux-subcores1}/node/node16/cpu119 | 0 .../linux-subcores1}/node/node16/cpu80 | 0 .../linux-subcores1}/node/node16/cpu81 | 0 .../linux-subcores1}/node/node16/cpu82 | 0 .../linux-subcores1}/node/node16/cpu83 | 0 .../linux-subcores1}/node/node16/cpu84 | 0 .../linux-subcores1}/node/node16/cpu85 | 0 .../linux-subcores1}/node/node16/cpu86 | 0 .../linux-subcores1}/node/node16/cpu87 | 0 .../linux-subcores1}/node/node16/cpu88 | 0 .../linux-subcores1}/node/node16/cpu89 | 0 .../linux-subcores1}/node/node16/cpu90 | 0 .../linux-subcores1}/node/node16/cpu91 | 0 .../linux-subcores1}/node/node16/cpu92 | 0 .../linux-subcores1}/node/node16/cpu93 | 0 .../linux-subcores1}/node/node16/cpu94 | 0 .../linux-subcores1}/node/node16/cpu95 | 0 .../linux-subcores1}/node/node16/cpu96 | 0 .../linux-subcores1}/node/node16/cpu97 | 0 .../linux-subcores1}/node/node16/cpu98 | 0 .../linux-subcores1}/node/node16/cpu99 | 0 .../linux-subcores1/node/node16/meminfo | 0 .../linux-subcores1}/node/node17/cpu120 | 0 .../linux-subcores1}/node/node17/cpu121 | 0 .../linux-subcores1}/node/node17/cpu122 | 0 .../linux-subcores1}/node/node17/cpu123 | 0 .../linux-subcores1}/node/node17/cpu124 | 0 .../linux-subcores1}/node/node17/cpu125 | 0 .../linux-subcores1}/node/node17/cpu126 | 0 .../linux-subcores1}/node/node17/cpu127 | 0 .../linux-subcores1}/node/node17/cpu128 | 0 .../linux-subcores1}/node/node17/cpu129 | 0 .../linux-subcores1}/node/node17/cpu130 | 0 .../linux-subcores1}/node/node17/cpu131 | 0 .../linux-subcores1}/node/node17/cpu132 | 0 .../linux-subcores1}/node/node17/cpu133 | 0 .../linux-subcores1}/node/node17/cpu134 | 0 .../linux-subcores1}/node/node17/cpu135 | 0 .../linux-subcores1}/node/node17/cpu136 | 0 .../linux-subcores1}/node/node17/cpu137 | 0 .../linux-subcores1}/node/node17/cpu138 | 0 .../linux-subcores1}/node/node17/cpu139 | 0 .../linux-subcores1}/node/node17/cpu140 | 0 .../linux-subcores1}/node/node17/cpu141 | 0 .../linux-subcores1}/node/node17/cpu142 | 0 .../linux-subcores1}/node/node17/cpu143 | 0 .../linux-subcores1}/node/node17/cpu144 | 0 .../linux-subcores1}/node/node17/cpu145 | 0 .../linux-subcores1}/node/node17/cpu146 | 0 .../linux-subcores1}/node/node17/cpu147 | 0 .../linux-subcores1}/node/node17/cpu148 | 0 .../linux-subcores1}/node/node17/cpu149 | 0 .../linux-subcores1}/node/node17/cpu150 | 0 .../linux-subcores1}/node/node17/cpu151 | 0 .../linux-subcores1}/node/node17/cpu152 | 0 .../linux-subcores1}/node/node17/cpu153 | 0 .../linux-subcores1}/node/node17/cpu154 | 0 .../linux-subcores1}/node/node17/cpu155 | 0 .../linux-subcores1}/node/node17/cpu156 | 0 .../linux-subcores1}/node/node17/cpu157 | 0 .../linux-subcores1}/node/node17/cpu158 | 0 .../linux-subcores1}/node/node17/cpu159 | 0 .../linux-subcores1/node/node17/meminfo | 0 .../linux-subcores1}/node/online | 0 .../linux-subcores1}/node/possible | 0 .../linux-subcores2/cpu/cpu0}/online | 0 .../linux-subcores2}/cpu/cpu0/topology/core_id | 0 .../cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu1}/online | 0 .../linux-subcores2/cpu/cpu10}/online | 0 .../linux-subcores2/cpu/cpu100}/online | 0 .../linux-subcores2/cpu/cpu101}/online | 0 .../linux-subcores2/cpu/cpu102}/online | 0 .../linux-subcores2/cpu/cpu103}/online | 0 .../linux-subcores2/cpu/cpu104}/online | 0 .../linux-subcores2}/cpu/cpu104/topology/core_id | 0 .../cpu/cpu104}/topology/core_siblings | 0 .../cpu/cpu104}/topology/core_siblings_list | 0 .../cpu/cpu104}/topology/physical_package_id | 0 .../cpu/cpu104/topology/thread_siblings | 0 .../cpu/cpu104/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu105}/online | 0 .../linux-subcores2/cpu/cpu106}/online | 0 .../linux-subcores2/cpu/cpu107}/online | 0 .../linux-subcores2/cpu/cpu108}/online | 0 .../linux-subcores2/cpu/cpu109}/online | 0 .../linux-subcores2/cpu/cpu11}/online | 0 .../linux-subcores2/cpu/cpu110}/online | 0 .../linux-subcores2/cpu/cpu111}/online | 0 .../linux-subcores2/cpu/cpu112}/online | 0 .../linux-subcores2}/cpu/cpu112/topology/core_id | 0 .../cpu/cpu112}/topology/core_siblings | 0 .../cpu/cpu112}/topology/core_siblings_list | 0 .../cpu/cpu112/topology/physical_package_id | 0 .../cpu/cpu112/topology/thread_siblings | 0 .../cpu/cpu112/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu113}/online | 0 .../linux-subcores2/cpu/cpu114}/online | 0 .../linux-subcores2/cpu/cpu115}/online | 0 .../linux-subcores2/cpu/cpu116}/online | 0 .../linux-subcores2/cpu/cpu117}/online | 0 .../linux-subcores2/cpu/cpu118}/online | 0 .../linux-subcores2/cpu/cpu119}/online | 0 .../linux-subcores2/cpu/cpu12}/online | 0 .../linux-subcores2/cpu/cpu120}/online | 0 .../linux-subcores2/cpu/cpu121}/online | 0 .../linux-subcores2/cpu/cpu122}/online | 0 .../linux-subcores2/cpu/cpu123}/online | 0 .../linux-subcores2/cpu/cpu124}/online | 0 .../linux-subcores2/cpu/cpu125}/online | 0 .../linux-subcores2/cpu/cpu126}/online | 0 .../linux-subcores2/cpu/cpu127}/online | 0 .../linux-subcores2/cpu/cpu128}/online | 0 .../linux-subcores2}/cpu/cpu128/topology/core_id | 0 .../cpu/cpu128/topology/core_siblings | 0 .../cpu/cpu128/topology/core_siblings_list | 0 .../cpu/cpu128}/topology/physical_package_id | 0 .../cpu/cpu128/topology/thread_siblings | 0 .../cpu/cpu128/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu129}/online | 0 .../linux-subcores2/cpu/cpu13}/online | 0 .../linux-subcores2/cpu/cpu130}/online | 0 .../linux-subcores2/cpu/cpu131}/online | 0 .../linux-subcores2/cpu/cpu132}/online | 0 .../linux-subcores2/cpu/cpu133}/online | 0 .../linux-subcores2/cpu/cpu134}/online | 0 .../linux-subcores2/cpu/cpu135}/online | 0 .../linux-subcores2/cpu/cpu136}/online | 0 .../linux-subcores2}/cpu/cpu136/topology/core_id | 0 .../cpu/cpu136/topology/core_siblings | 0 .../cpu/cpu136/topology/core_siblings_list | 0 .../cpu/cpu136}/topology/physical_package_id | 0 .../cpu/cpu136/topology/thread_siblings | 0 .../cpu/cpu136/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu137}/online | 0 .../linux-subcores2/cpu/cpu138}/online | 0 .../linux-subcores2/cpu/cpu139}/online | 0 .../linux-subcores2/cpu/cpu14}/online | 0 .../linux-subcores2/cpu/cpu140}/online | 0 .../linux-subcores2/cpu/cpu141}/online | 0 .../linux-subcores2/cpu/cpu142}/online | 0 .../linux-subcores2/cpu/cpu143}/online | 0 .../linux-subcores2/cpu/cpu144}/online | 0 .../linux-subcores2/cpu/cpu145}/online | 0 .../linux-subcores2/cpu/cpu146}/online | 0 .../linux-subcores2/cpu/cpu147}/online | 0 .../linux-subcores2/cpu/cpu148}/online | 0 .../linux-subcores2/cpu/cpu149}/online | 0 .../linux-subcores2/cpu/cpu15}/online | 0 .../linux-subcores2/cpu/cpu150}/online | 0 .../linux-subcores2/cpu/cpu151}/online | 0 .../linux-subcores2/cpu/cpu152}/online | 0 .../linux-subcores2/cpu/cpu153}/online | 0 .../linux-subcores2/cpu/cpu154}/online | 0 .../linux-subcores2/cpu/cpu155}/online | 0 .../linux-subcores2/cpu/cpu156}/online | 0 .../linux-subcores2/cpu/cpu157}/online | 0 .../linux-subcores2/cpu/cpu158}/online | 0 .../linux-subcores2/cpu/cpu159}/online | 0 .../linux-subcores2/cpu/cpu16}/online | 0 .../linux-subcores2}/cpu/cpu16/topology/core_id | 0 .../cpu/cpu16}/topology/core_siblings | 0 .../cpu/cpu16}/topology/core_siblings_list | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../cpu/cpu16/topology/thread_siblings | 0 .../cpu/cpu16/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu17}/online | 0 .../linux-subcores2/cpu/cpu18}/online | 0 .../linux-subcores2/cpu/cpu19}/online | 0 .../linux-subcores2/cpu/cpu2}/online | 0 .../linux-subcores2/cpu/cpu20}/online | 0 .../linux-subcores2/cpu/cpu21}/online | 0 .../linux-subcores2/cpu/cpu22}/online | 0 .../linux-subcores2/cpu/cpu23}/online | 0 .../linux-subcores2/cpu/cpu24}/online | 0 .../linux-subcores2}/cpu/cpu24/topology/core_id | 0 .../cpu/cpu24/topology/core_siblings | 0 .../cpu/cpu24/topology/core_siblings_list | 0 .../cpu/cpu24}/topology/physical_package_id | 0 .../cpu/cpu24/topology/thread_siblings | 0 .../cpu/cpu24/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu25}/online | 0 .../linux-subcores2/cpu/cpu26}/online | 0 .../linux-subcores2/cpu/cpu27}/online | 0 .../linux-subcores2/cpu/cpu28}/online | 0 .../linux-subcores2/cpu/cpu29}/online | 0 .../linux-subcores2/cpu/cpu3}/online | 0 .../linux-subcores2/cpu/cpu30}/online | 0 .../linux-subcores2/cpu/cpu31}/online | 0 .../linux-subcores2/cpu/cpu32}/online | 0 .../linux-subcores2}/cpu/cpu32/topology/core_id | 0 .../cpu/cpu32}/topology/core_siblings | 0 .../cpu/cpu32}/topology/core_siblings_list | 0 .../cpu/cpu32}/topology/physical_package_id | 0 .../cpu/cpu32/topology/thread_siblings | 0 .../cpu/cpu32/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu33}/online | 0 .../linux-subcores2/cpu/cpu34}/online | 0 .../linux-subcores2/cpu/cpu35}/online | 0 .../linux-subcores2/cpu/cpu36}/online | 0 .../linux-subcores2/cpu/cpu37}/online | 0 .../linux-subcores2/cpu/cpu38}/online | 0 .../linux-subcores2/cpu/cpu39}/online | 0 .../linux-subcores2/cpu/cpu4}/online | 0 .../linux-subcores2/cpu/cpu40}/online | 0 .../linux-subcores2}/cpu/cpu40/topology/core_id | 0 .../cpu/cpu40}/topology/core_siblings | 0 .../cpu/cpu40}/topology/core_siblings_list | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../cpu/cpu40/topology/thread_siblings | 0 .../cpu/cpu40/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu41}/online | 0 .../linux-subcores2/cpu/cpu42}/online | 0 .../linux-subcores2/cpu/cpu43}/online | 0 .../linux-subcores2/cpu/cpu44}/online | 0 .../linux-subcores2/cpu/cpu45}/online | 0 .../linux-subcores2/cpu/cpu46}/online | 0 .../linux-subcores2/cpu/cpu47}/online | 0 .../linux-subcores2/cpu/cpu48}/online | 0 .../linux-subcores2}/cpu/cpu48/topology/core_id | 0 .../cpu/cpu48/topology/core_siblings | 0 .../cpu/cpu48/topology/core_siblings_list | 0 .../cpu/cpu48}/topology/physical_package_id | 0 .../cpu/cpu48/topology/thread_siblings | 0 .../cpu/cpu48/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu49}/online | 0 .../linux-subcores2/cpu/cpu5}/online | 0 .../linux-subcores2/cpu/cpu50}/online | 0 .../linux-subcores2/cpu/cpu51}/online | 0 .../linux-subcores2/cpu/cpu52}/online | 0 .../linux-subcores2/cpu/cpu53}/online | 0 .../linux-subcores2/cpu/cpu54}/online | 0 .../linux-subcores2/cpu/cpu55}/online | 0 .../linux-subcores2/cpu/cpu56}/online | 0 .../linux-subcores2/cpu/cpu56/topology/core_id | 0 .../cpu/cpu56/topology/core_siblings | 0 .../cpu/cpu56/topology/core_siblings_list | 0 .../cpu/cpu56}/topology/physical_package_id | 0 .../cpu/cpu56/topology/thread_siblings | 0 .../cpu/cpu56/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu57}/online | 0 .../linux-subcores2/cpu/cpu58}/online | 0 .../linux-subcores2/cpu/cpu59}/online | 0 .../linux-subcores2/cpu/cpu6}/online | 0 .../linux-subcores2/cpu/cpu60}/online | 0 .../linux-subcores2/cpu/cpu61}/online | 0 .../linux-subcores2/cpu/cpu62}/online | 0 .../linux-subcores2/cpu/cpu63}/online | 0 .../linux-subcores2/cpu/cpu64}/online | 0 .../linux-subcores2/cpu/cpu65}/online | 0 .../linux-subcores2/cpu/cpu66}/online | 0 .../linux-subcores2/cpu/cpu67}/online | 0 .../linux-subcores2/cpu/cpu68}/online | 0 .../linux-subcores2/cpu/cpu69}/online | 0 .../linux-subcores2/cpu/cpu7}/online | 0 .../linux-subcores2/cpu/cpu70}/online | 0 .../linux-subcores2/cpu/cpu71}/online | 0 .../linux-subcores2/cpu/cpu72}/online | 0 .../linux-subcores2}/cpu/cpu72/topology/core_id | 0 .../cpu/cpu72}/topology/core_siblings | 0 .../cpu/cpu72}/topology/core_siblings_list | 0 .../cpu/cpu72}/topology/physical_package_id | 0 .../cpu/cpu72/topology/thread_siblings | 0 .../cpu/cpu72/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu73}/online | 0 .../linux-subcores2/cpu/cpu74}/online | 0 .../linux-subcores2/cpu/cpu75}/online | 0 .../linux-subcores2/cpu/cpu76}/online | 0 .../linux-subcores2/cpu/cpu77}/online | 0 .../linux-subcores2/cpu/cpu78}/online | 0 .../linux-subcores2/cpu/cpu79}/online | 0 .../linux-subcores2/cpu/cpu8}/online | 0 .../linux-subcores2/cpu/cpu8/topology/core_id | 0 .../cpu/cpu8}/topology/core_siblings | 0 .../cpu/cpu8}/topology/core_siblings_list | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../cpu/cpu8/topology/thread_siblings | 0 .../cpu/cpu8/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu80}/online | 0 .../linux-subcores2/cpu/cpu80/topology/core_id | 0 .../cpu/cpu80}/topology/core_siblings | 0 .../cpu/cpu80}/topology/core_siblings_list | 0 .../cpu/cpu80}/topology/physical_package_id | 0 .../cpu/cpu80/topology/thread_siblings | 0 .../cpu/cpu80/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu81}/online | 0 .../linux-subcores2/cpu/cpu82}/online | 0 .../linux-subcores2/cpu/cpu83}/online | 0 .../linux-subcores2/cpu/cpu84}/online | 0 .../linux-subcores2/cpu/cpu85}/online | 0 .../linux-subcores2/cpu/cpu86}/online | 0 .../linux-subcores2/cpu/cpu87}/online | 0 .../linux-subcores2/cpu/cpu88}/online | 0 .../linux-subcores2/cpu/cpu88/topology/core_id | 0 .../cpu/cpu88}/topology/core_siblings | 0 .../cpu/cpu88}/topology/core_siblings_list | 0 .../cpu/cpu88}/topology/physical_package_id | 0 .../cpu/cpu88/topology/thread_siblings | 0 .../cpu/cpu88/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu89}/online | 0 .../linux-subcores2/cpu/cpu9}/online | 0 .../linux-subcores2/cpu/cpu90}/online | 0 .../linux-subcores2/cpu/cpu91}/online | 0 .../linux-subcores2/cpu/cpu92}/online | 0 .../linux-subcores2/cpu/cpu93}/online | 0 .../linux-subcores2/cpu/cpu94}/online | 0 .../linux-subcores2/cpu/cpu95}/online | 0 .../linux-subcores2/cpu/cpu96}/online | 0 .../linux-subcores2/cpu/cpu96/topology/core_id | 0 .../cpu/cpu96/topology/core_siblings | 0 .../cpu/cpu96/topology/core_siblings_list | 0 .../cpu/cpu96}/topology/physical_package_id | 0 .../cpu/cpu96/topology/thread_siblings | 0 .../cpu/cpu96/topology/thread_siblings_list | 0 .../linux-subcores2/cpu/cpu97}/online | 0 .../linux-subcores2/cpu/cpu98}/online | 0 .../linux-subcores2/cpu/cpu99}/online | 0 .../linux-subcores2}/cpu/kernel_max | 0 .../linux-subcores2/cpu/offline | 0 .../linux-subcores2/cpu/online | 0 .../linux-subcores2}/cpu/possible | 0 .../linux-subcores2/cpu/present | 0 .../linux-subcores2}/node/node0/cpu0 | 0 .../linux-subcores2}/node/node0/cpu1 | 0 .../linux-subcores2/node/node0}/cpu10 | 0 .../linux-subcores2/node/node0}/cpu11 | 0 .../linux-subcores2/node/node0}/cpu12 | 0 .../linux-subcores2/node/node0}/cpu13 | 0 .../linux-subcores2/node/node0}/cpu14 | 0 .../linux-subcores2/node/node0}/cpu15 | 0 .../linux-subcores2}/node/node0/cpu16 | 0 .../linux-subcores2/node/node0}/cpu17 | 0 .../linux-subcores2/node/node0}/cpu18 | 0 .../linux-subcores2/node/node0}/cpu19 | 0 .../linux-subcores2}/node/node0/cpu2 | 0 .../linux-subcores2}/node/node0/cpu20 | 0 .../linux-subcores2/node/node0}/cpu21 | 0 .../linux-subcores2/node/node0}/cpu22 | 0 .../linux-subcores2/node/node0}/cpu23 | 0 .../linux-subcores2}/node/node0/cpu24 | 0 .../linux-subcores2}/node/node0/cpu25 | 0 .../linux-subcores2}/node/node0/cpu26 | 0 .../linux-subcores2}/node/node0/cpu27 | 0 .../linux-subcores2}/node/node0/cpu28 | 0 .../linux-subcores2}/node/node0/cpu29 | 0 .../linux-subcores2}/node/node0/cpu3 | 0 .../linux-subcores2}/node/node0/cpu30 | 0 .../linux-subcores2}/node/node0/cpu31 | 0 .../linux-subcores2}/node/node0/cpu32 | 0 .../linux-subcores2}/node/node0/cpu33 | 0 .../linux-subcores2}/node/node0/cpu34 | 0 .../linux-subcores2}/node/node0/cpu35 | 0 .../linux-subcores2}/node/node0/cpu36 | 0 .../linux-subcores2}/node/node0/cpu37 | 0 .../linux-subcores2}/node/node0/cpu38 | 0 .../linux-subcores2}/node/node0/cpu39 | 0 .../linux-subcores2}/node/node0/cpu4 | 0 .../linux-subcores2}/node/node0/cpu5 | 0 .../linux-subcores2}/node/node0/cpu6 | 0 .../linux-subcores2}/node/node0/cpu7 | 0 .../linux-subcores2/node/node0}/cpu8 | 0 .../linux-subcores2/node/node0}/cpu9 | 0 .../linux-subcores2/node/node0/meminfo | 0 .../linux-subcores2}/node/node1/cpu40 | 0 .../linux-subcores2}/node/node1/cpu41 | 0 .../linux-subcores2}/node/node1/cpu42 | 0 .../linux-subcores2}/node/node1/cpu43 | 0 .../linux-subcores2}/node/node1/cpu44 | 0 .../linux-subcores2}/node/node1/cpu45 | 0 .../linux-subcores2}/node/node1/cpu46 | 0 .../linux-subcores2}/node/node1/cpu47 | 0 .../linux-subcores2/node/node1/cpu48 | 0 .../linux-subcores2/node/node1/cpu49 | 0 .../linux-subcores2/node/node1/cpu50 | 0 .../linux-subcores2/node/node1/cpu51 | 0 .../linux-subcores2/node/node1/cpu52 | 0 .../linux-subcores2/node/node1/cpu53 | 0 .../linux-subcores2/node/node1/cpu54 | 0 .../linux-subcores2/node/node1/cpu55 | 0 .../linux-subcores2/node/node1/cpu56 | 0 .../linux-subcores2/node/node1/cpu57 | 0 .../linux-subcores2/node/node1/cpu58 | 0 .../linux-subcores2/node/node1/cpu59 | 0 .../linux-subcores2/node/node1/cpu60 | 0 .../linux-subcores2/node/node1/cpu61 | 0 .../linux-subcores2/node/node1/cpu62 | 0 .../linux-subcores2/node/node1/cpu63 | 0 .../linux-subcores2}/node/node1/cpu64 | 0 .../linux-subcores2}/node/node1/cpu65 | 0 .../linux-subcores2}/node/node1/cpu66 | 0 .../linux-subcores2}/node/node1/cpu67 | 0 .../linux-subcores2}/node/node1/cpu68 | 0 .../linux-subcores2}/node/node1/cpu69 | 0 .../linux-subcores2}/node/node1/cpu70 | 0 .../linux-subcores2}/node/node1/cpu71 | 0 .../linux-subcores2}/node/node1/cpu72 | 0 .../linux-subcores2}/node/node1/cpu73 | 0 .../linux-subcores2}/node/node1/cpu74 | 0 .../linux-subcores2}/node/node1/cpu75 | 0 .../linux-subcores2}/node/node1/cpu76 | 0 .../linux-subcores2}/node/node1/cpu77 | 0 .../linux-subcores2}/node/node1/cpu78 | 0 .../linux-subcores2}/node/node1/cpu79 | 0 .../linux-subcores2/node/node1/meminfo | 0 .../linux-subcores2}/node/node16/cpu100 | 0 .../linux-subcores2}/node/node16/cpu101 | 0 .../linux-subcores2}/node/node16/cpu102 | 0 .../linux-subcores2}/node/node16/cpu103 | 0 .../linux-subcores2}/node/node16/cpu104 | 0 .../linux-subcores2}/node/node16/cpu105 | 0 .../linux-subcores2}/node/node16/cpu106 | 0 .../linux-subcores2}/node/node16/cpu107 | 0 .../linux-subcores2}/node/node16/cpu108 | 0 .../linux-subcores2}/node/node16/cpu109 | 0 .../linux-subcores2}/node/node16/cpu110 | 0 .../linux-subcores2}/node/node16/cpu111 | 0 .../linux-subcores2}/node/node16/cpu112 | 0 .../linux-subcores2}/node/node16/cpu113 | 0 .../linux-subcores2}/node/node16/cpu114 | 0 .../linux-subcores2}/node/node16/cpu115 | 0 .../linux-subcores2}/node/node16/cpu116 | 0 .../linux-subcores2}/node/node16/cpu117 | 0 .../linux-subcores2}/node/node16/cpu118 | 0 .../linux-subcores2}/node/node16/cpu119 | 0 .../linux-subcores2}/node/node16/cpu80 | 0 .../linux-subcores2}/node/node16/cpu81 | 0 .../linux-subcores2}/node/node16/cpu82 | 0 .../linux-subcores2}/node/node16/cpu83 | 0 .../linux-subcores2}/node/node16/cpu84 | 0 .../linux-subcores2}/node/node16/cpu85 | 0 .../linux-subcores2}/node/node16/cpu86 | 0 .../linux-subcores2}/node/node16/cpu87 | 0 .../linux-subcores2}/node/node16/cpu88 | 0 .../linux-subcores2}/node/node16/cpu89 | 0 .../linux-subcores2}/node/node16/cpu90 | 0 .../linux-subcores2}/node/node16/cpu91 | 0 .../linux-subcores2}/node/node16/cpu92 | 0 .../linux-subcores2}/node/node16/cpu93 | 0 .../linux-subcores2}/node/node16/cpu94 | 0 .../linux-subcores2}/node/node16/cpu95 | 0 .../linux-subcores2}/node/node16/cpu96 | 0 .../linux-subcores2}/node/node16/cpu97 | 0 .../linux-subcores2}/node/node16/cpu98 | 0 .../linux-subcores2}/node/node16/cpu99 | 0 .../linux-subcores2/node/node16/meminfo | 0 .../linux-subcores2}/node/node17/cpu120 | 0 .../linux-subcores2}/node/node17/cpu121 | 0 .../linux-subcores2}/node/node17/cpu122 | 0 .../linux-subcores2}/node/node17/cpu123 | 0 .../linux-subcores2}/node/node17/cpu124 | 0 .../linux-subcores2}/node/node17/cpu125 | 0 .../linux-subcores2}/node/node17/cpu126 | 0 .../linux-subcores2}/node/node17/cpu127 | 0 .../linux-subcores2}/node/node17/cpu128 | 0 .../linux-subcores2}/node/node17/cpu129 | 0 .../linux-subcores2}/node/node17/cpu130 | 0 .../linux-subcores2}/node/node17/cpu131 | 0 .../linux-subcores2}/node/node17/cpu132 | 0 .../linux-subcores2}/node/node17/cpu133 | 0 .../linux-subcores2}/node/node17/cpu134 | 0 .../linux-subcores2}/node/node17/cpu135 | 0 .../linux-subcores2}/node/node17/cpu136 | 0 .../linux-subcores2}/node/node17/cpu137 | 0 .../linux-subcores2}/node/node17/cpu138 | 0 .../linux-subcores2}/node/node17/cpu139 | 0 .../linux-subcores2}/node/node17/cpu140 | 0 .../linux-subcores2}/node/node17/cpu141 | 0 .../linux-subcores2}/node/node17/cpu142 | 0 .../linux-subcores2}/node/node17/cpu143 | 0 .../linux-subcores2}/node/node17/cpu144 | 0 .../linux-subcores2}/node/node17/cpu145 | 0 .../linux-subcores2}/node/node17/cpu146 | 0 .../linux-subcores2}/node/node17/cpu147 | 0 .../linux-subcores2}/node/node17/cpu148 | 0 .../linux-subcores2}/node/node17/cpu149 | 0 .../linux-subcores2}/node/node17/cpu150 | 0 .../linux-subcores2}/node/node17/cpu151 | 0 .../linux-subcores2}/node/node17/cpu152 | 0 .../linux-subcores2}/node/node17/cpu153 | 0 .../linux-subcores2}/node/node17/cpu154 | 0 .../linux-subcores2}/node/node17/cpu155 | 0 .../linux-subcores2}/node/node17/cpu156 | 0 .../linux-subcores2}/node/node17/cpu157 | 0 .../linux-subcores2}/node/node17/cpu158 | 0 .../linux-subcores2}/node/node17/cpu159 | 0 .../linux-subcores2/node/node17/meminfo | 0 .../linux-subcores2}/node/online | 0 .../linux-subcores2}/node/possible | 0 .../linux-subcores3/cpu/cpu0}/online | 0 .../linux-subcores3/cpu/cpu1}/online | 0 .../linux-subcores3/cpu/cpu10}/online | 0 .../linux-subcores3/cpu/cpu100}/online | 0 .../linux-subcores3/cpu/cpu101}/online | 0 .../linux-subcores3/cpu/cpu102}/online | 0 .../linux-subcores3/cpu/cpu103}/online | 0 .../linux-subcores3/cpu/cpu104}/online | 0 .../linux-subcores3}/cpu/cpu104/topology/core_id | 0 .../cpu/cpu104}/topology/core_siblings | 0 .../cpu/cpu104}/topology/core_siblings_list | 0 .../cpu/cpu104}/topology/physical_package_id | 0 .../cpu/cpu104/topology/thread_siblings | 0 .../cpu/cpu104/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu105}/online | 0 .../linux-subcores3/cpu/cpu106}/online | 0 .../linux-subcores3/cpu/cpu107}/online | 0 .../linux-subcores3/cpu/cpu108}/online | 0 .../linux-subcores3/cpu/cpu109}/online | 0 .../linux-subcores3/cpu/cpu11}/online | 0 .../linux-subcores3/cpu/cpu110}/online | 0 .../linux-subcores3/cpu/cpu111}/online | 0 .../linux-subcores3/cpu/cpu112}/online | 0 .../linux-subcores3}/cpu/cpu112/topology/core_id | 0 .../cpu/cpu112}/topology/core_siblings | 0 .../cpu/cpu112}/topology/core_siblings_list | 0 .../cpu/cpu112/topology/physical_package_id | 0 .../cpu/cpu112/topology/thread_siblings | 0 .../cpu/cpu112/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu113}/online | 0 .../linux-subcores3/cpu/cpu114}/online | 0 .../linux-subcores3/cpu/cpu115}/online | 0 .../linux-subcores3/cpu/cpu116}/online | 0 .../linux-subcores3/cpu/cpu117}/online | 0 .../linux-subcores3/cpu/cpu118}/online | 0 .../linux-subcores3/cpu/cpu119}/online | 0 .../linux-subcores3/cpu/cpu12}/online | 0 .../linux-subcores3/cpu/cpu120}/online | 0 .../linux-subcores3/cpu/cpu121}/online | 0 .../linux-subcores3/cpu/cpu122}/online | 0 .../linux-subcores3/cpu/cpu123}/online | 0 .../linux-subcores3/cpu/cpu124}/online | 0 .../linux-subcores3/cpu/cpu125}/online | 0 .../linux-subcores3/cpu/cpu126}/online | 0 .../linux-subcores3/cpu/cpu127}/online | 0 .../linux-subcores3/cpu/cpu128}/online | 0 .../linux-subcores3}/cpu/cpu128/topology/core_id | 0 .../cpu/cpu128}/topology/core_siblings | 0 .../cpu/cpu128}/topology/core_siblings_list | 0 .../cpu/cpu128}/topology/physical_package_id | 0 .../cpu/cpu128/topology/thread_siblings | 0 .../cpu/cpu128/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu129}/online | 0 .../linux-subcores3/cpu/cpu13}/online | 0 .../linux-subcores3/cpu/cpu130}/online | 0 .../linux-subcores3/cpu/cpu131}/online | 0 .../linux-subcores3/cpu/cpu132}/online | 0 .../linux-subcores3/cpu/cpu133}/online | 0 .../linux-subcores3/cpu/cpu134}/online | 0 .../linux-subcores3/cpu/cpu135}/online | 0 .../linux-subcores3/cpu/cpu136}/online | 0 .../linux-subcores3}/cpu/cpu136/topology/core_id | 0 .../cpu/cpu136}/topology/core_siblings | 0 .../cpu/cpu136}/topology/core_siblings_list | 0 .../cpu/cpu136}/topology/physical_package_id | 0 .../cpu/cpu136/topology/thread_siblings | 0 .../cpu/cpu136/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu137}/online | 0 .../linux-subcores3/cpu/cpu138}/online | 0 .../linux-subcores3/cpu/cpu139}/online | 0 .../linux-subcores3/cpu/cpu14}/online | 0 .../linux-subcores3/cpu/cpu140}/online | 0 .../linux-subcores3/cpu/cpu141}/online | 0 .../linux-subcores3/cpu/cpu142}/online | 0 .../linux-subcores3/cpu/cpu143}/online | 0 .../linux-subcores3/cpu/cpu144}/online | 0 .../linux-subcores3/cpu/cpu145}/online | 0 .../linux-subcores3/cpu/cpu146}/online | 0 .../linux-subcores3/cpu/cpu147}/online | 0 .../linux-subcores3/cpu/cpu148}/online | 0 .../linux-subcores3/cpu/cpu149}/online | 0 .../linux-subcores3/cpu/cpu15}/online | 0 .../linux-subcores3/cpu/cpu150}/online | 0 .../linux-subcores3/cpu/cpu151}/online | 0 .../linux-subcores3/cpu/cpu152}/online | 0 .../linux-subcores3/cpu/cpu152}/topology/core_id | 0 .../cpu/cpu152}/topology/core_siblings | 0 .../cpu/cpu152}/topology/core_siblings_list | 0 .../cpu/cpu152/topology/physical_package_id | 0 .../cpu/cpu152}/topology/thread_siblings | 0 .../cpu/cpu152}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu153}/online | 0 .../linux-subcores3/cpu/cpu153}/topology/core_id | 0 .../cpu/cpu153}/topology/core_siblings | 0 .../cpu/cpu153}/topology/core_siblings_list | 0 .../cpu/cpu153}/topology/physical_package_id | 0 .../cpu/cpu153}/topology/thread_siblings | 0 .../cpu/cpu153}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu154}/online | 0 .../linux-subcores3/cpu/cpu154}/topology/core_id | 0 .../cpu/cpu154}/topology/core_siblings | 0 .../cpu/cpu154}/topology/core_siblings_list | 0 .../cpu/cpu154}/topology/physical_package_id | 0 .../cpu/cpu154}/topology/thread_siblings | 0 .../cpu/cpu154}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu155}/online | 0 .../linux-subcores3/cpu/cpu155/topology/core_id | 0 .../cpu/cpu155}/topology/core_siblings | 0 .../cpu/cpu155}/topology/core_siblings_list | 0 .../cpu/cpu155}/topology/physical_package_id | 0 .../cpu/cpu155}/topology/thread_siblings | 0 .../cpu/cpu155}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu156}/online | 0 .../linux-subcores3/cpu/cpu156}/topology/core_id | 0 .../cpu/cpu156}/topology/core_siblings | 0 .../cpu/cpu156}/topology/core_siblings_list | 0 .../cpu/cpu156}/topology/physical_package_id | 0 .../cpu/cpu156}/topology/thread_siblings | 0 .../cpu/cpu156}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu157}/online | 0 .../linux-subcores3/cpu/cpu157}/topology/core_id | 0 .../cpu/cpu157}/topology/core_siblings | 0 .../cpu/cpu157}/topology/core_siblings_list | 0 .../cpu/cpu157}/topology/physical_package_id | 0 .../cpu/cpu157}/topology/thread_siblings | 0 .../cpu/cpu157}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu158}/online | 0 .../linux-subcores3/cpu/cpu158}/topology/core_id | 0 .../cpu/cpu158}/topology/core_siblings | 0 .../cpu/cpu158}/topology/core_siblings_list | 0 .../cpu/cpu158}/topology/physical_package_id | 0 .../cpu/cpu158}/topology/thread_siblings | 0 .../cpu/cpu158}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu159}/online | 0 .../linux-subcores3/cpu/cpu159}/topology/core_id | 0 .../cpu/cpu159}/topology/core_siblings | 0 .../cpu/cpu159}/topology/core_siblings_list | 0 .../cpu/cpu159}/topology/physical_package_id | 0 .../cpu/cpu159}/topology/thread_siblings | 0 .../cpu/cpu159}/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu16}/online | 0 .../linux-subcores3/cpu/cpu17}/online | 0 .../linux-subcores3/cpu/cpu18}/online | 0 .../linux-subcores3/cpu/cpu19}/online | 0 .../linux-subcores3/cpu/cpu2}/online | 0 .../linux-subcores3/cpu/cpu20}/online | 0 .../linux-subcores3/cpu/cpu21}/online | 0 .../linux-subcores3/cpu/cpu22}/online | 0 .../linux-subcores3/cpu/cpu23}/online | 0 .../linux-subcores3/cpu/cpu24}/online | 0 .../linux-subcores3/cpu/cpu25}/online | 0 .../linux-subcores3/cpu/cpu26}/online | 0 .../linux-subcores3/cpu/cpu27}/online | 0 .../linux-subcores3/cpu/cpu28}/online | 0 .../linux-subcores3/cpu/cpu29}/online | 0 .../linux-subcores3/cpu/cpu3}/online | 0 .../linux-subcores3/cpu/cpu30}/online | 0 .../linux-subcores3/cpu/cpu31}/online | 0 .../linux-subcores3/cpu/cpu32}/online | 0 .../linux-subcores3/cpu/cpu33}/online | 0 .../linux-subcores3/cpu/cpu34}/online | 0 .../linux-subcores3/cpu/cpu35}/online | 0 .../linux-subcores3/cpu/cpu36}/online | 0 .../linux-subcores3/cpu/cpu37}/online | 0 .../linux-subcores3/cpu/cpu38}/online | 0 .../linux-subcores3/cpu/cpu39}/online | 0 .../linux-subcores3/cpu/cpu4}/online | 0 .../linux-subcores3/cpu/cpu40}/online | 0 .../linux-subcores3}/cpu/cpu40/topology/core_id | 0 .../cpu/cpu40}/topology/core_siblings | 0 .../cpu/cpu40}/topology/core_siblings_list | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../cpu/cpu40/topology/thread_siblings | 0 .../cpu/cpu40/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu41}/online | 0 .../linux-subcores3/cpu/cpu42}/online | 0 .../linux-subcores3/cpu/cpu43}/online | 0 .../linux-subcores3/cpu/cpu44}/online | 0 .../linux-subcores3/cpu/cpu45}/online | 0 .../linux-subcores3/cpu/cpu46}/online | 0 .../linux-subcores3/cpu/cpu47}/online | 0 .../linux-subcores3/cpu/cpu48}/online | 0 .../linux-subcores3}/cpu/cpu48/topology/core_id | 0 .../cpu/cpu48}/topology/core_siblings | 0 .../cpu/cpu48}/topology/core_siblings_list | 0 .../cpu/cpu48}/topology/physical_package_id | 0 .../cpu/cpu48/topology/thread_siblings | 0 .../cpu/cpu48/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu49}/online | 0 .../linux-subcores3/cpu/cpu5}/online | 0 .../linux-subcores3/cpu/cpu50}/online | 0 .../linux-subcores3/cpu/cpu51}/online | 0 .../linux-subcores3/cpu/cpu52}/online | 0 .../linux-subcores3/cpu/cpu53}/online | 0 .../linux-subcores3/cpu/cpu54}/online | 0 .../linux-subcores3/cpu/cpu55}/online | 0 .../linux-subcores3/cpu/cpu56}/online | 0 .../linux-subcores3}/cpu/cpu56/topology/core_id | 0 .../cpu/cpu56/topology/core_siblings | 0 .../cpu/cpu56/topology/core_siblings_list | 0 .../cpu/cpu56}/topology/physical_package_id | 0 .../cpu/cpu56/topology/thread_siblings | 0 .../cpu/cpu56/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu57}/online | 0 .../linux-subcores3/cpu/cpu58}/online | 0 .../linux-subcores3/cpu/cpu59}/online | 0 .../linux-subcores3/cpu/cpu6}/online | 0 .../linux-subcores3/cpu/cpu60}/online | 0 .../linux-subcores3/cpu/cpu61}/online | 0 .../linux-subcores3/cpu/cpu62}/online | 0 .../linux-subcores3/cpu/cpu63}/online | 0 .../linux-subcores3/cpu/cpu64}/online | 0 .../linux-subcores3/cpu/cpu65}/online | 0 .../linux-subcores3/cpu/cpu66}/online | 0 .../linux-subcores3/cpu/cpu67}/online | 0 .../linux-subcores3/cpu/cpu68}/online | 0 .../linux-subcores3/cpu/cpu68}/topology/core_id | 0 .../cpu/cpu68}/topology/core_siblings | 0 .../cpu/cpu68}/topology/core_siblings_list | 0 .../cpu/cpu68}/topology/physical_package_id | 0 .../cpu/cpu68/topology/thread_siblings | 0 .../cpu/cpu68/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu69}/online | 0 .../linux-subcores3/cpu/cpu7}/online | 0 .../linux-subcores3/cpu/cpu70}/online | 0 .../linux-subcores3/cpu/cpu71}/online | 0 .../linux-subcores3/cpu/cpu72}/online | 0 .../linux-subcores3}/cpu/cpu72/topology/core_id | 0 .../cpu/cpu72}/topology/core_siblings | 0 .../cpu/cpu72}/topology/core_siblings_list | 0 .../cpu/cpu72}/topology/physical_package_id | 0 .../cpu/cpu72/topology/thread_siblings | 0 .../cpu/cpu72/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu73}/online | 0 .../linux-subcores3/cpu/cpu74}/online | 0 .../linux-subcores3/cpu/cpu75}/online | 0 .../linux-subcores3/cpu/cpu76}/online | 0 .../linux-subcores3/cpu/cpu77}/online | 0 .../linux-subcores3/cpu/cpu78}/online | 0 .../linux-subcores3/cpu/cpu79}/online | 0 .../linux-subcores3/cpu/cpu8}/online | 0 .../linux-subcores3}/cpu/cpu8/topology/core_id | 0 .../cpu/cpu8/topology/core_siblings | 0 .../cpu/cpu8/topology/core_siblings_list | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../cpu/cpu8/topology/thread_siblings | 0 .../cpu/cpu8/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu80}/online | 0 .../linux-subcores3}/cpu/cpu80/topology/core_id | 0 .../cpu/cpu80/topology/core_siblings | 0 .../cpu/cpu80/topology/core_siblings_list | 0 .../cpu/cpu80}/topology/physical_package_id | 0 .../cpu/cpu80/topology/thread_siblings | 0 .../cpu/cpu80/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu81}/online | 0 .../linux-subcores3/cpu/cpu82}/online | 0 .../linux-subcores3/cpu/cpu83}/online | 0 .../linux-subcores3/cpu/cpu84}/online | 0 .../linux-subcores3/cpu/cpu85}/online | 0 .../linux-subcores3/cpu/cpu86}/online | 0 .../linux-subcores3/cpu/cpu87}/online | 0 .../linux-subcores3/cpu/cpu88}/online | 0 .../linux-subcores3}/cpu/cpu88/topology/core_id | 0 .../cpu/cpu88}/topology/core_siblings | 0 .../cpu/cpu88}/topology/core_siblings_list | 0 .../cpu/cpu88}/topology/physical_package_id | 0 .../cpu/cpu88/topology/thread_siblings | 0 .../cpu/cpu88/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu89}/online | 0 .../linux-subcores3/cpu/cpu9}/online | 0 .../linux-subcores3/cpu/cpu90}/online | 0 .../linux-subcores3/cpu/cpu91}/online | 0 .../linux-subcores3/cpu/cpu92}/online | 0 .../linux-subcores3/cpu/cpu93}/online | 0 .../linux-subcores3/cpu/cpu94}/online | 0 .../linux-subcores3/cpu/cpu95}/online | 0 .../linux-subcores3/cpu/cpu96}/online | 0 .../linux-subcores3}/cpu/cpu96/topology/core_id | 0 .../cpu/cpu96}/topology/core_siblings | 0 .../cpu/cpu96}/topology/core_siblings_list | 0 .../cpu/cpu96}/topology/physical_package_id | 0 .../cpu/cpu96/topology/thread_siblings | 0 .../cpu/cpu96/topology/thread_siblings_list | 0 .../linux-subcores3/cpu/cpu97}/online | 0 .../linux-subcores3/cpu/cpu98}/online | 0 .../linux-subcores3/cpu/cpu99}/online | 0 .../linux-subcores3}/cpu/kernel_max | 0 .../linux-subcores3/cpu/offline | 0 .../linux-subcores3/cpu/online | 0 .../linux-subcores3}/cpu/possible | 0 .../linux-subcores3}/cpu/present | 0 .../linux-subcores3}/node/node0/cpu0 | 0 .../linux-subcores3}/node/node0/cpu1 | 0 .../linux-subcores3/node/node0}/cpu10 | 0 .../linux-subcores3/node/node0}/cpu11 | 0 .../linux-subcores3}/node/node0/cpu12 | 0 .../linux-subcores3/node/node0}/cpu13 | 0 .../linux-subcores3/node/node0}/cpu14 | 0 .../linux-subcores3/node/node0}/cpu15 | 0 .../linux-subcores3/node/node0/cpu16 | 0 .../linux-subcores3/node/node0/cpu17 | 0 .../linux-subcores3/node/node0/cpu18 | 0 .../linux-subcores3/node/node0/cpu19 | 0 .../linux-subcores3}/node/node0/cpu2 | 0 .../linux-subcores3/node/node0/cpu20 | 0 .../linux-subcores3/node/node0/cpu21 | 0 .../linux-subcores3/node/node0/cpu22 | 0 .../linux-subcores3/node/node0/cpu23 | 0 .../linux-subcores3}/node/node0/cpu24 | 0 .../linux-subcores3}/node/node0/cpu25 | 0 .../linux-subcores3}/node/node0/cpu26 | 0 .../linux-subcores3}/node/node0/cpu27 | 0 .../linux-subcores3}/node/node0/cpu28 | 0 .../linux-subcores3}/node/node0/cpu29 | 0 .../linux-subcores3}/node/node0/cpu3 | 0 .../linux-subcores3}/node/node0/cpu30 | 0 .../linux-subcores3}/node/node0/cpu31 | 0 .../linux-subcores3}/node/node0/cpu32 | 0 .../linux-subcores3}/node/node0/cpu33 | 0 .../linux-subcores3}/node/node0/cpu34 | 0 .../linux-subcores3}/node/node0/cpu35 | 0 .../linux-subcores3}/node/node0/cpu36 | 0 .../linux-subcores3}/node/node0/cpu37 | 0 .../linux-subcores3}/node/node0/cpu38 | 0 .../linux-subcores3}/node/node0/cpu39 | 0 .../linux-subcores3}/node/node0/cpu4 | 0 .../linux-subcores3}/node/node0/cpu5 | 0 .../linux-subcores3}/node/node0/cpu6 | 0 .../linux-subcores3}/node/node0/cpu7 | 0 .../linux-subcores3}/node/node0/cpu8 | 0 .../linux-subcores3/node/node0}/cpu9 | 0 .../linux-subcores3/node/node0/meminfo | 0 .../linux-subcores3}/node/node1/cpu40 | 0 .../linux-subcores3}/node/node1/cpu41 | 0 .../linux-subcores3}/node/node1/cpu42 | 0 .../linux-subcores3}/node/node1/cpu43 | 0 .../linux-subcores3}/node/node1/cpu44 | 0 .../linux-subcores3}/node/node1/cpu45 | 0 .../linux-subcores3}/node/node1/cpu46 | 0 .../linux-subcores3}/node/node1/cpu47 | 0 .../linux-subcores3}/node/node1/cpu48 | 0 .../linux-subcores3}/node/node1/cpu49 | 0 .../linux-subcores3}/node/node1/cpu50 | 0 .../linux-subcores3}/node/node1/cpu51 | 0 .../linux-subcores3}/node/node1/cpu52 | 0 .../linux-subcores3}/node/node1/cpu53 | 0 .../linux-subcores3}/node/node1/cpu54 | 0 .../linux-subcores3}/node/node1/cpu55 | 0 .../linux-subcores3}/node/node1/cpu56 | 0 .../linux-subcores3}/node/node1/cpu57 | 0 .../linux-subcores3}/node/node1/cpu58 | 0 .../linux-subcores3}/node/node1/cpu59 | 0 .../linux-subcores3}/node/node1/cpu60 | 0 .../linux-subcores3}/node/node1/cpu61 | 0 .../linux-subcores3}/node/node1/cpu62 | 0 .../linux-subcores3}/node/node1/cpu63 | 0 .../linux-subcores3/node/node1}/cpu64 | 0 .../linux-subcores3/node/node1}/cpu65 | 0 .../linux-subcores3/node/node1}/cpu66 | 0 .../linux-subcores3/node/node1}/cpu67 | 0 .../linux-subcores3/node/node1}/cpu68 | 0 .../linux-subcores3/node/node1}/cpu69 | 0 .../linux-subcores3/node/node1}/cpu70 | 0 .../linux-subcores3/node/node1}/cpu71 | 0 .../linux-subcores3}/node/node1/cpu72 | 0 .../linux-subcores3}/node/node1/cpu73 | 0 .../linux-subcores3}/node/node1/cpu74 | 0 .../linux-subcores3}/node/node1/cpu75 | 0 .../linux-subcores3}/node/node1/cpu76 | 0 .../linux-subcores3}/node/node1/cpu77 | 0 .../linux-subcores3}/node/node1/cpu78 | 0 .../linux-subcores3}/node/node1/cpu79 | 0 .../linux-subcores3/node/node1/meminfo | 0 .../linux-subcores3/node/node16}/cpu100 | 0 .../linux-subcores3/node/node16}/cpu101 | 0 .../linux-subcores3/node/node16}/cpu102 | 0 .../linux-subcores3/node/node16}/cpu103 | 0 .../linux-subcores3}/node/node16/cpu104 | 0 .../linux-subcores3}/node/node16/cpu105 | 0 .../linux-subcores3}/node/node16/cpu106 | 0 .../linux-subcores3}/node/node16/cpu107 | 0 .../linux-subcores3}/node/node16/cpu108 | 0 .../linux-subcores3}/node/node16/cpu109 | 0 .../linux-subcores3}/node/node16/cpu110 | 0 .../linux-subcores3}/node/node16/cpu111 | 0 .../linux-subcores3}/node/node16/cpu112 | 0 .../linux-subcores3}/node/node16/cpu113 | 0 .../linux-subcores3}/node/node16/cpu114 | 0 .../linux-subcores3}/node/node16/cpu115 | 0 .../linux-subcores3}/node/node16/cpu116 | 0 .../linux-subcores3}/node/node16/cpu117 | 0 .../linux-subcores3}/node/node16/cpu118 | 0 .../linux-subcores3}/node/node16/cpu119 | 0 .../linux-subcores3/node/node16}/cpu80 | 0 .../linux-subcores3/node/node16}/cpu81 | 0 .../linux-subcores3/node/node16}/cpu82 | 0 .../linux-subcores3/node/node16}/cpu83 | 0 .../linux-subcores3/node/node16}/cpu84 | 0 .../linux-subcores3/node/node16}/cpu85 | 0 .../linux-subcores3/node/node16}/cpu86 | 0 .../linux-subcores3/node/node16}/cpu87 | 0 .../linux-subcores3/node/node16}/cpu88 | 0 .../linux-subcores3/node/node16}/cpu89 | 0 .../linux-subcores3/node/node16}/cpu90 | 0 .../linux-subcores3/node/node16}/cpu91 | 0 .../linux-subcores3/node/node16}/cpu92 | 0 .../linux-subcores3/node/node16}/cpu93 | 0 .../linux-subcores3/node/node16}/cpu94 | 0 .../linux-subcores3/node/node16}/cpu95 | 0 .../linux-subcores3/node/node16}/cpu96 | 0 .../linux-subcores3/node/node16}/cpu97 | 0 .../linux-subcores3/node/node16}/cpu98 | 0 .../linux-subcores3/node/node16}/cpu99 | 0 .../linux-subcores3/node/node16/meminfo | 0 .../linux-subcores3}/node/node17/cpu120 | 0 .../linux-subcores3}/node/node17/cpu121 | 0 .../linux-subcores3}/node/node17/cpu122 | 0 .../linux-subcores3}/node/node17/cpu123 | 0 .../linux-subcores3}/node/node17/cpu124 | 0 .../linux-subcores3}/node/node17/cpu125 | 0 .../linux-subcores3}/node/node17/cpu126 | 0 .../linux-subcores3}/node/node17/cpu127 | 0 .../linux-subcores3}/node/node17/cpu128 | 0 .../linux-subcores3}/node/node17/cpu129 | 0 .../linux-subcores3}/node/node17/cpu130 | 0 .../linux-subcores3}/node/node17/cpu131 | 0 .../linux-subcores3}/node/node17/cpu132 | 0 .../linux-subcores3}/node/node17/cpu133 | 0 .../linux-subcores3}/node/node17/cpu134 | 0 .../linux-subcores3}/node/node17/cpu135 | 0 .../linux-subcores3}/node/node17/cpu136 | 0 .../linux-subcores3}/node/node17/cpu137 | 0 .../linux-subcores3}/node/node17/cpu138 | 0 .../linux-subcores3}/node/node17/cpu139 | 0 .../linux-subcores3}/node/node17/cpu140 | 0 .../linux-subcores3}/node/node17/cpu141 | 0 .../linux-subcores3}/node/node17/cpu142 | 0 .../linux-subcores3}/node/node17/cpu143 | 0 .../linux-subcores3/node/node17}/cpu144 | 0 .../linux-subcores3/node/node17}/cpu145 | 0 .../linux-subcores3/node/node17}/cpu146 | 0 .../linux-subcores3/node/node17}/cpu147 | 0 .../linux-subcores3/node/node17}/cpu148 | 0 .../linux-subcores3/node/node17}/cpu149 | 0 .../linux-subcores3/node/node17}/cpu150 | 0 .../linux-subcores3/node/node17}/cpu151 | 0 .../linux-subcores3/node/node17}/cpu152 | 0 .../linux-subcores3/node/node17}/cpu153 | 0 .../linux-subcores3/node/node17}/cpu154 | 0 .../linux-subcores3/node/node17}/cpu155 | 0 .../linux-subcores3/node/node17}/cpu156 | 0 .../linux-subcores3/node/node17}/cpu157 | 0 .../linux-subcores3/node/node17}/cpu158 | 0 .../linux-subcores3/node/node17}/cpu159 | 0 .../linux-subcores3/node/node17/meminfo | 0 .../linux-subcores3}/node/online | 0 .../linux-subcores3}/node/possible | 0 .../linux-test1/cpu/cpu0}/online | 0 .../linux-test1/cpu/cpu0}/topology/core_id | 0 .../linux-test1/cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test1/cpu/cpu0}/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-test1/cpu/cpu1}/core_id | 0 .../linux-test1/cpu/cpu1/core_siblings | 0 .../linux-test1/cpu/cpu1/core_siblings_list | 0 .../linux-test1/cpu/cpu1}/online | 0 .../linux-test1/cpu/cpu1}/physical_package_id | 0 .../linux-test1/cpu/cpu1/thread_siblings | 0 .../linux-test1/cpu/cpu1}/thread_siblings_list | 0 .../linux-test1/cpu/cpu1}/topology/core_id | 0 .../linux-test1/cpu/cpu1}/topology/core_siblings | 0 .../cpu/cpu1}/topology/core_siblings_list | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test1/cpu/cpu1}/topology/thread_siblings | 0 .../cpu/cpu1}/topology/thread_siblings_list | 0 .../linux-test1/node/node0/meminfo | 0 .../linux-test1/node/node1/meminfo | 0 .../linux-test2}/cpu/cpu0/topology/core_id | 0 .../linux-test2/cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test2/cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-test2/cpu/cpu1}/online | 0 .../linux-test2/cpu/cpu1}/topology/core_id | 0 .../linux-test2/cpu/cpu1}/topology/core_siblings | 0 .../cpu/cpu1}/topology/core_siblings_list | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test2/cpu/cpu1/topology/thread_siblings | 0 .../cpu/cpu1/topology/thread_siblings_list} | 0 .../linux-test2}/node/node0/cpu0 | 0 .../linux-test2/node/node0}/cpu1 | 0 .../linux-test2/node/node0/meminfo | 0 .../linux-test2}/node/possible | 0 .../linux-test3/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu0/topology/thread_siblings | 0 .../linux-test3/cpu/cpu1}/online | 0 .../linux-test3/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu1/topology/thread_siblings | 0 .../linux-test3/cpu/cpu10}/online | 0 .../linux-test3/cpu/cpu10}/topology/core_id | 0 .../cpu/cpu10}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu10/topology/thread_siblings | 0 .../linux-test3/cpu/cpu11}/online | 0 .../linux-test3/cpu/cpu11}/topology/core_id | 0 .../cpu/cpu11}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu11/topology/thread_siblings | 0 .../linux-test3/cpu/cpu12}/online | 0 .../linux-test3/cpu/cpu12}/topology/core_id | 0 .../cpu/cpu12}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu12/topology/thread_siblings | 0 .../linux-test3/cpu/cpu13}/online | 0 .../linux-test3/cpu/cpu13}/topology/core_id | 0 .../cpu/cpu13}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu13/topology/thread_siblings | 0 .../linux-test3/cpu/cpu14}/online | 0 .../linux-test3/cpu/cpu14}/topology/core_id | 0 .../cpu/cpu14}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu14/topology/thread_siblings | 0 .../linux-test3/cpu/cpu15}/online | 0 .../linux-test3}/cpu/cpu15/topology/core_id | 0 .../cpu/cpu15}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu15/topology/thread_siblings | 0 .../linux-test3/cpu/cpu16}/online | 0 .../linux-test3/cpu/cpu16}/topology/core_id | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu16/topology/thread_siblings | 0 .../linux-test3/cpu/cpu17}/online | 0 .../linux-test3/cpu/cpu17}/topology/core_id | 0 .../cpu/cpu17}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu17/topology/thread_siblings | 0 .../linux-test3/cpu/cpu18}/online | 0 .../linux-test3/cpu/cpu18}/topology/core_id | 0 .../cpu/cpu18}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu18/topology/thread_siblings | 0 .../linux-test3/cpu/cpu19}/online | 0 .../linux-test3}/cpu/cpu19/topology/core_id | 0 .../cpu/cpu19}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu19/topology/thread_siblings | 0 .../linux-test3/cpu/cpu2}/online | 0 .../linux-test3/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu2/topology/thread_siblings | 0 .../linux-test3/cpu/cpu20}/online | 0 .../linux-test3/cpu/cpu20}/topology/core_id | 0 .../cpu/cpu20}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu20/topology/thread_siblings | 0 .../linux-test3/cpu/cpu21}/online | 0 .../linux-test3/cpu/cpu21}/topology/core_id | 0 .../cpu/cpu21}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu21/topology/thread_siblings | 0 .../linux-test3/cpu/cpu22}/online | 0 .../linux-test3/cpu/cpu22}/topology/core_id | 0 .../cpu/cpu22}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu22/topology/thread_siblings | 0 .../linux-test3/cpu/cpu23}/online | 0 .../linux-test3}/cpu/cpu23/topology/core_id | 0 .../cpu/cpu23}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu23/topology/thread_siblings | 0 .../linux-test3/cpu/cpu24}/online | 0 .../linux-test3/cpu/cpu24}/topology/core_id | 0 .../cpu/cpu24}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu24/topology/thread_siblings | 0 .../linux-test3/cpu/cpu25}/online | 0 .../linux-test3/cpu/cpu25}/topology/core_id | 0 .../cpu/cpu25}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu25/topology/thread_siblings | 0 .../linux-test3/cpu/cpu26}/online | 0 .../linux-test3/cpu/cpu26}/topology/core_id | 0 .../cpu/cpu26}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu26/topology/thread_siblings | 0 .../linux-test3/cpu/cpu27}/online | 0 .../linux-test3/cpu/cpu27}/topology/core_id | 0 .../cpu/cpu27}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu27/topology/thread_siblings | 0 .../linux-test3/cpu/cpu28}/online | 0 .../linux-test3/cpu/cpu28}/topology/core_id | 0 .../cpu/cpu28}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu28/topology/thread_siblings | 0 .../linux-test3/cpu/cpu29}/online | 0 .../linux-test3/cpu/cpu29}/topology/core_id | 0 .../cpu/cpu29}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu29/topology/thread_siblings | 0 .../linux-test3/cpu/cpu3}/online | 0 .../linux-test3/cpu/cpu3}/topology/core_id | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu3/topology/thread_siblings | 0 .../linux-test3/cpu/cpu30}/online | 0 .../linux-test3/cpu/cpu30}/topology/core_id | 0 .../cpu/cpu30}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu30/topology/thread_siblings | 0 .../linux-test3/cpu/cpu31}/online | 0 .../linux-test3/cpu/cpu31}/topology/core_id | 0 .../cpu/cpu31}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu31/topology/thread_siblings | 0 .../linux-test3/cpu/cpu32}/online | 0 .../linux-test3/cpu/cpu32}/topology/core_id | 0 .../cpu/cpu32}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu32/topology/thread_siblings | 0 .../linux-test3/cpu/cpu33}/online | 0 .../linux-test3/cpu/cpu33}/topology/core_id | 0 .../cpu/cpu33}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu33/topology/thread_siblings | 0 .../linux-test3/cpu/cpu34}/online | 0 .../linux-test3/cpu/cpu34}/topology/core_id | 0 .../cpu/cpu34}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu34/topology/thread_siblings | 0 .../linux-test3/cpu/cpu35}/online | 0 .../linux-test3/cpu/cpu35}/topology/core_id | 0 .../cpu/cpu35}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu35/topology/thread_siblings | 0 .../linux-test3/cpu/cpu36}/online | 0 .../linux-test3/cpu/cpu36}/topology/core_id | 0 .../cpu/cpu36}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu36/topology/thread_siblings | 0 .../linux-test3/cpu/cpu37}/online | 0 .../linux-test3/cpu/cpu37}/topology/core_id | 0 .../cpu/cpu37}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu37/topology/thread_siblings | 0 .../linux-test3/cpu/cpu38}/online | 0 .../linux-test3/cpu/cpu38}/topology/core_id | 0 .../cpu/cpu38}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu38/topology/thread_siblings | 0 .../linux-test3/cpu/cpu39}/online | 0 .../linux-test3/cpu/cpu39}/topology/core_id | 0 .../cpu/cpu39}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu39/topology/thread_siblings | 0 .../linux-test3/cpu/cpu4}/online | 0 .../linux-test3/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu4/topology/thread_siblings | 0 .../linux-test3/cpu/cpu40}/online | 0 .../linux-test3/cpu/cpu40}/topology/core_id | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu40/topology/thread_siblings | 0 .../linux-test3/cpu/cpu41}/online | 0 .../linux-test3/cpu/cpu41}/topology/core_id | 0 .../cpu/cpu41}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu41/topology/thread_siblings | 0 .../linux-test3/cpu/cpu42}/online | 0 .../linux-test3/cpu/cpu42}/topology/core_id | 0 .../cpu/cpu42}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu42/topology/thread_siblings | 0 .../linux-test3/cpu/cpu43}/online | 0 .../linux-test3/cpu/cpu43}/topology/core_id | 0 .../cpu/cpu43}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu43/topology/thread_siblings | 0 .../linux-test3/cpu/cpu44}/online | 0 .../linux-test3/cpu/cpu44}/topology/core_id | 0 .../cpu/cpu44}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu44/topology/thread_siblings | 0 .../linux-test3/cpu/cpu45}/online | 0 .../linux-test3/cpu/cpu45}/topology/core_id | 0 .../cpu/cpu45}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu45/topology/thread_siblings | 0 .../linux-test3/cpu/cpu46}/online | 0 .../linux-test3/cpu/cpu46}/topology/core_id | 0 .../cpu/cpu46}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu46/topology/thread_siblings | 0 .../linux-test3/cpu/cpu47}/online | 0 .../linux-test3/cpu/cpu47}/topology/core_id | 0 .../cpu/cpu47}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu47/topology/thread_siblings | 0 .../linux-test3/cpu/cpu5}/online | 0 .../linux-test3/cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu5/topology/thread_siblings | 0 .../linux-test3/cpu/cpu6}/online | 0 .../linux-test3/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu6/topology/thread_siblings | 0 .../linux-test3/cpu/cpu7}/online | 0 .../linux-test3/cpu/cpu7}/topology/core_id | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu7/topology/thread_siblings | 0 .../linux-test3/cpu/cpu8}/online | 0 .../linux-test3/cpu/cpu8}/topology/core_id | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu8/topology/thread_siblings | 0 .../linux-test3/cpu/cpu9}/online | 0 .../linux-test3/cpu/cpu9}/topology/core_id | 0 .../cpu/cpu9}/topology/physical_package_id | 0 .../linux-test3/cpu/cpu9/topology/thread_siblings | 0 .../linux-test3}/node/node0/cpu0 | 0 .../linux-test3}/node/node0/cpu12 | 0 .../linux-test3}/node/node0/cpu16 | 0 .../linux-test3}/node/node0/cpu20 | 0 .../linux-test3/node/node0/cpu4 | 0 .../linux-test3}/node/node0/cpu8 | 0 .../linux-test3/node/node0/meminfo | 0 .../linux-test3/node/node1}/cpu24 | 0 .../linux-test3/node/node1}/cpu28 | 0 .../linux-test3/node/node1}/cpu32 | 0 .../linux-test3/node/node1}/cpu36 | 0 .../linux-test3}/node/node1/cpu40 | 0 .../linux-test3}/node/node1/cpu44 | 0 .../linux-test3/node/node1/meminfo | 0 .../linux-test3/node/node2}/cpu11 | 0 .../linux-test3/node/node2}/cpu15 | 0 .../linux-test3/node/node2}/cpu19 | 0 .../linux-test3/node/node2}/cpu23 | 0 .../linux-test3/node/node2/cpu3 | 0 .../linux-test3/node/node2/cpu7 | 0 .../linux-test3/node/node2/meminfo | 0 .../linux-test3/node/node3}/cpu27 | 0 .../linux-test3/node/node3}/cpu31 | 0 .../linux-test3/node/node3}/cpu35 | 0 .../linux-test3/node/node3}/cpu39 | 0 .../linux-test3/node/node3}/cpu43 | 0 .../linux-test3/node/node3}/cpu47 | 0 .../linux-test3/node/node3/meminfo | 0 .../linux-test3/node/node4}/cpu10 | 0 .../linux-test3/node/node4}/cpu14 | 0 .../linux-test3/node/node4}/cpu18 | 0 .../linux-test3/node/node4/cpu2 | 0 .../linux-test3/node/node4}/cpu22 | 0 .../linux-test3/node/node4/cpu6 | 0 .../linux-test3/node/node4/meminfo | 0 .../linux-test3/node/node5}/cpu26 | 0 .../linux-test3/node/node5}/cpu30 | 0 .../linux-test3/node/node5}/cpu34 | 0 .../linux-test3/node/node5}/cpu38 | 0 .../linux-test3/node/node5}/cpu42 | 0 .../linux-test3/node/node5}/cpu46 | 0 .../linux-test3/node/node5/meminfo | 0 .../linux-test3/node/node6}/cpu1 | 0 .../linux-test3/node/node6}/cpu13 | 0 .../linux-test3/node/node6}/cpu17 | 0 .../linux-test3/node/node6}/cpu21 | 0 .../linux-test3/node/node6/cpu5 | 0 .../linux-test3/node/node6}/cpu9 | 0 .../linux-test3/node/node6/meminfo | 0 .../linux-test3/node/node7}/cpu25 | 0 .../linux-test3/node/node7}/cpu29 | 0 .../linux-test3/node/node7}/cpu33 | 0 .../linux-test3/node/node7}/cpu37 | 0 .../linux-test3/node/node7}/cpu41 | 0 .../linux-test3/node/node7}/cpu45 | 0 .../linux-test3/node/node7/meminfo | 0 .../linux-test3/node}/possible | 0 .../linux-test4/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test4}/cpu/cpu0/topology/thread_siblings | 0 .../linux-test4/cpu/cpu1}/online | 0 .../linux-test4/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1/topology/physical_package_id | 0 .../linux-test4}/cpu/cpu1/topology/thread_siblings | 0 .../linux-test4/cpu/cpu10}/online | 0 .../linux-test4/cpu/cpu10}/topology/core_id | 0 .../cpu/cpu10}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu10/topology/thread_siblings | 0 .../linux-test4/cpu/cpu11}/online | 0 .../linux-test4/cpu/cpu11}/topology/core_id | 0 .../cpu/cpu11/topology/physical_package_id | 0 .../linux-test4/cpu/cpu11/topology/thread_siblings | 0 .../linux-test4/cpu/cpu12}/online | 0 .../linux-test4/cpu/cpu12}/topology/core_id | 0 .../cpu/cpu12}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu12/topology/thread_siblings | 0 .../linux-test4/cpu/cpu13}/online | 0 .../linux-test4/cpu/cpu13}/topology/core_id | 0 .../cpu/cpu13}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu13/topology/thread_siblings | 0 .../linux-test4/cpu/cpu14}/online | 0 .../linux-test4/cpu/cpu14}/topology/core_id | 0 .../cpu/cpu14}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu14/topology/thread_siblings | 0 .../linux-test4/cpu/cpu15}/online | 0 .../linux-test4/cpu/cpu15/topology/core_id | 0 .../cpu/cpu15}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu15/topology/thread_siblings | 0 .../linux-test4/cpu/cpu2}/online | 0 .../linux-test4/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test4}/cpu/cpu2/topology/thread_siblings | 0 .../linux-test4/cpu/cpu3}/online | 0 .../linux-test4/cpu/cpu3}/topology/core_id | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test4}/cpu/cpu3/topology/thread_siblings | 0 .../linux-test4/cpu/cpu4}/online | 0 .../linux-test4/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu4/topology/thread_siblings | 0 .../linux-test4/cpu/cpu5}/online | 0 .../linux-test4/cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu5/topology/thread_siblings | 0 .../linux-test4/cpu/cpu6}/online | 0 .../linux-test4/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu6/topology/thread_siblings | 0 .../linux-test4/cpu/cpu7}/online | 0 .../linux-test4/cpu/cpu7/topology/core_id | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu7/topology/thread_siblings | 0 .../linux-test4/cpu/cpu8}/online | 0 .../linux-test4/cpu/cpu8}/topology/core_id | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu8/topology/thread_siblings | 0 .../linux-test4/cpu/cpu9}/online | 0 .../linux-test4/cpu/cpu9}/topology/core_id | 0 .../cpu/cpu9}/topology/physical_package_id | 0 .../linux-test4/cpu/cpu9/topology/thread_siblings | 0 .../linux-test4}/node/node0/cpu0 | 0 .../linux-test4}/node/node0/cpu1 | 0 .../linux-test4}/node/node0/cpu2 | 0 .../linux-test4}/node/node0/cpu3 | 0 .../linux-test4}/node/node0/cpu4 | 0 .../linux-test4}/node/node0/cpu5 | 0 .../linux-test4}/node/node0/cpu6 | 0 .../linux-test4}/node/node0/cpu7 | 0 .../linux-test4/node/node0/meminfo | 0 .../linux-test4/node/node1}/cpu10 | 0 .../linux-test4/node/node1}/cpu11 | 0 .../linux-test4/node/node1}/cpu12 | 0 .../linux-test4/node/node1}/cpu13 | 0 .../linux-test4/node/node1}/cpu14 | 0 .../linux-test4/node/node1}/cpu15 | 0 .../linux-test4/node/node1}/cpu8 | 0 .../linux-test4/node/node1}/cpu9 | 0 .../linux-test4/node/node1/meminfo | 0 .../linux-test4/node/possible | 0 .../linux-test5/cpu/cpu0}/topology/core_id | 0 .../linux-test5/cpu/cpu0}/topology/core_siblings | 0 .../cpu/cpu0}/topology/core_siblings_list | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test5}/cpu/cpu0/topology/thread_siblings | 0 .../cpu/cpu0/topology/thread_siblings_list | 0 .../linux-test5/cpu/cpu1}/online | 0 .../linux-test5/cpu/cpu1}/topology/core_id | 0 .../linux-test5/cpu/cpu1}/topology/core_siblings | 0 .../cpu/cpu1}/topology/core_siblings_list | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test5}/cpu/cpu1/topology/thread_siblings | 0 .../cpu/cpu1/topology/thread_siblings_list | 0 .../linux-test5/cpu/cpu2}/online | 0 .../linux-test5/cpu/cpu2}/topology/core_id | 0 .../linux-test5/cpu/cpu2}/topology/core_siblings | 0 .../cpu/cpu2}/topology/core_siblings_list | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test5}/cpu/cpu2/topology/thread_siblings | 0 .../cpu/cpu2/topology/thread_siblings_list | 0 .../linux-test5/cpu/cpu3}/online | 0 .../linux-test5}/cpu/cpu3/topology/core_id | 0 .../linux-test5/cpu/cpu3}/topology/core_siblings | 0 .../cpu/cpu3}/topology/core_siblings_list | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test5}/cpu/cpu3/topology/thread_siblings | 0 .../cpu/cpu3/topology/thread_siblings_list | 0 .../linux-test6/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0}/topology/physical_package_id | 0 .../linux-test6/cpu/cpu0}/topology/thread_siblings | 0 .../linux-test6/cpu/cpu1}/online | 0 .../linux-test6/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test6}/cpu/cpu1/topology/thread_siblings | 0 .../linux-test6/cpu/cpu2}/online | 0 .../linux-test6/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test6/cpu/cpu2}/topology/thread_siblings | 0 .../linux-test6/cpu/cpu3}/online | 0 .../linux-test6/cpu/cpu3/topology/core_id | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test6}/cpu/cpu3/topology/thread_siblings | 0 .../linux-test6/cpu/cpu4}/online | 0 .../linux-test6/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../linux-test6/cpu/cpu4}/topology/thread_siblings | 0 .../linux-test6/cpu/cpu5}/online | 0 .../linux-test6/cpu/cpu6}/online | 0 .../linux-test6/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../linux-test6/cpu/cpu6}/topology/thread_siblings | 0 .../linux-test6/cpu/cpu7}/online | 0 .../linux-test6}/node/node0/cpu0 | 0 .../linux-test6}/node/node0/cpu1 | 0 .../linux-test6}/node/node0/cpu2 | 0 .../linux-test6}/node/node0/cpu3 | 0 .../linux-test6}/node/node0/cpu4 | 0 .../linux-test6}/node/node0/cpu5 | 0 .../linux-test6}/node/node0/cpu6 | 0 .../linux-test6}/node/node0/cpu7 | 0 .../linux-test6/node/node0/meminfo | 0 .../linux-test6/node}/online | 0 .../linux-test6}/node/possible | 0 .../linux-test7/cpu/cpu0}/topology/core_id | 0 .../cpu/cpu0/topology}/physical_package_id | 0 .../linux-test7/cpu/cpu0/topology/thread_siblings | 0 .../linux-test7/cpu/cpu1}/online | 0 .../linux-test7/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu1/topology/thread_siblings | 0 .../linux-test7/cpu/cpu10}/online | 0 .../linux-test7/cpu/cpu10}/topology/core_id | 0 .../cpu/cpu10}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu10/topology/thread_siblings | 0 .../linux-test7/cpu/cpu11}/online | 0 .../linux-test7/cpu/cpu11}/topology/core_id | 0 .../cpu/cpu11}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu11/topology/thread_siblings | 0 .../linux-test7/cpu/cpu12}/online | 0 .../linux-test7/cpu/cpu12}/topology/core_id | 0 .../cpu/cpu12}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu12/topology/thread_siblings | 0 .../linux-test7/cpu/cpu13}/online | 0 .../linux-test7/cpu/cpu13}/topology/core_id | 0 .../cpu/cpu13}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu13/topology/thread_siblings | 0 .../linux-test7/cpu/cpu14}/online | 0 .../linux-test7/cpu/cpu14}/topology/core_id | 0 .../cpu/cpu14}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu14/topology/thread_siblings | 0 .../linux-test7/cpu/cpu15}/online | 0 .../linux-test7/cpu/cpu15}/topology/core_id | 0 .../cpu/cpu15}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu15/topology/thread_siblings | 0 .../linux-test7/cpu/cpu16}/online | 0 .../linux-test7/cpu/cpu16/topology/core_id | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu16/topology/thread_siblings | 0 .../linux-test7/cpu/cpu17}/online | 0 .../linux-test7/cpu/cpu17/topology/core_id | 0 .../cpu/cpu17}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu17/topology/thread_siblings | 0 .../linux-test7/cpu/cpu18}/online | 0 .../linux-test7/cpu/cpu18}/topology/core_id | 0 .../cpu/cpu18}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu18/topology/thread_siblings | 0 .../linux-test7/cpu/cpu19}/online | 0 .../linux-test7/cpu/cpu19}/topology/core_id | 0 .../cpu/cpu19}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu19/topology/thread_siblings | 0 .../linux-test7/cpu/cpu2}/online | 0 .../linux-test7/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu2/topology/thread_siblings | 0 .../linux-test7/cpu/cpu20}/online | 0 .../linux-test7/cpu/cpu20}/topology/core_id | 0 .../cpu/cpu20}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu20/topology/thread_siblings | 0 .../linux-test7/cpu/cpu21}/online | 0 .../linux-test7/cpu/cpu21}/topology/core_id | 0 .../cpu/cpu21}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu21/topology/thread_siblings | 0 .../linux-test7/cpu/cpu22}/online | 0 .../linux-test7/cpu/cpu22}/topology/core_id | 0 .../cpu/cpu22}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu22/topology/thread_siblings | 0 .../linux-test7/cpu/cpu23}/online | 0 .../linux-test7/cpu/cpu23}/topology/core_id | 0 .../cpu/cpu23}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu23/topology/thread_siblings | 0 .../linux-test7/cpu/cpu3}/online | 0 .../linux-test7}/cpu/cpu3/topology/core_id | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu3/topology/thread_siblings | 0 .../linux-test7/cpu/cpu4}/online | 0 .../linux-test7/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu4/topology/thread_siblings | 0 .../linux-test7/cpu/cpu5}/online | 0 .../linux-test7/cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu5/topology/thread_siblings | 0 .../linux-test7/cpu/cpu6}/online | 0 .../linux-test7/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu6/topology/thread_siblings | 0 .../linux-test7/cpu/cpu7}/online | 0 .../linux-test7/cpu/cpu7}/topology/core_id | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu7/topology/thread_siblings | 0 .../linux-test7/cpu/cpu8}/online | 0 .../linux-test7/cpu/cpu8}/topology/core_id | 0 .../cpu/cpu8}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu8/topology/thread_siblings | 0 .../linux-test7/cpu/cpu9}/online | 0 .../linux-test7/cpu/cpu9}/topology/core_id | 0 .../cpu/cpu9}/topology/physical_package_id | 0 .../linux-test7/cpu/cpu9/topology/thread_siblings | 0 .../linux-test7}/node/node0/cpu0 | 0 .../linux-test7}/node/node0/cpu1 | 0 .../linux-test7}/node/node0/cpu10 | 0 .../linux-test7}/node/node0/cpu11 | 0 .../linux-test7}/node/node0/cpu12 | 0 .../linux-test7}/node/node0/cpu13 | 0 .../linux-test7}/node/node0/cpu14 | 0 .../linux-test7}/node/node0/cpu15 | 0 .../linux-test7}/node/node0/cpu16 | 0 .../linux-test7}/node/node0/cpu17 | 0 .../linux-test7}/node/node0/cpu18 | 0 .../linux-test7}/node/node0/cpu19 | 0 .../linux-test7}/node/node0/cpu2 | 0 .../linux-test7}/node/node0/cpu20 | 0 .../linux-test7}/node/node0/cpu21 | 0 .../linux-test7}/node/node0/cpu22 | 0 .../linux-test7}/node/node0/cpu23 | 0 .../linux-test7}/node/node0/cpu3 | 0 .../linux-test7}/node/node0/cpu4 | 0 .../linux-test7}/node/node0/cpu5 | 0 .../linux-test7}/node/node0/cpu6 | 0 .../linux-test7}/node/node0/cpu7 | 0 .../linux-test7}/node/node0/cpu8 | 0 .../linux-test7}/node/node0/cpu9 | 0 .../linux-test7/node/node0/meminfo | 0 .../linux-test7/node}/online | 0 .../linux-test7/node}/possible | 0 .../linux-test8}/cpu/cpu0/topology/core_id | 0 .../cpu/cpu0/topology/physical_package_id | 0 .../linux-test8/cpu/cpu0}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu1}/online | 0 .../linux-test8/cpu/cpu1}/topology/core_id | 0 .../cpu/cpu1}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu1}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu10}/online | 0 .../linux-test8/cpu/cpu10}/topology/core_id | 0 .../cpu/cpu10}/topology/physical_package_id | 0 .../cpu/cpu10}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu11}/online | 0 .../linux-test8/cpu/cpu11}/topology/core_id | 0 .../cpu/cpu11}/topology/physical_package_id | 0 .../cpu/cpu11}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu12}/online | 0 .../linux-test8/cpu/cpu12}/topology/core_id | 0 .../cpu/cpu12}/topology/physical_package_id | 0 .../cpu/cpu12}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu13}/online | 0 .../linux-test8/cpu/cpu13}/topology/core_id | 0 .../cpu/cpu13}/topology/physical_package_id | 0 .../cpu/cpu13}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu14}/online | 0 .../linux-test8/cpu/cpu14}/topology/core_id | 0 .../cpu/cpu14}/topology/physical_package_id | 0 .../cpu/cpu14}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu15}/online | 0 .../linux-test8}/cpu/cpu15/topology/core_id | 0 .../cpu/cpu15}/topology/physical_package_id | 0 .../cpu/cpu15}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu16}/online | 0 .../linux-test8/cpu/cpu16}/topology/core_id | 0 .../cpu/cpu16}/topology/physical_package_id | 0 .../cpu/cpu16}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu17}/online | 0 .../linux-test8/cpu/cpu17}/topology/core_id | 0 .../cpu/cpu17}/topology/physical_package_id | 0 .../cpu/cpu17}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu18}/online | 0 .../linux-test8/cpu/cpu18}/topology/core_id | 0 .../cpu/cpu18}/topology/physical_package_id | 0 .../cpu/cpu18}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu19}/online | 0 .../linux-test8}/cpu/cpu19/topology/core_id | 0 .../cpu/cpu19}/topology/physical_package_id | 0 .../cpu/cpu19}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu2}/online | 0 .../linux-test8/cpu/cpu2}/topology/core_id | 0 .../cpu/cpu2}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu2}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu20}/online | 0 .../linux-test8/cpu/cpu20}/topology/core_id | 0 .../cpu/cpu20}/topology/physical_package_id | 0 .../cpu/cpu20}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu21}/online | 0 .../linux-test8/cpu/cpu21}/topology/core_id | 0 .../cpu/cpu21}/topology/physical_package_id | 0 .../cpu/cpu21}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu22}/online | 0 .../linux-test8/cpu/cpu22}/topology/core_id | 0 .../cpu/cpu22}/topology/physical_package_id | 0 .../cpu/cpu22}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu23}/online | 0 .../linux-test8}/cpu/cpu23/topology/core_id | 0 .../cpu/cpu23}/topology/physical_package_id | 0 .../cpu/cpu23}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu24}/online | 0 .../linux-test8/cpu/cpu24}/topology/core_id | 0 .../cpu/cpu24}/topology/physical_package_id | 0 .../cpu/cpu24}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu25}/online | 0 .../linux-test8/cpu/cpu25}/topology/core_id | 0 .../cpu/cpu25}/topology/physical_package_id | 0 .../cpu/cpu25}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu26}/online | 0 .../linux-test8/cpu/cpu26}/topology/core_id | 0 .../cpu/cpu26}/topology/physical_package_id | 0 .../cpu/cpu26}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu27}/online | 0 .../linux-test8/cpu/cpu27/topology/core_id | 0 .../cpu/cpu27}/topology/physical_package_id | 0 .../cpu/cpu27}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu28}/online | 0 .../linux-test8/cpu/cpu28}/topology/core_id | 0 .../cpu/cpu28}/topology/physical_package_id | 0 .../cpu/cpu28}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu29}/online | 0 .../linux-test8/cpu/cpu29}/topology/core_id | 0 .../cpu/cpu29}/topology/physical_package_id | 0 .../cpu/cpu29}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu3}/online | 0 .../linux-test8/cpu/cpu3}/topology/core_id | 0 .../cpu/cpu3}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu3}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu30}/online | 0 .../linux-test8/cpu/cpu30}/topology/core_id | 0 .../cpu/cpu30}/topology/physical_package_id | 0 .../cpu/cpu30}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu31}/online | 0 .../linux-test8/cpu/cpu31/topology/core_id | 0 .../cpu/cpu31}/topology/physical_package_id | 0 .../cpu/cpu31}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu32}/online | 0 .../linux-test8/cpu/cpu32}/topology/core_id | 0 .../cpu/cpu32}/topology/physical_package_id | 0 .../cpu/cpu32}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu33}/online | 0 .../linux-test8/cpu/cpu33}/topology/core_id | 0 .../cpu/cpu33}/topology/physical_package_id | 0 .../cpu/cpu33}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu34}/online | 0 .../linux-test8/cpu/cpu34}/topology/core_id | 0 .../cpu/cpu34}/topology/physical_package_id | 0 .../cpu/cpu34}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu35}/online | 0 .../linux-test8/cpu/cpu35}/topology/core_id | 0 .../cpu/cpu35}/topology/physical_package_id | 0 .../cpu/cpu35}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu36}/online | 0 .../linux-test8/cpu/cpu36}/topology/core_id | 0 .../cpu/cpu36}/topology/physical_package_id | 0 .../cpu/cpu36}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu37}/online | 0 .../linux-test8/cpu/cpu37/topology}/core_id | 0 .../cpu/cpu37}/topology/physical_package_id | 0 .../cpu/cpu37}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu38}/online | 0 .../linux-test8/cpu/cpu38}/topology/core_id | 0 .../cpu/cpu38}/topology/physical_package_id | 0 .../cpu/cpu38}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu39}/online | 0 .../linux-test8/cpu/cpu39}/topology/core_id | 0 .../cpu/cpu39}/topology/physical_package_id | 0 .../cpu/cpu39}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu4}/online | 0 .../linux-test8/cpu/cpu4}/topology/core_id | 0 .../cpu/cpu4}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu4}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu40}/online | 0 .../linux-test8/cpu/cpu40}/topology/core_id | 0 .../cpu/cpu40}/topology/physical_package_id | 0 .../cpu/cpu40}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu41}/online | 0 .../linux-test8/cpu/cpu41}/topology/core_id | 0 .../cpu/cpu41}/topology/physical_package_id | 0 .../cpu/cpu41}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu42}/online | 0 .../linux-test8/cpu/cpu42}/topology/core_id | 0 .../cpu/cpu42}/topology/physical_package_id | 0 .../cpu/cpu42}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu43}/online | 0 .../linux-test8/cpu/cpu43}/topology/core_id | 0 .../cpu/cpu43}/topology/physical_package_id | 0 .../cpu/cpu43}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu44}/online | 0 .../linux-test8/cpu/cpu44}/topology/core_id | 0 .../cpu/cpu44}/topology/physical_package_id | 0 .../cpu/cpu44}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu45}/online | 0 .../linux-test8/cpu/cpu45}/topology/core_id | 0 .../cpu/cpu45}/topology/physical_package_id | 0 .../cpu/cpu45}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu46}/online | 0 .../linux-test8/cpu/cpu46}/topology/core_id | 0 .../cpu/cpu46}/topology/physical_package_id | 0 .../cpu/cpu46}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu47}/online | 0 .../linux-test8/cpu/cpu47}/topology/core_id | 0 .../cpu/cpu47}/topology/physical_package_id | 0 .../cpu/cpu47}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu48}/online | 0 .../linux-test8/cpu/cpu48}/topology/core_id | 0 .../cpu/cpu48}/topology/physical_package_id | 0 .../cpu/cpu48}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu49}/online | 0 .../linux-test8/cpu/cpu49}/topology/core_id | 0 .../cpu/cpu49}/topology/physical_package_id | 0 .../cpu/cpu49}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu5}/online | 0 .../linux-test8/cpu/cpu5}/topology/core_id | 0 .../cpu/cpu5}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu5}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu50}/online | 0 .../linux-test8/cpu/cpu50}/topology/core_id | 0 .../cpu/cpu50}/topology/physical_package_id | 0 .../cpu/cpu50}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu51}/online | 0 .../linux-test8/cpu/cpu51}/topology/core_id | 0 .../cpu/cpu51}/topology/physical_package_id | 0 .../cpu/cpu51}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu52}/online | 0 .../linux-test8/cpu/cpu52}/topology/core_id | 0 .../cpu/cpu52}/topology/physical_package_id | 0 .../cpu/cpu52}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu53}/online | 0 .../linux-test8/cpu/cpu53}/topology/core_id | 0 .../cpu/cpu53}/topology/physical_package_id | 0 .../cpu/cpu53}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu54}/online | 0 .../linux-test8/cpu/cpu54}/topology/core_id | 0 .../cpu/cpu54}/topology/physical_package_id | 0 .../cpu/cpu54}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu55}/online | 0 .../linux-test8/cpu/cpu55}/topology/core_id | 0 .../cpu/cpu55}/topology/physical_package_id | 0 .../cpu/cpu55}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu56}/online | 0 .../linux-test8/cpu/cpu56}/topology/core_id | 0 .../cpu/cpu56/topology/physical_package_id} | 0 .../cpu/cpu56}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu57}/online | 0 .../linux-test8/cpu/cpu57}/topology/core_id | 0 .../cpu/cpu57}/topology/physical_package_id | 0 .../cpu/cpu57}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu58}/online | 0 .../linux-test8/cpu/cpu58}/topology/core_id | 0 .../cpu/cpu58}/topology/physical_package_id | 0 .../cpu/cpu58}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu59}/online | 0 .../linux-test8/cpu/cpu59}/topology/core_id | 0 .../cpu/cpu59}/topology/physical_package_id | 0 .../cpu/cpu59}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu6}/online | 0 .../linux-test8/cpu/cpu6}/topology/core_id | 0 .../cpu/cpu6}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu6}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu60}/online | 0 .../linux-test8/cpu/cpu60}/topology/core_id | 0 .../cpu/cpu60/topology/physical_package_id} | 0 .../cpu/cpu60}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu61}/online | 0 .../linux-test8/cpu/cpu61}/topology/core_id | 0 .../cpu/cpu61/topology/physical_package_id} | 0 .../cpu/cpu61}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu62}/online | 0 .../linux-test8/cpu/cpu62}/topology/core_id | 0 .../cpu/cpu62}/topology/physical_package_id | 0 .../cpu/cpu62}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu63}/online | 0 .../linux-test8/cpu/cpu63}/topology/core_id | 0 .../cpu/cpu63}/topology/physical_package_id | 0 .../cpu/cpu63}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu7}/online | 0 .../linux-test8/cpu/cpu7/topology/core_id} | 0 .../cpu/cpu7}/topology/physical_package_id | 0 .../linux-test8/cpu/cpu7}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu8/online} | 0 .../linux-test8/cpu/cpu8}/topology/core_id | 0 .../cpu/cpu8/topology/physical_package_id} | 0 .../linux-test8/cpu/cpu8}/topology/thread_siblings | 0 .../linux-test8/cpu/cpu9/online} | 0 .../linux-test8/cpu/cpu9}/topology/core_id | 0 .../cpu/cpu9/topology/physical_package_id} | 0 .../linux-test8/cpu/cpu9}/topology/thread_siblings | 0 .../linux-test8}/cpu/kernel_max | 0 .../linux-test8/cpu/offline | 0 .../linux-test8/cpu/online | 0 .../linux-test8/cpu/possible | 0 .../linux-test8/cpu/present | 0 .../linux-test8}/node/node0/cpu0 | 0 .../linux-test8}/node/node0/cpu12 | 0 .../linux-test8}/node/node0/cpu16 | 0 .../linux-test8}/node/node0/cpu20 | 0 .../linux-test8}/node/node0/cpu24 | 0 .../linux-test8}/node/node0/cpu28 | 0 .../linux-test8}/node/node0/cpu4 | 0 .../linux-test8}/node/node0/cpu8 | 0 .../linux-test8/node/node0/meminfo | 0 .../linux-test8/node/node1}/cpu32 | 0 .../linux-test8/node/node1}/cpu36 | 0 .../linux-test8}/node/node1/cpu40 | 0 .../linux-test8}/node/node1/cpu44 | 0 .../linux-test8}/node/node1/cpu48 | 0 .../linux-test8}/node/node1/cpu52 | 0 .../linux-test8/node/node1}/cpu56 | 0 .../linux-test8/node/node1}/cpu60 | 0 .../linux-test8/node/node1/meminfo | 0 .../linux-test8/node/node2}/cpu1 | 0 .../linux-test8/node/node2}/cpu13 | 0 .../linux-test8/node/node2}/cpu17 | 0 .../linux-test8/node/node2}/cpu21 | 0 .../linux-test8/node/node2}/cpu25 | 0 .../linux-test8/node/node2}/cpu29 | 0 .../linux-test8/node/node2}/cpu5 | 0 .../linux-test8/node/node2}/cpu9 | 0 .../linux-test8/node/node2/meminfo | 0 .../linux-test8/node/node3}/cpu33 | 0 .../linux-test8/node/node3}/cpu37 | 0 .../linux-test8/node/node3}/cpu41 | 0 .../linux-test8/node/node3}/cpu45 | 0 .../linux-test8/node/node3}/cpu49 | 0 .../linux-test8/node/node3}/cpu53 | 0 .../linux-test8/node/node3}/cpu57 | 0 .../linux-test8/node/node3}/cpu61 | 0 .../linux-test8/node/node3/meminfo | 0 .../linux-test8/node/node4}/cpu10 | 0 .../linux-test8/node/node4}/cpu14 | 0 .../linux-test8/node/node4}/cpu18 | 0 .../linux-test8/node/node4}/cpu2 | 0 .../linux-test8/node/node4}/cpu22 | 0 .../linux-test8/node/node4}/cpu26 | 0 .../linux-test8/node/node4}/cpu30 | 0 .../linux-test8/node/node4}/cpu6 | 0 .../linux-test8/node/node4/meminfo | 0 .../linux-test8/node/node5}/cpu34 | 0 .../linux-test8/node/node5}/cpu38 | 0 .../linux-test8/node/node5}/cpu42 | 0 .../linux-test8/node/node5}/cpu46 | 0 .../linux-test8/node/node5}/cpu50 | 0 .../linux-test8/node/node5}/cpu54 | 0 .../linux-test8/node/node5}/cpu58 | 0 .../linux-test8/node/node5}/cpu62 | 0 .../linux-test8/node/node5/meminfo | 0 .../linux-test8/node/node6}/cpu35 | 0 .../linux-test8/node/node6}/cpu39 | 0 .../linux-test8/node/node6}/cpu43 | 0 .../linux-test8/node/node6}/cpu47 | 0 .../linux-test8/node/node6}/cpu51 | 0 .../linux-test8/node/node6}/cpu55 | 0 .../linux-test8/node/node6}/cpu59 | 0 .../linux-test8/node/node6}/cpu63 | 0 .../linux-test8/node/node6/meminfo | 0 .../linux-test8/node/node7}/cpu11 | 0 .../linux-test8/node/node7}/cpu15 | 0 .../linux-test8/node/node7}/cpu19 | 0 .../linux-test8/node/node7}/cpu23 | 0 .../linux-test8/node/node7}/cpu27 | 0 .../linux-test8/node/node7}/cpu3 | 0 .../linux-test8/node/node7}/cpu31 | 0 .../linux-test8/node/node7}/cpu7 | 0 .../linux-test8/node/node7/meminfo | 0 .../cpu => virhostcpudata/linux-test8/node}/online | 0 .../linux-test8/node}/possible | 0 .../linux-x86_64-test1.cpuinfo | 0 .../linux-x86_64-test1.expected | 0 .../linux-x86_64-test2.cpuinfo | 0 .../linux-x86_64-test2.expected | 0 .../linux-x86_64-test3.cpuinfo | 0 .../linux-x86_64-test3.expected | 0 .../linux-x86_64-test4.cpuinfo | 0 .../linux-x86_64-test4.expected | 0 .../linux-x86_64-test5.cpuinfo | 0 .../linux-x86_64-test5.expected | 0 .../linux-x86_64-test6.cpuinfo | 0 .../linux-x86_64-test6.expected | 0 .../linux-x86_64-test7.cpuinfo | 0 .../linux-x86_64-test7.expected | 0 .../linux-x86_64-test8.cpuinfo | 0 .../linux-x86_64-test8.expected | 0 tests/{nodeinfomock.c => virhostcpumock.c} | 5 +- tests/{nodeinfotest.c => virhostcputest.c} | 44 +- tools/virsh-domain.c | 3 + tools/virsh.pod | 7 +- tools/virt-login-shell.c | 154 +- tools/virt-login-shell.conf | 30 +- tools/virt-login-shell.pod | 2 +- 2829 files changed, 2804 insertions(+), 2304 deletions(-) delete mode 100644 src/nodeinfopriv.h create mode 100644 src/util/virhostcpu.c create mode 100644 src/util/virhostcpu.h create mode 100644 src/util/virhostcpupriv.h create mode 100644 src/util/virhostmem.c create mode 100644 src/util/virhostmem.h rename tests/{nodeinfodata => virhostcpudata}/linux-aarch64-f21-mustang.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-aarch64-f21-mustang.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-aarch64-rhelsa-3.19.0-mustang.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-armv6l-raspberrypi.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-armv6l-raspberrypi.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-cpustat-24cpu.out (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-cpustat-24cpu.stat (100%) rename tests/{nodeinfodata/linux-test7/node => virhostcpudata/linux-deconf-cpus/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-test6/node => virhostcpudata/linux-deconf-cpus/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu7 => virhostcpudata/linux-deconf-cpus/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu5 => virhostcpudata/linux-deconf-cpus/cpu/cpu100}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu99 => virhostcpudata/linux-deconf-cpus/cpu/cpu101}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu98 => virhostcpudata/linux-deconf-cpus/cpu/cpu102}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu97 => virhostcpudata/linux-deconf-cpus/cpu/cpu103}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu9 => virhostcpudata/linux-deconf-cpus/cpu/cpu104}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu104/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu112 => virhostcpudata/linux-deconf-cpus/cpu/cpu104}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu112 => virhostcpudata/linux-deconf-cpus/cpu/cpu104}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu96 => virhostcpudata/linux-deconf-cpus/cpu/cpu104}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu104/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu104/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu95 => virhostcpudata/linux-deconf-cpus/cpu/cpu105}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu94 => virhostcpudata/linux-deconf-cpus/cpu/cpu106}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu93 => virhostcpudata/linux-deconf-cpus/cpu/cpu107}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu92 => virhostcpudata/linux-deconf-cpus/cpu/cpu108}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu91 => virhostcpudata/linux-deconf-cpus/cpu/cpu109}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu90 => virhostcpudata/linux-deconf-cpus/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu9 => virhostcpudata/linux-deconf-cpus/cpu/cpu110}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu89 => virhostcpudata/linux-deconf-cpus/cpu/cpu111}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu8 => virhostcpudata/linux-deconf-cpus/cpu/cpu112}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu112/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu104 => virhostcpudata/linux-deconf-cpus/cpu/cpu112}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu104 => virhostcpudata/linux-deconf-cpus/cpu/cpu112}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu88 => virhostcpudata/linux-deconf-cpus/cpu/cpu112}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu112/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu112/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu87 => virhostcpudata/linux-deconf-cpus/cpu/cpu113}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu86 => virhostcpudata/linux-deconf-cpus/cpu/cpu114}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu85 => virhostcpudata/linux-deconf-cpus/cpu/cpu115}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu84 => virhostcpudata/linux-deconf-cpus/cpu/cpu116}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu83 => virhostcpudata/linux-deconf-cpus/cpu/cpu117}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu82 => virhostcpudata/linux-deconf-cpus/cpu/cpu118}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu81 => virhostcpudata/linux-deconf-cpus/cpu/cpu119}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu79 => virhostcpudata/linux-deconf-cpus/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu7 => virhostcpudata/linux-deconf-cpus/cpu/cpu120}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-deconf-cpus}/cpu/cpu120/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu136 => virhostcpudata/linux-deconf-cpus/cpu/cpu120}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu136 => virhostcpudata/linux-deconf-cpus/cpu/cpu120}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-deconf-cpus/cpu/cpu120}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-deconf-cpus}/cpu/cpu120/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-deconf-cpus}/cpu/cpu120/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu78 => virhostcpudata/linux-deconf-cpus/cpu/cpu121}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu77 => virhostcpudata/linux-deconf-cpus/cpu/cpu122}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu76 => virhostcpudata/linux-deconf-cpus/cpu/cpu123}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu75 => virhostcpudata/linux-deconf-cpus/cpu/cpu124}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu74 => virhostcpudata/linux-deconf-cpus/cpu/cpu125}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu73 => virhostcpudata/linux-deconf-cpus/cpu/cpu126}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu71 => virhostcpudata/linux-deconf-cpus/cpu/cpu127}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu63 => virhostcpudata/linux-deconf-cpus/cpu/cpu128}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu128/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/cpu128/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/cpu128/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-deconf-cpus/cpu/cpu128}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu128/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu128/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu70 => virhostcpudata/linux-deconf-cpus/cpu/cpu129}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu7 => virhostcpudata/linux-deconf-cpus/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu69 => virhostcpudata/linux-deconf-cpus/cpu/cpu130}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu67 => virhostcpudata/linux-deconf-cpus/cpu/cpu131}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu66 => virhostcpudata/linux-deconf-cpus/cpu/cpu132}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu65 => virhostcpudata/linux-deconf-cpus/cpu/cpu133}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu64 => virhostcpudata/linux-deconf-cpus/cpu/cpu134}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu63 => virhostcpudata/linux-deconf-cpus/cpu/cpu135}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu62 => virhostcpudata/linux-deconf-cpus/cpu/cpu136}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu136/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu120 => virhostcpudata/linux-deconf-cpus/cpu/cpu136}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu120 => virhostcpudata/linux-deconf-cpus/cpu/cpu136}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-deconf-cpus/cpu/cpu136}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu136/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu136/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu62 => virhostcpudata/linux-deconf-cpus/cpu/cpu137}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu61 => virhostcpudata/linux-deconf-cpus/cpu/cpu138}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu60 => virhostcpudata/linux-deconf-cpus/cpu/cpu139}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu6 => virhostcpudata/linux-deconf-cpus/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu59 => virhostcpudata/linux-deconf-cpus/cpu/cpu140}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu58 => virhostcpudata/linux-deconf-cpus/cpu/cpu141}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu57 => virhostcpudata/linux-deconf-cpus/cpu/cpu142}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu55 => virhostcpudata/linux-deconf-cpus/cpu/cpu143}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu54 => virhostcpudata/linux-deconf-cpus/cpu/cpu144}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu53 => virhostcpudata/linux-deconf-cpus/cpu/cpu145}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu52 => virhostcpudata/linux-deconf-cpus/cpu/cpu146}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu51 => virhostcpudata/linux-deconf-cpus/cpu/cpu147}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu50 => virhostcpudata/linux-deconf-cpus/cpu/cpu148}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu5 => virhostcpudata/linux-deconf-cpus/cpu/cpu149}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu49 => virhostcpudata/linux-deconf-cpus/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu47 => virhostcpudata/linux-deconf-cpus/cpu/cpu150}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu46 => virhostcpudata/linux-deconf-cpus/cpu/cpu151}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu45 => virhostcpudata/linux-deconf-cpus/cpu/cpu152}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu44 => virhostcpudata/linux-deconf-cpus/cpu/cpu153}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu43 => virhostcpudata/linux-deconf-cpus/cpu/cpu154}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu42 => virhostcpudata/linux-deconf-cpus/cpu/cpu155}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu41 => virhostcpudata/linux-deconf-cpus/cpu/cpu156}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu4 => virhostcpudata/linux-deconf-cpus/cpu/cpu157}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu39 => virhostcpudata/linux-deconf-cpus/cpu/cpu158}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu38 => virhostcpudata/linux-deconf-cpus/cpu/cpu159}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu61 => virhostcpudata/linux-deconf-cpus/cpu/cpu16}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu16/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu24 => virhostcpudata/linux-deconf-cpus/cpu/cpu16}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu24 => virhostcpudata/linux-deconf-cpus/cpu/cpu16}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu8 => virhostcpudata/linux-deconf-cpus/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu16/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu16/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu37 => virhostcpudata/linux-deconf-cpus/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu36 => virhostcpudata/linux-deconf-cpus/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu35 => virhostcpudata/linux-deconf-cpus/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu34 => virhostcpudata/linux-deconf-cpus/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu33 => virhostcpudata/linux-deconf-cpus/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu32 => virhostcpudata/linux-deconf-cpus/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu31 => virhostcpudata/linux-deconf-cpus/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu30 => virhostcpudata/linux-deconf-cpus/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu60 => virhostcpudata/linux-deconf-cpus/cpu/cpu24}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu24/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu16 => virhostcpudata/linux-deconf-cpus/cpu/cpu24}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu16 => virhostcpudata/linux-deconf-cpus/cpu/cpu24}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu60 => virhostcpudata/linux-deconf-cpus/cpu/cpu24}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu24/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-deconf-cpus}/cpu/cpu24/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu3 => virhostcpudata/linux-deconf-cpus/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu29 => virhostcpudata/linux-deconf-cpus/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu28 => virhostcpudata/linux-deconf-cpus/cpu/cpu27}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu27 => virhostcpudata/linux-deconf-cpus/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu26 => virhostcpudata/linux-deconf-cpus/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu25 => virhostcpudata/linux-deconf-cpus/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu24 => virhostcpudata/linux-deconf-cpus/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu23 => virhostcpudata/linux-deconf-cpus/cpu/cpu31}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu22 => virhostcpudata/linux-deconf-cpus/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu21 => virhostcpudata/linux-deconf-cpus/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu20 => virhostcpudata/linux-deconf-cpus/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu2 => virhostcpudata/linux-deconf-cpus/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu19 => virhostcpudata/linux-deconf-cpus/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu18 => virhostcpudata/linux-deconf-cpus/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu17 => virhostcpudata/linux-deconf-cpus/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu16 => virhostcpudata/linux-deconf-cpus/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu151 => virhostcpudata/linux-deconf-cpus/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu6 => virhostcpudata/linux-deconf-cpus/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu40/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu72 => virhostcpudata/linux-deconf-cpus/cpu/cpu40}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu72 => virhostcpudata/linux-deconf-cpus/cpu/cpu40}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu9 => virhostcpudata/linux-deconf-cpus/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu40/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu40/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu150 => virhostcpudata/linux-deconf-cpus/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu15 => virhostcpudata/linux-deconf-cpus/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu149 => virhostcpudata/linux-deconf-cpus/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu148 => virhostcpudata/linux-deconf-cpus/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu147 => virhostcpudata/linux-deconf-cpus/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu146 => virhostcpudata/linux-deconf-cpus/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu145 => virhostcpudata/linux-deconf-cpus/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu59 => virhostcpudata/linux-deconf-cpus/cpu/cpu48}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu48/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/cpu48/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/cpu48/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu61 => virhostcpudata/linux-deconf-cpus/cpu/cpu48}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu48/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu48/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu144 => virhostcpudata/linux-deconf-cpus/cpu/cpu49}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu143 => virhostcpudata/linux-deconf-cpus/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu142 => virhostcpudata/linux-deconf-cpus/cpu/cpu50}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu141 => virhostcpudata/linux-deconf-cpus/cpu/cpu51}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu140 => virhostcpudata/linux-deconf-cpus/cpu/cpu52}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu14 => virhostcpudata/linux-deconf-cpus/cpu/cpu53}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu139 => virhostcpudata/linux-deconf-cpus/cpu/cpu54}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu138 => virhostcpudata/linux-deconf-cpus/cpu/cpu55}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu137 => virhostcpudata/linux-deconf-cpus/cpu/cpu56}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu135 => virhostcpudata/linux-deconf-cpus/cpu/cpu57}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu134 => virhostcpudata/linux-deconf-cpus/cpu/cpu58}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu133 => virhostcpudata/linux-deconf-cpus/cpu/cpu59}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu132 => virhostcpudata/linux-deconf-cpus/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu131 => virhostcpudata/linux-deconf-cpus/cpu/cpu60}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu130 => virhostcpudata/linux-deconf-cpus/cpu/cpu61}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu13 => virhostcpudata/linux-deconf-cpus/cpu/cpu62}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu129 => virhostcpudata/linux-deconf-cpus/cpu/cpu63}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu127 => virhostcpudata/linux-deconf-cpus/cpu/cpu64}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu126 => virhostcpudata/linux-deconf-cpus/cpu/cpu65}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu125 => virhostcpudata/linux-deconf-cpus/cpu/cpu66}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu124 => virhostcpudata/linux-deconf-cpus/cpu/cpu67}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu123 => virhostcpudata/linux-deconf-cpus/cpu/cpu68}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu122 => virhostcpudata/linux-deconf-cpus/cpu/cpu69}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu121 => virhostcpudata/linux-deconf-cpus/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu120 => virhostcpudata/linux-deconf-cpus/cpu/cpu70}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu12 => virhostcpudata/linux-deconf-cpus/cpu/cpu71}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu58 => virhostcpudata/linux-deconf-cpus/cpu/cpu72}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu72/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu40 => virhostcpudata/linux-deconf-cpus/cpu/cpu72}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu40 => virhostcpudata/linux-deconf-cpus/cpu/cpu72}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu57 => virhostcpudata/linux-deconf-cpus/cpu/cpu72}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu72/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/cpu72/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu119 => virhostcpudata/linux-deconf-cpus/cpu/cpu73}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu118 => virhostcpudata/linux-deconf-cpus/cpu/cpu74}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu117 => virhostcpudata/linux-deconf-cpus/cpu/cpu75}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu116 => virhostcpudata/linux-deconf-cpus/cpu/cpu76}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu115 => virhostcpudata/linux-deconf-cpus/cpu/cpu77}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu114 => virhostcpudata/linux-deconf-cpus/cpu/cpu78}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu113 => virhostcpudata/linux-deconf-cpus/cpu/cpu79}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu111 => virhostcpudata/linux-deconf-cpus/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu110 => virhostcpudata/linux-deconf-cpus/cpu/cpu80}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu11 => virhostcpudata/linux-deconf-cpus/cpu/cpu81}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu109 => virhostcpudata/linux-deconf-cpus/cpu/cpu82}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu108 => virhostcpudata/linux-deconf-cpus/cpu/cpu83}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu107 => virhostcpudata/linux-deconf-cpus/cpu/cpu84}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu106 => virhostcpudata/linux-deconf-cpus/cpu/cpu85}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu105 => virhostcpudata/linux-deconf-cpus/cpu/cpu86}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu103 => virhostcpudata/linux-deconf-cpus/cpu/cpu87}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu102 => virhostcpudata/linux-deconf-cpus/cpu/cpu88}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu101 => virhostcpudata/linux-deconf-cpus/cpu/cpu89}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu100 => virhostcpudata/linux-deconf-cpus/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu10 => virhostcpudata/linux-deconf-cpus/cpu/cpu90}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu1 => virhostcpudata/linux-deconf-cpus/cpu/cpu91}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu0 => virhostcpudata/linux-deconf-cpus/cpu/cpu92}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu99 => virhostcpudata/linux-deconf-cpus/cpu/cpu93}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu98 => virhostcpudata/linux-deconf-cpus/cpu/cpu94}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu97 => virhostcpudata/linux-deconf-cpus/cpu/cpu95}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu95 => virhostcpudata/linux-deconf-cpus/cpu/cpu96}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu94 => virhostcpudata/linux-deconf-cpus/cpu/cpu97}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu93 => virhostcpudata/linux-deconf-cpus/cpu/cpu98}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu92 => virhostcpudata/linux-deconf-cpus/cpu/cpu99}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/kernel_max (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/cpu/possible (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/cpu/present (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu1 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu10 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu100 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu101 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu102 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu103 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu11 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu13 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu14 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu144 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu145 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu146 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu147 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu148 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu149 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu15 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu150 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu151 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu152 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu153 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu154 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu155 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu156 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu157 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu158 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node17 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu159 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu17 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu18 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu19 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu2 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu20 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu21 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu22 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu23 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu24 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu25 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu26 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu27 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu28 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu29 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu3 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu30 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu31 (100%) rename tests/{nodeinfodata/linux-test8/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu32 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu33 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu34 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu35 (100%) rename tests/{nodeinfodata/linux-test8/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu36 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu37 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu38 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu39 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu5 (100%) rename tests/{nodeinfodata/linux-test8/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu56 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu57 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu58 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu59 (100%) rename tests/{nodeinfodata/linux-test8/node/node4 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu6 (100%) rename tests/{nodeinfodata/linux-test8/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu60 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu61 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu62 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu63 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu64 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu65 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu66 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu67 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu68 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu69 (100%) rename tests/{nodeinfodata/linux-test8/node/node7 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu7 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu70 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node1 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu71 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node0/cpu8 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu80 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu81 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu82 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu83 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu84 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu85 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu86 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu87 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu88 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu89 (100%) rename tests/{nodeinfodata/linux-test8/node/node2 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu9 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu90 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu91 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu92 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu93 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu94 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu95 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu96 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu97 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu98 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node16 => virhostcpudata/linux-deconf-cpus/node/node0}/cpu99 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu41 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu42 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu43 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu44 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu45 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu46 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu47 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu48 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu49 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu50 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu51 (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu52 (100%) rename tests/{nodeinfodata/linux-test8/node/node3 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu53 (100%) rename tests/{nodeinfodata/linux-test8/node/node5 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu54 (100%) rename tests/{nodeinfodata/linux-test8/node/node6 => virhostcpudata/linux-deconf-cpus/node/node1}/cpu55 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu72 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu73 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu74 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu75 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu76 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu77 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu78 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node1/cpu79 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu104 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu105 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu106 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu107 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu108 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu109 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu110 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu111 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu112 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu113 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu114 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu115 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu116 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu117 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu118 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node16/cpu119 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/node/node16/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu120 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu121 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu122 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu123 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu124 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu125 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu126 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu127 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu128 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu129 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu130 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu131 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu132 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu133 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu134 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu135 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu136 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu137 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu138 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu139 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu140 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu141 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu142 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/node17/cpu143 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-deconf-cpus/node/node17/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-deconf-cpus}/node/possible (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu57 => virhostcpudata/linux-f21-mustang/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu35 => virhostcpudata/linux-f21-mustang/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1 => virhostcpudata/linux-f21-mustang/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu1 => virhostcpudata/linux-f21-mustang/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu56 => virhostcpudata/linux-f21-mustang/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-f21-mustang}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu56 => virhostcpudata/linux-f21-mustang/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu7 => virhostcpudata/linux-f21-mustang/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu0 => virhostcpudata/linux-f21-mustang/cpu/cpu1}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu0 => virhostcpudata/linux-f21-mustang/cpu/cpu1}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu52 => virhostcpudata/linux-f21-mustang/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-f21-mustang}/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu6/topology/core_id => virhostcpudata/linux-f21-mustang/cpu/cpu1/topology/thread_siblings_list} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu55 => virhostcpudata/linux-f21-mustang/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu34 => virhostcpudata/linux-f21-mustang/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu3 => virhostcpudata/linux-f21-mustang/cpu/cpu2}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu3 => virhostcpudata/linux-f21-mustang/cpu/cpu2}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu53 => virhostcpudata/linux-f21-mustang/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-f21-mustang}/cpu/cpu2/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu54 => virhostcpudata/linux-f21-mustang/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu5 => virhostcpudata/linux-f21-mustang/cpu/cpu3}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu2 => virhostcpudata/linux-f21-mustang/cpu/cpu3}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu2 => virhostcpudata/linux-f21-mustang/cpu/cpu3}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu5 => virhostcpudata/linux-f21-mustang/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-f21-mustang}/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-f21-mustang}/cpu/cpu3/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu53 => virhostcpudata/linux-f21-mustang/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu33 => virhostcpudata/linux-f21-mustang/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu5 => virhostcpudata/linux-f21-mustang/cpu/cpu4}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu5 => virhostcpudata/linux-f21-mustang/cpu/cpu4}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu62 => virhostcpudata/linux-f21-mustang/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu4/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/cpu4/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu52 => virhostcpudata/linux-f21-mustang/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu4 => virhostcpudata/linux-f21-mustang/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu4 => virhostcpudata/linux-f21-mustang/cpu/cpu5}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu4 => virhostcpudata/linux-f21-mustang/cpu/cpu5}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu6 => virhostcpudata/linux-f21-mustang/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu5/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/cpu5/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu51 => virhostcpudata/linux-f21-mustang/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu32 => virhostcpudata/linux-f21-mustang/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu7 => virhostcpudata/linux-f21-mustang/cpu/cpu6}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu7 => virhostcpudata/linux-f21-mustang/cpu/cpu6}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu7 => virhostcpudata/linux-f21-mustang/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu6/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/cpu6/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu50 => virhostcpudata/linux-f21-mustang/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu39 => virhostcpudata/linux-f21-mustang/cpu/cpu7}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu6 => virhostcpudata/linux-f21-mustang/cpu/cpu7}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu6 => virhostcpudata/linux-f21-mustang/cpu/cpu7}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu63 => virhostcpudata/linux-f21-mustang/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/cpu7/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/cpu7/topology/thread_siblings_list (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-f21-mustang/cpu/kernel_max (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/offline (100%) rename tests/{nodeinfodata/linux-test8/node => virhostcpudata/linux-f21-mustang/cpu}/online (100%) rename tests/{nodeinfodata/linux-test8/node => virhostcpudata/linux-f21-mustang/cpu}/possible (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-f21-mustang}/cpu/present (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc-test1.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc-test1.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-deconf-cpus.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-deconf-cpus.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores1.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores1.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores2.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores2.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores3.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-ppc64-subcores3.expected (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu3 => virhostcpudata/linux-raspberrypi/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu5/online => virhostcpudata/linux-raspberrypi/cpu/cpu0/topology/core_siblings} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu48/topology/physical_package_id => virhostcpudata/linux-raspberrypi/cpu/cpu0/topology/core_siblings_list} (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-raspberrypi/cpu/cpu0/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu49/topology/physical_package_id => virhostcpudata/linux-raspberrypi/cpu/cpu0/topology/thread_siblings} (100%) rename tests/{nodeinfodata/linux-test2 => virhostcpudata/linux-raspberrypi}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu44/topology/physical_package_id => virhostcpudata/linux-raspberrypi/cpu/kernel_max} (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-raspberrypi/cpu/offline (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu91 => virhostcpudata/linux-raspberrypi/cpu}/online (100%) rename tests/{nodeinfodata/linux-test7/node => virhostcpudata/linux-raspberrypi/cpu}/possible (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu40/topology/physical_package_id => virhostcpudata/linux-raspberrypi/cpu/present} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu49 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu2 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu7 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu7 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu4 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu0}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu48 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu38 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu6 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu6 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu36 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu47/online => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu1/topology/thread_siblings_list} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu46 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu9 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu5 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu2}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu5 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu2}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu32 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu2/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu45 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu47 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu3}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu4 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu3}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu4 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu3}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu28 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu3/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu44 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu51 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu3 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu4}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu3 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu4}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu24 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu4/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/cpu4/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu43 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu55 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu2 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu5}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu2 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu5}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu20 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu5/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/cpu5/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu42 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu59 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu6}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu6}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu16 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu6/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/cpu6/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu41 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu63 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu7}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu7}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu7}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu12 => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/cpu7/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/cpu7/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/kernel_max (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-rhelsa-3.19.0-mustang/cpu/online (100%) rename tests/{nodeinfodata/linux-test3/node => virhostcpudata/linux-rhelsa-3.19.0-mustang/cpu}/possible (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-rhelsa-3.19.0-mustang}/cpu/present (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu40 => virhostcpudata/linux-subcores1/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu0/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu8 => virhostcpudata/linux-subcores1/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu8 => virhostcpudata/linux-subcores1/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-subcores1}/cpu/cpu0/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test1 => virhostcpudata/linux-subcores1}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu90 => virhostcpudata/linux-subcores1/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu9 => virhostcpudata/linux-subcores1/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu89 => virhostcpudata/linux-subcores1/cpu/cpu100}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu88 => virhostcpudata/linux-subcores1/cpu/cpu101}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu87 => virhostcpudata/linux-subcores1/cpu/cpu102}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu86 => virhostcpudata/linux-subcores1/cpu/cpu103}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu4 => virhostcpudata/linux-subcores1/cpu/cpu104}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu104/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu96 => virhostcpudata/linux-subcores1/cpu/cpu104}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu96 => virhostcpudata/linux-subcores1/cpu/cpu104}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu80 => virhostcpudata/linux-subcores1/cpu/cpu104}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu104/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu104/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu85 => virhostcpudata/linux-subcores1/cpu/cpu105}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu84 => virhostcpudata/linux-subcores1/cpu/cpu106}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu83 => virhostcpudata/linux-subcores1/cpu/cpu107}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu82 => virhostcpudata/linux-subcores1/cpu/cpu108}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu81 => virhostcpudata/linux-subcores1/cpu/cpu109}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu80 => virhostcpudata/linux-subcores1/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu79 => virhostcpudata/linux-subcores1/cpu/cpu110}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu78 => virhostcpudata/linux-subcores1/cpu/cpu111}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu39 => virhostcpudata/linux-subcores1/cpu/cpu112}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu112/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu88 => virhostcpudata/linux-subcores1/cpu/cpu112}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu88 => virhostcpudata/linux-subcores1/cpu/cpu112}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu112/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu112/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu112/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu77 => virhostcpudata/linux-subcores1/cpu/cpu113}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu76 => virhostcpudata/linux-subcores1/cpu/cpu114}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu75 => virhostcpudata/linux-subcores1/cpu/cpu115}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu74 => virhostcpudata/linux-subcores1/cpu/cpu116}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu73 => virhostcpudata/linux-subcores1/cpu/cpu117}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu72 => virhostcpudata/linux-subcores1/cpu/cpu118}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu71 => virhostcpudata/linux-subcores1/cpu/cpu119}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu70 => virhostcpudata/linux-subcores1/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu38 => virhostcpudata/linux-subcores1/cpu/cpu120}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores1}/cpu/cpu120/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu152 => virhostcpudata/linux-subcores1/cpu/cpu120}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu152 => virhostcpudata/linux-subcores1/cpu/cpu120}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores1/cpu/cpu120}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores1}/cpu/cpu120/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores1}/cpu/cpu120/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu7 => virhostcpudata/linux-subcores1/cpu/cpu121}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu69 => virhostcpudata/linux-subcores1/cpu/cpu122}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu68 => virhostcpudata/linux-subcores1/cpu/cpu123}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu67 => virhostcpudata/linux-subcores1/cpu/cpu124}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu66 => virhostcpudata/linux-subcores1/cpu/cpu125}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu65 => virhostcpudata/linux-subcores1/cpu/cpu126}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu64 => virhostcpudata/linux-subcores1/cpu/cpu127}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu37 => virhostcpudata/linux-subcores1/cpu/cpu128}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu128/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu144 => virhostcpudata/linux-subcores1/cpu/cpu128}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu144 => virhostcpudata/linux-subcores1/cpu/cpu128}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-subcores1/cpu/cpu128}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu128/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu128/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu63 => virhostcpudata/linux-subcores1/cpu/cpu129}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu62 => virhostcpudata/linux-subcores1/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu61 => virhostcpudata/linux-subcores1/cpu/cpu130}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu60 => virhostcpudata/linux-subcores1/cpu/cpu131}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu6 => virhostcpudata/linux-subcores1/cpu/cpu132}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu59 => virhostcpudata/linux-subcores1/cpu/cpu133}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu58 => virhostcpudata/linux-subcores1/cpu/cpu134}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu57 => virhostcpudata/linux-subcores1/cpu/cpu135}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu36 => virhostcpudata/linux-subcores1/cpu/cpu136}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu136/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu136/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu136/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores1/cpu/cpu136}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu136/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu136/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu56 => virhostcpudata/linux-subcores1/cpu/cpu137}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu55 => virhostcpudata/linux-subcores1/cpu/cpu138}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu54 => virhostcpudata/linux-subcores1/cpu/cpu139}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu53 => virhostcpudata/linux-subcores1/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu52 => virhostcpudata/linux-subcores1/cpu/cpu140}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu51 => virhostcpudata/linux-subcores1/cpu/cpu141}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu50 => virhostcpudata/linux-subcores1/cpu/cpu142}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu5 => virhostcpudata/linux-subcores1/cpu/cpu143}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu35 => virhostcpudata/linux-subcores1/cpu/cpu144}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu144/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu128 => virhostcpudata/linux-subcores1/cpu/cpu144}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu128 => virhostcpudata/linux-subcores1/cpu/cpu144}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores1/cpu/cpu144}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu144/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu144/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu49 => virhostcpudata/linux-subcores1/cpu/cpu145}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu47 => virhostcpudata/linux-subcores1/cpu/cpu146}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu46 => virhostcpudata/linux-subcores1/cpu/cpu147}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu45 => virhostcpudata/linux-subcores1/cpu/cpu148}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu44 => virhostcpudata/linux-subcores1/cpu/cpu149}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu43 => virhostcpudata/linux-subcores1/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu42 => virhostcpudata/linux-subcores1/cpu/cpu150}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu41 => virhostcpudata/linux-subcores1/cpu/cpu151}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu34 => virhostcpudata/linux-subcores1/cpu/cpu152}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-subcores1/cpu/cpu152}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu120 => virhostcpudata/linux-subcores1/cpu/cpu152}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu120 => virhostcpudata/linux-subcores1/cpu/cpu152}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu152/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu152/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu152/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu40 => virhostcpudata/linux-subcores1/cpu/cpu153}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu4 => virhostcpudata/linux-subcores1/cpu/cpu154}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu39 => virhostcpudata/linux-subcores1/cpu/cpu155}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu38 => virhostcpudata/linux-subcores1/cpu/cpu156}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu37 => virhostcpudata/linux-subcores1/cpu/cpu157}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu36 => virhostcpudata/linux-subcores1/cpu/cpu158}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu35 => virhostcpudata/linux-subcores1/cpu/cpu159}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu33 => virhostcpudata/linux-subcores1/cpu/cpu16}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu16/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu32 => virhostcpudata/linux-subcores1/cpu/cpu16}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu32 => virhostcpudata/linux-subcores1/cpu/cpu16}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu9 => virhostcpudata/linux-subcores1/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu16/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu16/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu34 => virhostcpudata/linux-subcores1/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu33 => virhostcpudata/linux-subcores1/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu31 => virhostcpudata/linux-subcores1/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu30 => virhostcpudata/linux-subcores1/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu3 => virhostcpudata/linux-subcores1/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu29 => virhostcpudata/linux-subcores1/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu28 => virhostcpudata/linux-subcores1/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu27 => virhostcpudata/linux-subcores1/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu32 => virhostcpudata/linux-subcores1/cpu/cpu24}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu24/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu24/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu24/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu8 => virhostcpudata/linux-subcores1/cpu/cpu24}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu24/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu24/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu26 => virhostcpudata/linux-subcores1/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu25 => virhostcpudata/linux-subcores1/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu23 => virhostcpudata/linux-subcores1/cpu/cpu27}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu22 => virhostcpudata/linux-subcores1/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu21 => virhostcpudata/linux-subcores1/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu20 => virhostcpudata/linux-subcores1/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu2 => virhostcpudata/linux-subcores1/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu19 => virhostcpudata/linux-subcores1/cpu/cpu31}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu31 => virhostcpudata/linux-subcores1/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu32/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu16 => virhostcpudata/linux-subcores1/cpu/cpu32}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu16 => virhostcpudata/linux-subcores1/cpu/cpu32}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu7 => virhostcpudata/linux-subcores1/cpu/cpu32}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu32/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu32/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu18 => virhostcpudata/linux-subcores1/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu17 => virhostcpudata/linux-subcores1/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu159 => virhostcpudata/linux-subcores1/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu158 => virhostcpudata/linux-subcores1/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu157 => virhostcpudata/linux-subcores1/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu156 => virhostcpudata/linux-subcores1/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu155 => virhostcpudata/linux-subcores1/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu154 => virhostcpudata/linux-subcores1/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu30 => virhostcpudata/linux-subcores1/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu40/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu72 => virhostcpudata/linux-subcores1/cpu/cpu40}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu72 => virhostcpudata/linux-subcores1/cpu/cpu40}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu45 => virhostcpudata/linux-subcores1/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu40/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu40/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu153 => virhostcpudata/linux-subcores1/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu152 => virhostcpudata/linux-subcores1/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu151 => virhostcpudata/linux-subcores1/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu150 => virhostcpudata/linux-subcores1/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu15 => virhostcpudata/linux-subcores1/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu149 => virhostcpudata/linux-subcores1/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu148 => virhostcpudata/linux-subcores1/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu3 => virhostcpudata/linux-subcores1/cpu/cpu48}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu48/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu64 => virhostcpudata/linux-subcores1/cpu/cpu48}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu64 => virhostcpudata/linux-subcores1/cpu/cpu48}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu41 => virhostcpudata/linux-subcores1/cpu/cpu48}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu48/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu48/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu147 => virhostcpudata/linux-subcores1/cpu/cpu49}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu146 => virhostcpudata/linux-subcores1/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu145 => virhostcpudata/linux-subcores1/cpu/cpu50}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu144 => virhostcpudata/linux-subcores1/cpu/cpu51}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu143 => virhostcpudata/linux-subcores1/cpu/cpu52}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu142 => virhostcpudata/linux-subcores1/cpu/cpu53}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu141 => virhostcpudata/linux-subcores1/cpu/cpu54}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu140 => virhostcpudata/linux-subcores1/cpu/cpu55}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu29 => virhostcpudata/linux-subcores1/cpu/cpu56}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu56/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu56/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu56/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu37 => virhostcpudata/linux-subcores1/cpu/cpu56}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu56/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu56/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu14 => virhostcpudata/linux-subcores1/cpu/cpu57}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu139 => virhostcpudata/linux-subcores1/cpu/cpu58}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu138 => virhostcpudata/linux-subcores1/cpu/cpu59}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu137 => virhostcpudata/linux-subcores1/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu135 => virhostcpudata/linux-subcores1/cpu/cpu60}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu134 => virhostcpudata/linux-subcores1/cpu/cpu61}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu133 => virhostcpudata/linux-subcores1/cpu/cpu62}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu132 => virhostcpudata/linux-subcores1/cpu/cpu63}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu28 => virhostcpudata/linux-subcores1/cpu/cpu64}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu68 => virhostcpudata/linux-subcores1/cpu/cpu64}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu48 => virhostcpudata/linux-subcores1/cpu/cpu64}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu48 => virhostcpudata/linux-subcores1/cpu/cpu64}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu33 => virhostcpudata/linux-subcores1/cpu/cpu64}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu64/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/cpu64/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu131 => virhostcpudata/linux-subcores1/cpu/cpu65}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu130 => virhostcpudata/linux-subcores1/cpu/cpu66}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu13 => virhostcpudata/linux-subcores1/cpu/cpu67}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu129 => virhostcpudata/linux-subcores1/cpu/cpu68}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu128 => virhostcpudata/linux-subcores1/cpu/cpu69}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu127 => virhostcpudata/linux-subcores1/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu126 => virhostcpudata/linux-subcores1/cpu/cpu70}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu125 => virhostcpudata/linux-subcores1/cpu/cpu71}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu27 => virhostcpudata/linux-subcores1/cpu/cpu72}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu72/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu40 => virhostcpudata/linux-subcores1/cpu/cpu72}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu40 => virhostcpudata/linux-subcores1/cpu/cpu72}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu29 => virhostcpudata/linux-subcores1/cpu/cpu72}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu72/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/cpu72/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu124 => virhostcpudata/linux-subcores1/cpu/cpu73}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu123 => virhostcpudata/linux-subcores1/cpu/cpu74}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu122 => virhostcpudata/linux-subcores1/cpu/cpu75}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu121 => virhostcpudata/linux-subcores1/cpu/cpu76}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu120 => virhostcpudata/linux-subcores1/cpu/cpu77}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu12 => virhostcpudata/linux-subcores1/cpu/cpu78}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu119 => virhostcpudata/linux-subcores1/cpu/cpu79}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu26 => virhostcpudata/linux-subcores1/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu8/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu0 => virhostcpudata/linux-subcores1/cpu/cpu8}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu0 => virhostcpudata/linux-subcores1/cpu/cpu8}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu6 => virhostcpudata/linux-subcores1/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu8/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu25 => virhostcpudata/linux-subcores1/cpu/cpu80}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu80/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu80/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu80/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu104 => virhostcpudata/linux-subcores1/cpu/cpu80}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu80/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu80/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu118 => virhostcpudata/linux-subcores1/cpu/cpu81}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu117 => virhostcpudata/linux-subcores1/cpu/cpu82}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu116 => virhostcpudata/linux-subcores1/cpu/cpu83}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu115 => virhostcpudata/linux-subcores1/cpu/cpu84}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu114 => virhostcpudata/linux-subcores1/cpu/cpu85}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu113 => virhostcpudata/linux-subcores1/cpu/cpu86}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu112 => virhostcpudata/linux-subcores1/cpu/cpu87}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu24 => virhostcpudata/linux-subcores1/cpu/cpu88}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu88/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu112 => virhostcpudata/linux-subcores1/cpu/cpu88}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu112 => virhostcpudata/linux-subcores1/cpu/cpu88}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu96 => virhostcpudata/linux-subcores1/cpu/cpu88}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu88/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu88/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu111 => virhostcpudata/linux-subcores1/cpu/cpu89}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu110 => virhostcpudata/linux-subcores1/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu11 => virhostcpudata/linux-subcores1/cpu/cpu90}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu109 => virhostcpudata/linux-subcores1/cpu/cpu91}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu108 => virhostcpudata/linux-subcores1/cpu/cpu92}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu107 => virhostcpudata/linux-subcores1/cpu/cpu93}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu106 => virhostcpudata/linux-subcores1/cpu/cpu94}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu105 => virhostcpudata/linux-subcores1/cpu/cpu95}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu23 => virhostcpudata/linux-subcores1/cpu/cpu96}/online (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu96/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu104 => virhostcpudata/linux-subcores1/cpu/cpu96}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu104 => virhostcpudata/linux-subcores1/cpu/cpu96}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu88 => virhostcpudata/linux-subcores1/cpu/cpu96}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu96/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/cpu96/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu104 => virhostcpudata/linux-subcores1/cpu/cpu97}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu103 => virhostcpudata/linux-subcores1/cpu/cpu98}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu102 => virhostcpudata/linux-subcores1/cpu/cpu99}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/kernel_max (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/cpu/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/cpu/possible (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/cpu/present (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu10 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu11 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu13 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu14 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu15 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu17 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu18 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu19 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu2 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu20 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu21 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu22 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu23 (100%) rename tests/{nodeinfodata/linux-test3/node/node1 => virhostcpudata/linux-subcores1/node/node0}/cpu24 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node0}/cpu25 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node0}/cpu26 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node0}/cpu27 (100%) rename tests/{nodeinfodata/linux-test3/node/node1 => virhostcpudata/linux-subcores1/node/node0}/cpu28 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node0}/cpu29 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node0}/cpu30 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node0}/cpu31 (100%) rename tests/{nodeinfodata/linux-test3/node/node1 => virhostcpudata/linux-subcores1/node/node0}/cpu32 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node0}/cpu33 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node0}/cpu34 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node0}/cpu35 (100%) rename tests/{nodeinfodata/linux-test3/node/node1 => virhostcpudata/linux-subcores1/node/node0}/cpu36 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node0}/cpu37 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node0}/cpu38 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node0}/cpu39 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu7 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu8 (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-subcores1}/node/node0/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores1}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node1}/cpu41 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node1}/cpu42 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node1}/cpu43 (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores1}/node/node1/cpu44 (100%) rename tests/{nodeinfodata/linux-test3/node/node7 => virhostcpudata/linux-subcores1/node/node1}/cpu45 (100%) rename tests/{nodeinfodata/linux-test3/node/node5 => virhostcpudata/linux-subcores1/node/node1}/cpu46 (100%) rename tests/{nodeinfodata/linux-test3/node/node3 => virhostcpudata/linux-subcores1/node/node1}/cpu47 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu48 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu49 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu50 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu51 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu52 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu53 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu54 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu55 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu56 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu57 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu58 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu59 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu60 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu61 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu62 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores1}/node/node1/cpu63 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu64 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu65 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu66 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu67 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu68 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu69 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu70 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu71 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu72 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu73 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu74 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu75 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu76 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu77 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu78 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node1/cpu79 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu100 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu101 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu102 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu103 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu104 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu105 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu106 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu107 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu108 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu109 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu110 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu111 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu112 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu113 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu114 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu115 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu116 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu117 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu118 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu119 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu80 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu81 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu82 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu83 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu84 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu85 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu86 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu87 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu88 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu89 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu90 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu91 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu92 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu93 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu94 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu95 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu96 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu97 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu98 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node16/cpu99 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/node/node16/meminfo (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu120 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu121 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu122 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu123 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu124 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu125 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu126 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu127 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu128 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu129 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu130 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu131 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu132 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu133 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu134 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu135 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu136 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu137 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu138 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu139 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu140 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu141 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu142 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu143 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu144 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu145 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu146 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu147 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu148 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu149 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu150 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu151 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu152 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu153 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu154 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu155 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu156 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu157 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu158 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/node17/cpu159 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores1/node/node17/meminfo (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores1}/node/possible (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu22 => virhostcpudata/linux-subcores2/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu0/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu8 => virhostcpudata/linux-subcores2/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu8 => virhostcpudata/linux-subcores2/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu5 => virhostcpudata/linux-subcores2/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu101 => virhostcpudata/linux-subcores2/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu100 => virhostcpudata/linux-subcores2/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu10 => virhostcpudata/linux-subcores2/cpu/cpu100}/online (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu1 => virhostcpudata/linux-subcores2/cpu/cpu101}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu99 => virhostcpudata/linux-subcores2/cpu/cpu102}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu98 => virhostcpudata/linux-subcores2/cpu/cpu103}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu97 => virhostcpudata/linux-subcores2/cpu/cpu104}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu104/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu88 => virhostcpudata/linux-subcores2/cpu/cpu104}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu88 => virhostcpudata/linux-subcores2/cpu/cpu104}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu80 => virhostcpudata/linux-subcores2/cpu/cpu104}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu104/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu104/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu95 => virhostcpudata/linux-subcores2/cpu/cpu105}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu94 => virhostcpudata/linux-subcores2/cpu/cpu106}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu93 => virhostcpudata/linux-subcores2/cpu/cpu107}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu92 => virhostcpudata/linux-subcores2/cpu/cpu108}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu91 => virhostcpudata/linux-subcores2/cpu/cpu109}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu90 => virhostcpudata/linux-subcores2/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu9 => virhostcpudata/linux-subcores2/cpu/cpu110}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu89 => virhostcpudata/linux-subcores2/cpu/cpu111}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu87 => virhostcpudata/linux-subcores2/cpu/cpu112}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu112/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu80 => virhostcpudata/linux-subcores2/cpu/cpu112}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu80 => virhostcpudata/linux-subcores2/cpu/cpu112}/topology/core_siblings_list (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu112/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu112/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu112/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu86 => virhostcpudata/linux-subcores2/cpu/cpu113}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu85 => virhostcpudata/linux-subcores2/cpu/cpu114}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu84 => virhostcpudata/linux-subcores2/cpu/cpu115}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu83 => virhostcpudata/linux-subcores2/cpu/cpu116}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu82 => virhostcpudata/linux-subcores2/cpu/cpu117}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu81 => virhostcpudata/linux-subcores2/cpu/cpu118}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu79 => virhostcpudata/linux-subcores2/cpu/cpu119}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu78 => virhostcpudata/linux-subcores2/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu77 => virhostcpudata/linux-subcores2/cpu/cpu120}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu76 => virhostcpudata/linux-subcores2/cpu/cpu121}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu75 => virhostcpudata/linux-subcores2/cpu/cpu122}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu74 => virhostcpudata/linux-subcores2/cpu/cpu123}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu73 => virhostcpudata/linux-subcores2/cpu/cpu124}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu71 => virhostcpudata/linux-subcores2/cpu/cpu125}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu70 => virhostcpudata/linux-subcores2/cpu/cpu126}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu7 => virhostcpudata/linux-subcores2/cpu/cpu127}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu69 => virhostcpudata/linux-subcores2/cpu/cpu128}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu128/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu128/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu128/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu136 => virhostcpudata/linux-subcores2/cpu/cpu128}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu128/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu128/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu68 => virhostcpudata/linux-subcores2/cpu/cpu129}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu67 => virhostcpudata/linux-subcores2/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu66 => virhostcpudata/linux-subcores2/cpu/cpu130}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu65 => virhostcpudata/linux-subcores2/cpu/cpu131}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu63 => virhostcpudata/linux-subcores2/cpu/cpu132}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu62 => virhostcpudata/linux-subcores2/cpu/cpu133}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu61 => virhostcpudata/linux-subcores2/cpu/cpu134}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu60 => virhostcpudata/linux-subcores2/cpu/cpu135}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu21 => virhostcpudata/linux-subcores2/cpu/cpu136}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu136/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu136/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu136/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu128 => virhostcpudata/linux-subcores2/cpu/cpu136}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu136/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu136/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu6 => virhostcpudata/linux-subcores2/cpu/cpu137}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu59 => virhostcpudata/linux-subcores2/cpu/cpu138}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu58 => virhostcpudata/linux-subcores2/cpu/cpu139}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu57 => virhostcpudata/linux-subcores2/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu55 => virhostcpudata/linux-subcores2/cpu/cpu140}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu54 => virhostcpudata/linux-subcores2/cpu/cpu141}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu53 => virhostcpudata/linux-subcores2/cpu/cpu142}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu52 => virhostcpudata/linux-subcores2/cpu/cpu143}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu51 => virhostcpudata/linux-subcores2/cpu/cpu144}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu50 => virhostcpudata/linux-subcores2/cpu/cpu145}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu5 => virhostcpudata/linux-subcores2/cpu/cpu146}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu49 => virhostcpudata/linux-subcores2/cpu/cpu147}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu47 => virhostcpudata/linux-subcores2/cpu/cpu148}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu46 => virhostcpudata/linux-subcores2/cpu/cpu149}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu45 => virhostcpudata/linux-subcores2/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu44 => virhostcpudata/linux-subcores2/cpu/cpu150}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu43 => virhostcpudata/linux-subcores2/cpu/cpu151}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu42 => virhostcpudata/linux-subcores2/cpu/cpu152}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu41 => virhostcpudata/linux-subcores2/cpu/cpu153}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu4 => virhostcpudata/linux-subcores2/cpu/cpu154}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu39 => virhostcpudata/linux-subcores2/cpu/cpu155}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu38 => virhostcpudata/linux-subcores2/cpu/cpu156}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu37 => virhostcpudata/linux-subcores2/cpu/cpu157}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu36 => virhostcpudata/linux-subcores2/cpu/cpu158}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu35 => virhostcpudata/linux-subcores2/cpu/cpu159}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu20 => virhostcpudata/linux-subcores2/cpu/cpu16}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu16/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu32 => virhostcpudata/linux-subcores2/cpu/cpu16}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu32 => virhostcpudata/linux-subcores2/cpu/cpu16}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu4 => virhostcpudata/linux-subcores2/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu16/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu16/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu34 => virhostcpudata/linux-subcores2/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu33 => virhostcpudata/linux-subcores2/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu31 => virhostcpudata/linux-subcores2/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu30 => virhostcpudata/linux-subcores2/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu3 => virhostcpudata/linux-subcores2/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu29 => virhostcpudata/linux-subcores2/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu28 => virhostcpudata/linux-subcores2/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu27 => virhostcpudata/linux-subcores2/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu2 => virhostcpudata/linux-subcores2/cpu/cpu24}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu24/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu24/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu24/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu3 => virhostcpudata/linux-subcores2/cpu/cpu24}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu24/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores2}/cpu/cpu24/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu26 => virhostcpudata/linux-subcores2/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu25 => virhostcpudata/linux-subcores2/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu23 => virhostcpudata/linux-subcores2/cpu/cpu27}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu22 => virhostcpudata/linux-subcores2/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu21 => virhostcpudata/linux-subcores2/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu20 => virhostcpudata/linux-subcores2/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu2 => virhostcpudata/linux-subcores2/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu19 => virhostcpudata/linux-subcores2/cpu/cpu31}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu19 => virhostcpudata/linux-subcores2/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu32/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu16 => virhostcpudata/linux-subcores2/cpu/cpu32}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu16 => virhostcpudata/linux-subcores2/cpu/cpu32}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu2 => virhostcpudata/linux-subcores2/cpu/cpu32}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu32/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu32/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu18 => virhostcpudata/linux-subcores2/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu17 => virhostcpudata/linux-subcores2/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu159 => virhostcpudata/linux-subcores2/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu158 => virhostcpudata/linux-subcores2/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu157 => virhostcpudata/linux-subcores2/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu156 => virhostcpudata/linux-subcores2/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu155 => virhostcpudata/linux-subcores2/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu154 => virhostcpudata/linux-subcores2/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu153 => virhostcpudata/linux-subcores2/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu40/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu72 => virhostcpudata/linux-subcores2/cpu/cpu40}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu72 => virhostcpudata/linux-subcores2/cpu/cpu40}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu25 => virhostcpudata/linux-subcores2/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu40/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu40/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu151 => virhostcpudata/linux-subcores2/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu150 => virhostcpudata/linux-subcores2/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu15 => virhostcpudata/linux-subcores2/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu149 => virhostcpudata/linux-subcores2/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu148 => virhostcpudata/linux-subcores2/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu147 => virhostcpudata/linux-subcores2/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu146 => virhostcpudata/linux-subcores2/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu18 => virhostcpudata/linux-subcores2/cpu/cpu48}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu48/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu48/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu48/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu21 => virhostcpudata/linux-subcores2/cpu/cpu48}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu48/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu48/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu145 => virhostcpudata/linux-subcores2/cpu/cpu49}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu143 => virhostcpudata/linux-subcores2/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu142 => virhostcpudata/linux-subcores2/cpu/cpu50}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu141 => virhostcpudata/linux-subcores2/cpu/cpu51}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu140 => virhostcpudata/linux-subcores2/cpu/cpu52}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu14 => virhostcpudata/linux-subcores2/cpu/cpu53}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu139 => virhostcpudata/linux-subcores2/cpu/cpu54}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu138 => virhostcpudata/linux-subcores2/cpu/cpu55}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu137 => virhostcpudata/linux-subcores2/cpu/cpu56}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu56/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu56/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu56/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu17 => virhostcpudata/linux-subcores2/cpu/cpu56}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu56/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu56/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu135 => virhostcpudata/linux-subcores2/cpu/cpu57}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu134 => virhostcpudata/linux-subcores2/cpu/cpu58}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu133 => virhostcpudata/linux-subcores2/cpu/cpu59}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu132 => virhostcpudata/linux-subcores2/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu131 => virhostcpudata/linux-subcores2/cpu/cpu60}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu130 => virhostcpudata/linux-subcores2/cpu/cpu61}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu13 => virhostcpudata/linux-subcores2/cpu/cpu62}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu129 => virhostcpudata/linux-subcores2/cpu/cpu63}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu127 => virhostcpudata/linux-subcores2/cpu/cpu64}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu126 => virhostcpudata/linux-subcores2/cpu/cpu65}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu125 => virhostcpudata/linux-subcores2/cpu/cpu66}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu124 => virhostcpudata/linux-subcores2/cpu/cpu67}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu123 => virhostcpudata/linux-subcores2/cpu/cpu68}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu122 => virhostcpudata/linux-subcores2/cpu/cpu69}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu121 => virhostcpudata/linux-subcores2/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu12 => virhostcpudata/linux-subcores2/cpu/cpu70}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu119 => virhostcpudata/linux-subcores2/cpu/cpu71}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu118 => virhostcpudata/linux-subcores2/cpu/cpu72}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu72/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu40 => virhostcpudata/linux-subcores2/cpu/cpu72}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu40 => virhostcpudata/linux-subcores2/cpu/cpu72}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu13 => virhostcpudata/linux-subcores2/cpu/cpu72}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu72/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/cpu72/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu117 => virhostcpudata/linux-subcores2/cpu/cpu73}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu116 => virhostcpudata/linux-subcores2/cpu/cpu74}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu115 => virhostcpudata/linux-subcores2/cpu/cpu75}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu114 => virhostcpudata/linux-subcores2/cpu/cpu76}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu113 => virhostcpudata/linux-subcores2/cpu/cpu77}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu111 => virhostcpudata/linux-subcores2/cpu/cpu78}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu110 => virhostcpudata/linux-subcores2/cpu/cpu79}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu17 => virhostcpudata/linux-subcores2/cpu/cpu8}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu8/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu0 => virhostcpudata/linux-subcores2/cpu/cpu8}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu0 => virhostcpudata/linux-subcores2/cpu/cpu8}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu11 => virhostcpudata/linux-subcores2/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu8/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu11 => virhostcpudata/linux-subcores2/cpu/cpu80}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu80/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu112 => virhostcpudata/linux-subcores2/cpu/cpu80}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu112 => virhostcpudata/linux-subcores2/cpu/cpu80}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu104 => virhostcpudata/linux-subcores2/cpu/cpu80}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu80/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu80/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu109 => virhostcpudata/linux-subcores2/cpu/cpu81}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu108 => virhostcpudata/linux-subcores2/cpu/cpu82}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu107 => virhostcpudata/linux-subcores2/cpu/cpu83}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu106 => virhostcpudata/linux-subcores2/cpu/cpu84}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu105 => virhostcpudata/linux-subcores2/cpu/cpu85}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu103 => virhostcpudata/linux-subcores2/cpu/cpu86}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu102 => virhostcpudata/linux-subcores2/cpu/cpu87}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu101 => virhostcpudata/linux-subcores2/cpu/cpu88}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu88/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu104 => virhostcpudata/linux-subcores2/cpu/cpu88}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu104 => virhostcpudata/linux-subcores2/cpu/cpu88}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu96 => virhostcpudata/linux-subcores2/cpu/cpu88}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu88/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu88/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu100 => virhostcpudata/linux-subcores2/cpu/cpu89}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu10 => virhostcpudata/linux-subcores2/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu1 => virhostcpudata/linux-subcores2/cpu/cpu90}/online (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu => virhostcpudata/linux-subcores2/cpu/cpu91}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu99 => virhostcpudata/linux-subcores2/cpu/cpu92}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu98 => virhostcpudata/linux-subcores2/cpu/cpu93}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu97 => virhostcpudata/linux-subcores2/cpu/cpu94}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu96 => virhostcpudata/linux-subcores2/cpu/cpu95}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu16 => virhostcpudata/linux-subcores2/cpu/cpu96}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu96/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu96/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu96/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu88 => virhostcpudata/linux-subcores2/cpu/cpu96}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu96/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/cpu96/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu95 => virhostcpudata/linux-subcores2/cpu/cpu97}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu94 => virhostcpudata/linux-subcores2/cpu/cpu98}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu93 => virhostcpudata/linux-subcores2/cpu/cpu99}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/kernel_max (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/cpu/possible (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/cpu/present (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu10 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu11 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu12 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu13 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu14 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu15 (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores2}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-test3/node/node6 => virhostcpudata/linux-subcores2/node/node0}/cpu17 (100%) rename tests/{nodeinfodata/linux-test3/node/node4 => virhostcpudata/linux-subcores2/node/node0}/cpu18 (100%) rename tests/{nodeinfodata/linux-test3/node/node2 => virhostcpudata/linux-subcores2/node/node0}/cpu19 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu2 (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores2}/node/node0/cpu20 (100%) rename tests/{nodeinfodata/linux-test3/node/node6 => virhostcpudata/linux-subcores2/node/node0}/cpu21 (100%) rename tests/{nodeinfodata/linux-test3/node/node4 => virhostcpudata/linux-subcores2/node/node0}/cpu22 (100%) rename tests/{nodeinfodata/linux-test3/node/node2 => virhostcpudata/linux-subcores2/node/node0}/cpu23 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu24 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu25 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu26 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu27 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu28 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu29 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu30 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu31 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu32 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu33 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu34 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu35 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu36 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu37 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu38 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node0/cpu39 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-subcores2}/node/node0/cpu7 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu8 (100%) rename tests/{nodeinfodata/linux-test4/node/node1 => virhostcpudata/linux-subcores2/node/node0}/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu41 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu42 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu43 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu44 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu45 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu46 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-subcores2}/node/node1/cpu47 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu48 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu49 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu50 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu51 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu52 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu53 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu54 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu55 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu56 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu57 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu58 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu59 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu60 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu61 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu62 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/cpu63 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu64 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu65 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu66 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu67 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu68 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu69 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu70 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu71 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu72 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu73 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu74 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu75 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu76 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu77 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu78 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node1/cpu79 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu100 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu101 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu102 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu103 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu104 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu105 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu106 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu107 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu108 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu109 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu110 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu111 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu112 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu113 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu114 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu115 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu116 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu117 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu118 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu119 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu80 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu81 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu82 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu83 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu84 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu85 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu86 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu87 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu88 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu89 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu90 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu91 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu92 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu93 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu94 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu95 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu96 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu97 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu98 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node16/cpu99 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node16/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu120 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu121 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu122 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu123 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu124 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu125 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu126 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu127 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu128 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu129 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu130 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu131 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu132 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu133 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu134 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu135 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu136 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu137 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu138 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu139 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu140 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu141 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu142 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu143 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu144 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu145 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu146 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu147 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu148 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu149 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu150 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu151 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu152 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu153 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu154 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu155 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu156 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu157 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu158 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/node17/cpu159 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores2/node/node17/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores2}/node/possible (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu92 => virhostcpudata/linux-subcores3/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu91 => virhostcpudata/linux-subcores3/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu90 => virhostcpudata/linux-subcores3/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu9 => virhostcpudata/linux-subcores3/cpu/cpu100}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu89 => virhostcpudata/linux-subcores3/cpu/cpu101}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu88 => virhostcpudata/linux-subcores3/cpu/cpu102}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu87 => virhostcpudata/linux-subcores3/cpu/cpu103}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu15 => virhostcpudata/linux-subcores3/cpu/cpu104}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu104/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu96 => virhostcpudata/linux-subcores3/cpu/cpu104}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu96 => virhostcpudata/linux-subcores3/cpu/cpu104}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu80 => virhostcpudata/linux-subcores3/cpu/cpu104}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu104/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu104/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu86 => virhostcpudata/linux-subcores3/cpu/cpu105}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu85 => virhostcpudata/linux-subcores3/cpu/cpu106}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu84 => virhostcpudata/linux-subcores3/cpu/cpu107}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu83 => virhostcpudata/linux-subcores3/cpu/cpu108}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu82 => virhostcpudata/linux-subcores3/cpu/cpu109}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu81 => virhostcpudata/linux-subcores3/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu80 => virhostcpudata/linux-subcores3/cpu/cpu110}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu8 => virhostcpudata/linux-subcores3/cpu/cpu111}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu14 => virhostcpudata/linux-subcores3/cpu/cpu112}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu112/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu88 => virhostcpudata/linux-subcores3/cpu/cpu112}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu88 => virhostcpudata/linux-subcores3/cpu/cpu112}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu112/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu112/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu112/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu79 => virhostcpudata/linux-subcores3/cpu/cpu113}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu78 => virhostcpudata/linux-subcores3/cpu/cpu114}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu77 => virhostcpudata/linux-subcores3/cpu/cpu115}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu76 => virhostcpudata/linux-subcores3/cpu/cpu116}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu75 => virhostcpudata/linux-subcores3/cpu/cpu117}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu74 => virhostcpudata/linux-subcores3/cpu/cpu118}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu73 => virhostcpudata/linux-subcores3/cpu/cpu119}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu71 => virhostcpudata/linux-subcores3/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu70 => virhostcpudata/linux-subcores3/cpu/cpu120}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu7 => virhostcpudata/linux-subcores3/cpu/cpu121}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu69 => virhostcpudata/linux-subcores3/cpu/cpu122}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu68 => virhostcpudata/linux-subcores3/cpu/cpu123}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu67 => virhostcpudata/linux-subcores3/cpu/cpu124}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu66 => virhostcpudata/linux-subcores3/cpu/cpu125}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu65 => virhostcpudata/linux-subcores3/cpu/cpu126}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu64 => virhostcpudata/linux-subcores3/cpu/cpu127}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu13 => virhostcpudata/linux-subcores3/cpu/cpu128}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu128/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-subcores3/cpu/cpu128}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-subcores3/cpu/cpu128}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu136 => virhostcpudata/linux-subcores3/cpu/cpu128}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu128/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu128/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu63 => virhostcpudata/linux-subcores3/cpu/cpu129}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu62 => virhostcpudata/linux-subcores3/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu61 => virhostcpudata/linux-subcores3/cpu/cpu130}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu60 => virhostcpudata/linux-subcores3/cpu/cpu131}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu6 => virhostcpudata/linux-subcores3/cpu/cpu132}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu59 => virhostcpudata/linux-subcores3/cpu/cpu133}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu58 => virhostcpudata/linux-subcores3/cpu/cpu134}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu57 => virhostcpudata/linux-subcores3/cpu/cpu135}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu12 => virhostcpudata/linux-subcores3/cpu/cpu136}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu136/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu136}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu136}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu128 => virhostcpudata/linux-subcores3/cpu/cpu136}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu136/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu136/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu56 => virhostcpudata/linux-subcores3/cpu/cpu137}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu55 => virhostcpudata/linux-subcores3/cpu/cpu138}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu54 => virhostcpudata/linux-subcores3/cpu/cpu139}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu53 => virhostcpudata/linux-subcores3/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu52 => virhostcpudata/linux-subcores3/cpu/cpu140}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu51 => virhostcpudata/linux-subcores3/cpu/cpu141}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu50 => virhostcpudata/linux-subcores3/cpu/cpu142}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu5 => virhostcpudata/linux-subcores3/cpu/cpu143}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu49 => virhostcpudata/linux-subcores3/cpu/cpu144}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu47 => virhostcpudata/linux-subcores3/cpu/cpu145}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu46 => virhostcpudata/linux-subcores3/cpu/cpu146}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu45 => virhostcpudata/linux-subcores3/cpu/cpu147}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu44 => virhostcpudata/linux-subcores3/cpu/cpu148}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu43 => virhostcpudata/linux-subcores3/cpu/cpu149}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu42 => virhostcpudata/linux-subcores3/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu41 => virhostcpudata/linux-subcores3/cpu/cpu150}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu4 => virhostcpudata/linux-subcores3/cpu/cpu151}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu11 => virhostcpudata/linux-subcores3/cpu/cpu152}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu152}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu152}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu152}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu152/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-subcores3/cpu/cpu152}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-subcores3/cpu/cpu152}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu10 => virhostcpudata/linux-subcores3/cpu/cpu153}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu144 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu153}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu1 => virhostcpudata/linux-subcores3/cpu/cpu154}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu136 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu154}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu9 => virhostcpudata/linux-subcores3/cpu/cpu155}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu155/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu155}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu155}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu128 => virhostcpudata/linux-subcores3/cpu/cpu155}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu155}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu155}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu8 => virhostcpudata/linux-subcores3/cpu/cpu156}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu120 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-subcores3/cpu/cpu156}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu7 => virhostcpudata/linux-subcores3/cpu/cpu157}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu136 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu157}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu6 => virhostcpudata/linux-subcores3/cpu/cpu158}/online (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu136 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu136 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu128 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu158}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu5 => virhostcpudata/linux-subcores3/cpu/cpu159}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu128 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu128 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu120 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu159}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu39 => virhostcpudata/linux-subcores3/cpu/cpu16}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu38 => virhostcpudata/linux-subcores3/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu37 => virhostcpudata/linux-subcores3/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu36 => virhostcpudata/linux-subcores3/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu35 => virhostcpudata/linux-subcores3/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu34 => virhostcpudata/linux-subcores3/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu33 => virhostcpudata/linux-subcores3/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu32 => virhostcpudata/linux-subcores3/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu31 => virhostcpudata/linux-subcores3/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu30 => virhostcpudata/linux-subcores3/cpu/cpu24}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu3 => virhostcpudata/linux-subcores3/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu29 => virhostcpudata/linux-subcores3/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu28 => virhostcpudata/linux-subcores3/cpu/cpu27}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu27 => virhostcpudata/linux-subcores3/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu26 => virhostcpudata/linux-subcores3/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu25 => virhostcpudata/linux-subcores3/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu23 => virhostcpudata/linux-subcores3/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu22 => virhostcpudata/linux-subcores3/cpu/cpu31}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu21 => virhostcpudata/linux-subcores3/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu20 => virhostcpudata/linux-subcores3/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu2 => virhostcpudata/linux-subcores3/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu19 => virhostcpudata/linux-subcores3/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu18 => virhostcpudata/linux-subcores3/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu17 => virhostcpudata/linux-subcores3/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu159 => virhostcpudata/linux-subcores3/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu158 => virhostcpudata/linux-subcores3/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu157 => virhostcpudata/linux-subcores3/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu4 => virhostcpudata/linux-subcores3/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu40/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu72 => virhostcpudata/linux-subcores3/cpu/cpu40}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu72 => virhostcpudata/linux-subcores3/cpu/cpu40}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu1 => virhostcpudata/linux-subcores3/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu40/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu40/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu156 => virhostcpudata/linux-subcores3/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu155 => virhostcpudata/linux-subcores3/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu154 => virhostcpudata/linux-subcores3/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu153 => virhostcpudata/linux-subcores3/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu152 => virhostcpudata/linux-subcores3/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu151 => virhostcpudata/linux-subcores3/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu150 => virhostcpudata/linux-subcores3/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu3 => virhostcpudata/linux-subcores3/cpu/cpu48}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu48/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu68 => virhostcpudata/linux-subcores3/cpu/cpu48}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu68 => virhostcpudata/linux-subcores3/cpu/cpu48}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu23 => virhostcpudata/linux-subcores3/cpu/cpu48}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu48/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu48/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu15 => virhostcpudata/linux-subcores3/cpu/cpu49}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu149 => virhostcpudata/linux-subcores3/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu148 => virhostcpudata/linux-subcores3/cpu/cpu50}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu147 => virhostcpudata/linux-subcores3/cpu/cpu51}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu146 => virhostcpudata/linux-subcores3/cpu/cpu52}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu145 => virhostcpudata/linux-subcores3/cpu/cpu53}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu144 => virhostcpudata/linux-subcores3/cpu/cpu54}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu143 => virhostcpudata/linux-subcores3/cpu/cpu55}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu23 => virhostcpudata/linux-subcores3/cpu/cpu56}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu56/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu56/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu56/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu22 => virhostcpudata/linux-subcores3/cpu/cpu56}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu56/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu56/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu142 => virhostcpudata/linux-subcores3/cpu/cpu57}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu141 => virhostcpudata/linux-subcores3/cpu/cpu58}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu140 => virhostcpudata/linux-subcores3/cpu/cpu59}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu14 => virhostcpudata/linux-subcores3/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu139 => virhostcpudata/linux-subcores3/cpu/cpu60}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu138 => virhostcpudata/linux-subcores3/cpu/cpu61}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu137 => virhostcpudata/linux-subcores3/cpu/cpu62}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu135 => virhostcpudata/linux-subcores3/cpu/cpu63}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu134 => virhostcpudata/linux-subcores3/cpu/cpu64}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu133 => virhostcpudata/linux-subcores3/cpu/cpu65}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu132 => virhostcpudata/linux-subcores3/cpu/cpu66}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu131 => virhostcpudata/linux-subcores3/cpu/cpu67}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu22 => virhostcpudata/linux-subcores3/cpu/cpu68}/online (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu64 => virhostcpudata/linux-subcores3/cpu/cpu68}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu48 => virhostcpudata/linux-subcores3/cpu/cpu68}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu48 => virhostcpudata/linux-subcores3/cpu/cpu68}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu21 => virhostcpudata/linux-subcores3/cpu/cpu68}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu68/topology/thread_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu68/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu130 => virhostcpudata/linux-subcores3/cpu/cpu69}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu13 => virhostcpudata/linux-subcores3/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu129 => virhostcpudata/linux-subcores3/cpu/cpu70}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu127 => virhostcpudata/linux-subcores3/cpu/cpu71}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu21 => virhostcpudata/linux-subcores3/cpu/cpu72}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu72/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu40 => virhostcpudata/linux-subcores3/cpu/cpu72}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu40 => virhostcpudata/linux-subcores3/cpu/cpu72}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu20 => virhostcpudata/linux-subcores3/cpu/cpu72}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu72/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/cpu72/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu126 => virhostcpudata/linux-subcores3/cpu/cpu73}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu125 => virhostcpudata/linux-subcores3/cpu/cpu74}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu124 => virhostcpudata/linux-subcores3/cpu/cpu75}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu123 => virhostcpudata/linux-subcores3/cpu/cpu76}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu122 => virhostcpudata/linux-subcores3/cpu/cpu77}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu121 => virhostcpudata/linux-subcores3/cpu/cpu78}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu12 => virhostcpudata/linux-subcores3/cpu/cpu79}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu20 => virhostcpudata/linux-subcores3/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu8/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu8/topology/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/cpu8/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu10 => virhostcpudata/linux-subcores3/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu8/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu2 => virhostcpudata/linux-subcores3/cpu/cpu80}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu80/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu80/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu80/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu104 => virhostcpudata/linux-subcores3/cpu/cpu80}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu80/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu80/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu119 => virhostcpudata/linux-subcores3/cpu/cpu81}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu118 => virhostcpudata/linux-subcores3/cpu/cpu82}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu117 => virhostcpudata/linux-subcores3/cpu/cpu83}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu116 => virhostcpudata/linux-subcores3/cpu/cpu84}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu115 => virhostcpudata/linux-subcores3/cpu/cpu85}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu114 => virhostcpudata/linux-subcores3/cpu/cpu86}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu113 => virhostcpudata/linux-subcores3/cpu/cpu87}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu19 => virhostcpudata/linux-subcores3/cpu/cpu88}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu88/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu112 => virhostcpudata/linux-subcores3/cpu/cpu88}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu112 => virhostcpudata/linux-subcores3/cpu/cpu88}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu112 => virhostcpudata/linux-subcores3/cpu/cpu88}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu88/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu88/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu111 => virhostcpudata/linux-subcores3/cpu/cpu89}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu110 => virhostcpudata/linux-subcores3/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu11 => virhostcpudata/linux-subcores3/cpu/cpu90}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu109 => virhostcpudata/linux-subcores3/cpu/cpu91}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu108 => virhostcpudata/linux-subcores3/cpu/cpu92}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu107 => virhostcpudata/linux-subcores3/cpu/cpu93}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu106 => virhostcpudata/linux-subcores3/cpu/cpu94}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu105 => virhostcpudata/linux-subcores3/cpu/cpu95}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu18 => virhostcpudata/linux-subcores3/cpu/cpu96}/online (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu96/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu104 => virhostcpudata/linux-subcores3/cpu/cpu96}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu104 => virhostcpudata/linux-subcores3/cpu/cpu96}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu104 => virhostcpudata/linux-subcores3/cpu/cpu96}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu96/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/cpu96/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu103 => virhostcpudata/linux-subcores3/cpu/cpu97}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu102 => virhostcpudata/linux-subcores3/cpu/cpu98}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu101 => virhostcpudata/linux-subcores3/cpu/cpu99}/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/kernel_max (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/cpu/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/cpu/possible (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/cpu/present (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-test3/node/node4 => virhostcpudata/linux-subcores3/node/node0}/cpu10 (100%) rename tests/{nodeinfodata/linux-test3/node/node2 => virhostcpudata/linux-subcores3/node/node0}/cpu11 (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores3}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-test3/node/node6 => virhostcpudata/linux-subcores3/node/node0}/cpu13 (100%) rename tests/{nodeinfodata/linux-test3/node/node4 => virhostcpudata/linux-subcores3/node/node0}/cpu14 (100%) rename tests/{nodeinfodata/linux-test3/node/node2 => virhostcpudata/linux-subcores3/node/node0}/cpu15 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu16 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu17 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu18 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu19 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu2 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu20 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu21 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu22 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/cpu23 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu24 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu25 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu26 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu27 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu28 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu29 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu30 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu31 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu32 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu33 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu34 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu35 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu36 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu37 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu38 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node0/cpu39 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-subcores3}/node/node0/cpu7 (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-subcores3}/node/node0/cpu8 (100%) rename tests/{nodeinfodata/linux-test3/node/node6 => virhostcpudata/linux-subcores3/node/node0}/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu41 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu42 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu43 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu44 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu45 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu46 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-subcores3}/node/node1/cpu47 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu48 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu49 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu50 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu51 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu52 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu53 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu54 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu55 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu56 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu57 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu58 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu59 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu60 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu61 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu62 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-subcores3}/node/node1/cpu63 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu64 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu65 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu66 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu67 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu68 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu69 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu70 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node1}/cpu71 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu72 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu73 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu74 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu75 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu76 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu77 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu78 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node1/cpu79 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu100 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu101 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu102 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu103 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu104 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu105 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu106 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu107 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu108 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu109 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu110 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu111 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu112 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu113 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu114 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu115 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu116 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu117 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu118 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node16/cpu119 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu80 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu81 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu82 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu83 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu84 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu85 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu86 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu87 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu88 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu89 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu90 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu91 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu92 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu93 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu94 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu95 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu96 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu97 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu98 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node16}/cpu99 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node16/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu120 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu121 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu122 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu123 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu124 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu125 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu126 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu127 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu128 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu129 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu130 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu131 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu132 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu133 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu134 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu135 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu136 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu137 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu138 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu139 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu140 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu141 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu142 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/node17/cpu143 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu144 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu145 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu146 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu147 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu148 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu149 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu150 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu151 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu152 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu153 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu154 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu155 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu156 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu157 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu158 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-subcores3/node/node17}/cpu159 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-subcores3/node/node17/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/online (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-subcores3}/node/possible (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu17 => virhostcpudata/linux-test1/cpu/cpu0}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu1 => virhostcpudata/linux-test1/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test1/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test1/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu1 => virhostcpudata/linux-test1/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test1/cpu/cpu0}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test1}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu37/topology => virhostcpudata/linux-test1/cpu/cpu1}/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test1/cpu/cpu1/core_siblings (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test1/cpu/cpu1/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu16 => virhostcpudata/linux-test1/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu0/topology => virhostcpudata/linux-test1/cpu/cpu1}/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test1/cpu/cpu1/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1/topology => virhostcpudata/linux-test1/cpu/cpu1}/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu36 => virhostcpudata/linux-test1/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test1/cpu/cpu1}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test1/cpu/cpu1}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu6 => virhostcpudata/linux-test1/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test1/cpu/cpu1}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-test1/cpu/cpu1}/topology/thread_siblings_list (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test1/node/node0/meminfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test1/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-test2}/cpu/cpu0/topology/core_id (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu1 => virhostcpudata/linux-test2/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1 => virhostcpudata/linux-test2/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu4 => virhostcpudata/linux-test2/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test2/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-raspberrypi => virhostcpudata/linux-test2}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu15 => virhostcpudata/linux-test2/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu7 => virhostcpudata/linux-test2/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu0 => virhostcpudata/linux-test2/cpu/cpu1}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu0 => virhostcpudata/linux-test2/cpu/cpu1}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu3 => virhostcpudata/linux-test2/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test2/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu19/topology/physical_package_id => virhostcpudata/linux-test2/cpu/cpu1/topology/thread_siblings_list} (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-test2}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-test3/node/node6 => virhostcpudata/linux-test2/node/node0}/cpu1 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test2/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-test6 => virhostcpudata/linux-test2}/node/possible (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu14 => virhostcpudata/linux-test3/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu18 => virhostcpudata/linux-test3/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu59 => virhostcpudata/linux-test3/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu10}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu58 => virhostcpudata/linux-test3/cpu/cpu10}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu10/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu12 => virhostcpudata/linux-test3/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu43 => virhostcpudata/linux-test3/cpu/cpu11}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu18 => virhostcpudata/linux-test3/cpu/cpu11}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu11/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu11 => virhostcpudata/linux-test3/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu46 => virhostcpudata/linux-test3/cpu/cpu12}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu12}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu12/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu10 => virhostcpudata/linux-test3/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu45 => virhostcpudata/linux-test3/cpu/cpu13}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu55 => virhostcpudata/linux-test3/cpu/cpu13}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu13/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu44 => virhostcpudata/linux-test3/cpu/cpu14}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu54 => virhostcpudata/linux-test3/cpu/cpu14}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu14/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-test3}/cpu/cpu15/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu17 => virhostcpudata/linux-test3/cpu/cpu15}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu15/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu16}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu50 => virhostcpudata/linux-test3/cpu/cpu16}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu16/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu49 => virhostcpudata/linux-test3/cpu/cpu17}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu51 => virhostcpudata/linux-test3/cpu/cpu17}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu17/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu48 => virhostcpudata/linux-test3/cpu/cpu18}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu50 => virhostcpudata/linux-test3/cpu/cpu18}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu18/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-test3}/cpu/cpu19/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu16 => virhostcpudata/linux-test3/cpu/cpu19}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu19/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu12 => virhostcpudata/linux-test3/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu46 => virhostcpudata/linux-test3/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu54 => virhostcpudata/linux-test3/cpu/cpu20}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu20}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu20/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu53 => virhostcpudata/linux-test3/cpu/cpu21}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu47 => virhostcpudata/linux-test3/cpu/cpu21}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu21/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu9 => virhostcpudata/linux-test3/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu52 => virhostcpudata/linux-test3/cpu/cpu22}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu42 => virhostcpudata/linux-test3/cpu/cpu22}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu22/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test8 => virhostcpudata/linux-test3}/cpu/cpu23/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu15 => virhostcpudata/linux-test3/cpu/cpu23}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu23/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu7 => virhostcpudata/linux-test3/cpu/cpu24}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu24}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu24}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu24/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu25}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu43 => virhostcpudata/linux-test3/cpu/cpu25}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu25/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu5 => virhostcpudata/linux-test3/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu26}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu38 => virhostcpudata/linux-test3/cpu/cpu26}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu26/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu27}/online (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu27}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu14 => virhostcpudata/linux-test3/cpu/cpu27}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu27/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu19 => virhostcpudata/linux-test3/cpu/cpu28}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu28}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu28/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu29}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu39 => virhostcpudata/linux-test3/cpu/cpu29}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu29/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu15 => virhostcpudata/linux-test3/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu3}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu14 => virhostcpudata/linux-test3/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu30}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu34 => virhostcpudata/linux-test3/cpu/cpu30}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu30/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu31}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu31}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu12 => virhostcpudata/linux-test3/cpu/cpu31}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu31/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu12 => virhostcpudata/linux-test3/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu42 => virhostcpudata/linux-test3/cpu/cpu32}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu32}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu32/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu11 => virhostcpudata/linux-test3/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu41 => virhostcpudata/linux-test3/cpu/cpu33}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu35 => virhostcpudata/linux-test3/cpu/cpu33}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu33/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu10 => virhostcpudata/linux-test3/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu40 => virhostcpudata/linux-test3/cpu/cpu34}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu30 => virhostcpudata/linux-test3/cpu/cpu34}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu34/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu1 => virhostcpudata/linux-test3/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu11 => virhostcpudata/linux-test3/cpu/cpu35}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu9 => virhostcpudata/linux-test3/cpu/cpu35}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu35/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu9 => virhostcpudata/linux-test3/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu14 => virhostcpudata/linux-test3/cpu/cpu36}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu7 => virhostcpudata/linux-test3/cpu/cpu36}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu36/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu37}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu31 => virhostcpudata/linux-test3/cpu/cpu37}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu37/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu7 => virhostcpudata/linux-test3/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu12 => virhostcpudata/linux-test3/cpu/cpu38}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu26 => virhostcpudata/linux-test3/cpu/cpu38}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu38/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu9 => virhostcpudata/linux-test3/cpu/cpu39}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu39}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu39/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu5 => virhostcpudata/linux-test3/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu4/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu47 => virhostcpudata/linux-test3/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu18 => virhostcpudata/linux-test3/cpu/cpu40}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu5 => virhostcpudata/linux-test3/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu40/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu46 => virhostcpudata/linux-test3/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu17 => virhostcpudata/linux-test3/cpu/cpu41}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu41}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu41/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu45 => virhostcpudata/linux-test3/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu16 => virhostcpudata/linux-test3/cpu/cpu42}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu22 => virhostcpudata/linux-test3/cpu/cpu42}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu42/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu44 => virhostcpudata/linux-test3/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu43}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu15 => virhostcpudata/linux-test3/cpu/cpu43}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu43/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu43 => virhostcpudata/linux-test3/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu22 => virhostcpudata/linux-test3/cpu/cpu44}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu44}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu44/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu42 => virhostcpudata/linux-test3/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu21 => virhostcpudata/linux-test3/cpu/cpu45}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu27 => virhostcpudata/linux-test3/cpu/cpu45}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu45/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu41 => virhostcpudata/linux-test3/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu20 => virhostcpudata/linux-test3/cpu/cpu46}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu2 => virhostcpudata/linux-test3/cpu/cpu46}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu46/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu40 => virhostcpudata/linux-test3/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu5 => virhostcpudata/linux-test3/cpu/cpu47}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu14 => virhostcpudata/linux-test3/cpu/cpu47}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu47/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu4 => virhostcpudata/linux-test3/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu0 => virhostcpudata/linux-test3/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu23 => virhostcpudata/linux-test3/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu5/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu39 => virhostcpudata/linux-test3/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu7 => virhostcpudata/linux-test3/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu18 => virhostcpudata/linux-test3/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu6/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu38 => virhostcpudata/linux-test3/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu6 => virhostcpudata/linux-test3/cpu/cpu7}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu13 => virhostcpudata/linux-test3/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu7/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu37 => virhostcpudata/linux-test3/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu10 => virhostcpudata/linux-test3/cpu/cpu8}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu3 => virhostcpudata/linux-test3/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu36 => virhostcpudata/linux-test3/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu8 => virhostcpudata/linux-test3/cpu/cpu9}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu19 => virhostcpudata/linux-test3/cpu/cpu9}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/cpu/cpu9/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test2 => virhostcpudata/linux-test3}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test3}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test3}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test3}/node/node0/cpu20 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test3}/node/node0/cpu8 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node1}/cpu24 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node1}/cpu28 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node1}/cpu32 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node1}/cpu36 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test3}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test3}/node/node1/cpu44 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node2}/cpu11 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node2}/cpu15 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node2}/cpu19 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node2}/cpu23 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node2/cpu3 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node2/cpu7 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node2/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node3}/cpu27 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node3}/cpu31 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node3}/cpu35 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node3}/cpu39 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node3}/cpu43 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node3}/cpu47 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node3/meminfo (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node4}/cpu10 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node4}/cpu14 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node4}/cpu18 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node4/cpu2 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node4}/cpu22 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node4/cpu6 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node4/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node5}/cpu26 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node5}/cpu30 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node5}/cpu34 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node5}/cpu38 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node5}/cpu42 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node5}/cpu46 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node5/meminfo (100%) rename tests/{nodeinfodata/linux-test2/node/node0 => virhostcpudata/linux-test3/node/node6}/cpu1 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node6}/cpu13 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node6}/cpu17 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test3/node/node6}/cpu21 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node6/cpu5 (100%) rename tests/{nodeinfodata/linux-subcores3/node/node0 => virhostcpudata/linux-test3/node/node6}/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node6/meminfo (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node7}/cpu25 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node7}/cpu29 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node7}/cpu33 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node0 => virhostcpudata/linux-test3/node/node7}/cpu37 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node7}/cpu41 (100%) rename tests/{nodeinfodata/linux-subcores1/node/node1 => virhostcpudata/linux-test3/node/node7}/cpu45 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test3/node/node7/meminfo (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu => virhostcpudata/linux-test3/node}/possible (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu5 => virhostcpudata/linux-test4/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu2 => virhostcpudata/linux-test4/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-test4}/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu35 => virhostcpudata/linux-test4/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu20 => virhostcpudata/linux-test4/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu1/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-test4}/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu34 => virhostcpudata/linux-test4/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu2 => virhostcpudata/linux-test4/cpu/cpu10}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu12 => virhostcpudata/linux-test4/cpu/cpu10}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu10/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu33 => virhostcpudata/linux-test4/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu6 => virhostcpudata/linux-test4/cpu/cpu11}/topology/core_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu11/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu11/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu32 => virhostcpudata/linux-test4/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu4 => virhostcpudata/linux-test4/cpu/cpu12}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu10 => virhostcpudata/linux-test4/cpu/cpu12}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu12/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu31 => virhostcpudata/linux-test4/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu5 => virhostcpudata/linux-test4/cpu/cpu13}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu7 => virhostcpudata/linux-test4/cpu/cpu13}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu13/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu30 => virhostcpudata/linux-test4/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu6 => virhostcpudata/linux-test4/cpu/cpu14}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu47 => virhostcpudata/linux-test4/cpu/cpu14}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu14/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu3 => virhostcpudata/linux-test4/cpu/cpu15}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu15/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu43 => virhostcpudata/linux-test4/cpu/cpu15}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu15/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu29 => virhostcpudata/linux-test4/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu10 => virhostcpudata/linux-test4/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu0 => virhostcpudata/linux-test4/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-test4}/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu28 => virhostcpudata/linux-test4/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu2 => virhostcpudata/linux-test4/cpu/cpu3}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu8 => virhostcpudata/linux-test4/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-test4}/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu27 => virhostcpudata/linux-test4/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu12 => virhostcpudata/linux-test4/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu44 => virhostcpudata/linux-test4/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu4/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu26 => virhostcpudata/linux-test4/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu13 => virhostcpudata/linux-test4/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu40 => virhostcpudata/linux-test4/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu5/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu25 => virhostcpudata/linux-test4/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu14 => virhostcpudata/linux-test4/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu4 => virhostcpudata/linux-test4/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu6/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu24 => virhostcpudata/linux-test4/cpu/cpu7}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu7/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu36 => virhostcpudata/linux-test4/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu7/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu23 => virhostcpudata/linux-test4/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu3 => virhostcpudata/linux-test4/cpu/cpu8}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu39 => virhostcpudata/linux-test4/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu22 => virhostcpudata/linux-test4/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu2 => virhostcpudata/linux-test4/cpu/cpu9}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu35 => virhostcpudata/linux-test4/cpu/cpu9}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/cpu/cpu9/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu2 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-subcores3 => virhostcpudata/linux-test4}/node/node0/cpu7 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu10 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu11 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu12 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu13 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu14 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu15 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu8 (100%) rename tests/{nodeinfodata/linux-subcores2/node/node0 => virhostcpudata/linux-test4/node/node1}/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/node/node1/meminfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test4/node/possible (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu27 => virhostcpudata/linux-test5/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu3 => virhostcpudata/linux-test5/cpu/cpu0}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu3 => virhostcpudata/linux-test5/cpu/cpu0}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu32 => virhostcpudata/linux-test5/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-test5}/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-test5}/cpu/cpu0/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu21 => virhostcpudata/linux-test5/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu14 => virhostcpudata/linux-test5/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu2 => virhostcpudata/linux-test5/cpu/cpu1}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu2 => virhostcpudata/linux-test5/cpu/cpu1}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu28 => virhostcpudata/linux-test5/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-test5}/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test2 => virhostcpudata/linux-test5}/cpu/cpu1/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu20 => virhostcpudata/linux-test5/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu4 => virhostcpudata/linux-test5/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1 => virhostcpudata/linux-test5/cpu/cpu2}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1 => virhostcpudata/linux-test5/cpu/cpu2}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu24 => virhostcpudata/linux-test5/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-test5}/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-test5}/cpu/cpu2/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu2 => virhostcpudata/linux-test5/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test7 => virhostcpudata/linux-test5}/cpu/cpu3/topology/core_id (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu0 => virhostcpudata/linux-test5/cpu/cpu3}/topology/core_siblings (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu0 => virhostcpudata/linux-test5/cpu/cpu3}/topology/core_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu20 => virhostcpudata/linux-test5/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test4 => virhostcpudata/linux-test5}/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-test5}/cpu/cpu3/topology/thread_siblings_list (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu26 => virhostcpudata/linux-test6/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu16 => virhostcpudata/linux-test6/cpu/cpu0}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu4 => virhostcpudata/linux-test6/cpu/cpu0}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu19 => virhostcpudata/linux-test6/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu31 => virhostcpudata/linux-test6/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu12 => virhostcpudata/linux-test6/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-test6}/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu18 => virhostcpudata/linux-test6/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu3 => virhostcpudata/linux-test6/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu0 => virhostcpudata/linux-test6/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu6 => virhostcpudata/linux-test6/cpu/cpu2}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu17 => virhostcpudata/linux-test6/cpu/cpu3}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test6/cpu/cpu3/topology/core_id (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu1 => virhostcpudata/linux-test6/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-f21-mustang => virhostcpudata/linux-test6}/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu16 => virhostcpudata/linux-test6/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu25 => virhostcpudata/linux-test6/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu0 => virhostcpudata/linux-test6/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu0 => virhostcpudata/linux-test6/cpu/cpu4}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu100 => virhostcpudata/linux-test6/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu15 => virhostcpudata/linux-test6/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu11 => virhostcpudata/linux-test6/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test6/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test6/cpu/cpu2 => virhostcpudata/linux-test6/cpu/cpu6}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu10 => virhostcpudata/linux-test6/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu2 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-subcores2 => virhostcpudata/linux-test6}/node/node0/cpu7 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test6/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu1 => virhostcpudata/linux-test6/node}/online (100%) rename tests/{nodeinfodata/linux-test2 => virhostcpudata/linux-test6}/node/possible (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu24 => virhostcpudata/linux-test7/cpu/cpu0}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu0/topology}/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu0/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu14 => virhostcpudata/linux-test7/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu30 => virhostcpudata/linux-test7/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test7/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu1/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu13 => virhostcpudata/linux-test7/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu22 => virhostcpudata/linux-test7/cpu/cpu10}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu8 => virhostcpudata/linux-test7/cpu/cpu10}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu10/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu12 => virhostcpudata/linux-test7/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu23 => virhostcpudata/linux-test7/cpu/cpu11}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu8 => virhostcpudata/linux-test7/cpu/cpu11}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu11/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu11 => virhostcpudata/linux-test7/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu2 => virhostcpudata/linux-test7/cpu/cpu12}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu31 => virhostcpudata/linux-test7/cpu/cpu12}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu12/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu10 => virhostcpudata/linux-test7/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu29 => virhostcpudata/linux-test7/cpu/cpu13}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu3 => virhostcpudata/linux-test7/cpu/cpu13}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu13/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-test5/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu14}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu27 => virhostcpudata/linux-test7/cpu/cpu14}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu14/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu21 => virhostcpudata/linux-test7/cpu/cpu15}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu23 => virhostcpudata/linux-test7/cpu/cpu15}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu15/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu16}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu16/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu19 => virhostcpudata/linux-test7/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu16/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test7/cpu/cpu17}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu17/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu15 => virhostcpudata/linux-test7/cpu/cpu17}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu17/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu96 => virhostcpudata/linux-test7/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu18}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu11 => virhostcpudata/linux-test7/cpu/cpu18}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu18/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu88 => virhostcpudata/linux-test7/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu28 => virhostcpudata/linux-test7/cpu/cpu19}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu72 => virhostcpudata/linux-test7/cpu/cpu19}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu19/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu80 => virhostcpudata/linux-test7/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu9 => virhostcpudata/linux-test7/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu32 => virhostcpudata/linux-test7/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu2/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu8 => virhostcpudata/linux-test7/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-test4/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu20}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu68 => virhostcpudata/linux-test7/cpu/cpu20}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu20/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu72 => virhostcpudata/linux-test7/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu15 => virhostcpudata/linux-test7/cpu/cpu21}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu56 => virhostcpudata/linux-test7/cpu/cpu21}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu21/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu68 => virhostcpudata/linux-test7/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu10 => virhostcpudata/linux-test7/cpu/cpu22}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu48 => virhostcpudata/linux-test7/cpu/cpu22}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu22/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu56 => virhostcpudata/linux-test7/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test7/cpu/cpu11 => virhostcpudata/linux-test7/cpu/cpu23}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu40 => virhostcpudata/linux-test7/cpu/cpu23}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu23/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu48 => virhostcpudata/linux-test7/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-test5 => virhostcpudata/linux-test7}/cpu/cpu3/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu24 => virhostcpudata/linux-test7/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu3/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu40 => virhostcpudata/linux-test7/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu43 => virhostcpudata/linux-test7/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu16 => virhostcpudata/linux-test7/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu4/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu159 => virhostcpudata/linux-test7/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu47 => virhostcpudata/linux-test7/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu0 => virhostcpudata/linux-test7/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu5/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu158 => virhostcpudata/linux-test7/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu0 => virhostcpudata/linux-test7/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu8 => virhostcpudata/linux-test7/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu6/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu157 => virhostcpudata/linux-test7/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-test2/cpu/cpu1 => virhostcpudata/linux-test7/cpu/cpu7}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu32 => virhostcpudata/linux-test7/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu7/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu156 => virhostcpudata/linux-test7/cpu/cpu8}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu9 => virhostcpudata/linux-test7/cpu/cpu8}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu24 => virhostcpudata/linux-test7/cpu/cpu8}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu8/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu155 => virhostcpudata/linux-test7/cpu/cpu9}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu39 => virhostcpudata/linux-test7/cpu/cpu9}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu16 => virhostcpudata/linux-test7/cpu/cpu9}/topology/physical_package_id (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/cpu/cpu9/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu1 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu10 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu11 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu13 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu14 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu15 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu17 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu18 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu19 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu2 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu20 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu21 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu22 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu23 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu3 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu5 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu6 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu7 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu8 (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test7}/node/node0/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test7/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu0 => virhostcpudata/linux-test7/node}/online (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu => virhostcpudata/linux-test7/node}/possible (100%) rename tests/{nodeinfodata/linux-test2 => virhostcpudata/linux-test8}/cpu/cpu0/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1 => virhostcpudata/linux-test8}/cpu/cpu0/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu0}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu154 => virhostcpudata/linux-test8/cpu/cpu1}/online (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu1}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu72 => virhostcpudata/linux-test8/cpu/cpu1}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu1}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu153 => virhostcpudata/linux-test8/cpu/cpu10}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu8 => virhostcpudata/linux-test8/cpu/cpu10}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu14 => virhostcpudata/linux-test8/cpu/cpu10}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu14 => virhostcpudata/linux-test8/cpu/cpu10}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu152 => virhostcpudata/linux-test8/cpu/cpu11}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu35 => virhostcpudata/linux-test8/cpu/cpu11}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu15 => virhostcpudata/linux-test8/cpu/cpu11}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu15 => virhostcpudata/linux-test8/cpu/cpu11}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu136 => virhostcpudata/linux-test8/cpu/cpu12}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu38 => virhostcpudata/linux-test8/cpu/cpu12}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu12}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu8 => virhostcpudata/linux-test8/cpu/cpu12}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu128 => virhostcpudata/linux-test8/cpu/cpu13}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu37 => virhostcpudata/linux-test8/cpu/cpu13}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu56 => virhostcpudata/linux-test8/cpu/cpu13}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu9 => virhostcpudata/linux-test8/cpu/cpu13}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu112 => virhostcpudata/linux-test8/cpu/cpu14}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu36 => virhostcpudata/linux-test8/cpu/cpu14}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu10 => virhostcpudata/linux-test8/cpu/cpu14}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu10 => virhostcpudata/linux-test8/cpu/cpu14}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores3/cpu/cpu104 => virhostcpudata/linux-test8/cpu/cpu15}/online (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-test8}/cpu/cpu15/topology/core_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu11 => virhostcpudata/linux-test8/cpu/cpu15}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu11 => virhostcpudata/linux-test8/cpu/cpu15}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu96 => virhostcpudata/linux-test8/cpu/cpu16}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu42 => virhostcpudata/linux-test8/cpu/cpu16}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu16}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu20 => virhostcpudata/linux-test8/cpu/cpu16}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu8 => virhostcpudata/linux-test8/cpu/cpu17}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu41 => virhostcpudata/linux-test8/cpu/cpu17}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu17}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu21 => virhostcpudata/linux-test8/cpu/cpu17}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu18}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu18}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu18}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu22 => virhostcpudata/linux-test8/cpu/cpu18}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu32 => virhostcpudata/linux-test8/cpu/cpu19}/online (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-test8}/cpu/cpu19/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu9 => virhostcpudata/linux-test8/cpu/cpu19}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu23 => virhostcpudata/linux-test8/cpu/cpu19}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu2}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu2}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu46 => virhostcpudata/linux-test8/cpu/cpu2}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu2}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu20}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu46 => virhostcpudata/linux-test8/cpu/cpu20}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu20}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu20}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu136 => virhostcpudata/linux-test8/cpu/cpu21}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu45 => virhostcpudata/linux-test8/cpu/cpu21}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu21}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu17 => virhostcpudata/linux-test8/cpu/cpu21}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores2/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu22}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu44 => virhostcpudata/linux-test8/cpu/cpu22}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu42 => virhostcpudata/linux-test8/cpu/cpu22}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu18 => virhostcpudata/linux-test8/cpu/cpu22}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu96 => virhostcpudata/linux-test8/cpu/cpu23}/online (100%) rename tests/{nodeinfodata/linux-test3 => virhostcpudata/linux-test8}/cpu/cpu23/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu23}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu19 => virhostcpudata/linux-test8/cpu/cpu23}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu88 => virhostcpudata/linux-test8/cpu/cpu24}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu58 => virhostcpudata/linux-test8/cpu/cpu24}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu24}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu28 => virhostcpudata/linux-test8/cpu/cpu24}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu80 => virhostcpudata/linux-test8/cpu/cpu25}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu57 => virhostcpudata/linux-test8/cpu/cpu25}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu72 => virhostcpudata/linux-test8/cpu/cpu25}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu29 => virhostcpudata/linux-test8/cpu/cpu25}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu8 => virhostcpudata/linux-test8/cpu/cpu26}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu56 => virhostcpudata/linux-test8/cpu/cpu26}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu38 => virhostcpudata/linux-test8/cpu/cpu26}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu30 => virhostcpudata/linux-test8/cpu/cpu26}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu72 => virhostcpudata/linux-test8/cpu/cpu27}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/cpu27/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu45 => virhostcpudata/linux-test8/cpu/cpu27}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu31 => virhostcpudata/linux-test8/cpu/cpu27}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu64 => virhostcpudata/linux-test8/cpu/cpu28}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu62 => virhostcpudata/linux-test8/cpu/cpu28}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu28}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu28}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu56 => virhostcpudata/linux-test8/cpu/cpu29}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu61 => virhostcpudata/linux-test8/cpu/cpu29}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu64 => virhostcpudata/linux-test8/cpu/cpu29}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu25 => virhostcpudata/linux-test8/cpu/cpu29}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu3}/online (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu3}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu41 => virhostcpudata/linux-test8/cpu/cpu3}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu3}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu30}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu60 => virhostcpudata/linux-test8/cpu/cpu30}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu34 => virhostcpudata/linux-test8/cpu/cpu30}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu26 => virhostcpudata/linux-test8/cpu/cpu30}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu32 => virhostcpudata/linux-test8/cpu/cpu31}/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/cpu31/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu37 => virhostcpudata/linux-test8/cpu/cpu31}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu27 => virhostcpudata/linux-test8/cpu/cpu31}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu32}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu32}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu32}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu36 => virhostcpudata/linux-test8/cpu/cpu32}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu33}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu33}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu56 => virhostcpudata/linux-test8/cpu/cpu33}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu37 => virhostcpudata/linux-test8/cpu/cpu33}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu152 => virhostcpudata/linux-test8/cpu/cpu34}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu34}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu30 => virhostcpudata/linux-test8/cpu/cpu34}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu38 => virhostcpudata/linux-test8/cpu/cpu34}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu144 => virhostcpudata/linux-test8/cpu/cpu35}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu35}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu33 => virhostcpudata/linux-test8/cpu/cpu35}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu39 => virhostcpudata/linux-test8/cpu/cpu35}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu136 => virhostcpudata/linux-test8/cpu/cpu36}/online (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu36}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu36}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu32 => virhostcpudata/linux-test8/cpu/cpu36}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu128 => virhostcpudata/linux-test8/cpu/cpu37}/online (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu37/topology}/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu37}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu33 => virhostcpudata/linux-test8/cpu/cpu37}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu120 => virhostcpudata/linux-test8/cpu/cpu38}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu38}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu26 => virhostcpudata/linux-test8/cpu/cpu38}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu34 => virhostcpudata/linux-test8/cpu/cpu38}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu112 => virhostcpudata/linux-test8/cpu/cpu39}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu39}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu29 => virhostcpudata/linux-test8/cpu/cpu39}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu35 => virhostcpudata/linux-test8/cpu/cpu39}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu104 => virhostcpudata/linux-test8/cpu/cpu4}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu4}/topology/core_id (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu4}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu4}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu40}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu34 => virhostcpudata/linux-test8/cpu/cpu40}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu40}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu44 => virhostcpudata/linux-test8/cpu/cpu40}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu41}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu33 => virhostcpudata/linux-test8/cpu/cpu41}/topology/core_id (100%) rename tests/{nodeinfodata/linux-subcores1/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu41}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu45 => virhostcpudata/linux-test8/cpu/cpu41}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu42}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu32 => virhostcpudata/linux-test8/cpu/cpu42}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu22 => virhostcpudata/linux-test8/cpu/cpu42}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu46 => virhostcpudata/linux-test8/cpu/cpu42}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu43}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu11 => virhostcpudata/linux-test8/cpu/cpu43}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu25 => virhostcpudata/linux-test8/cpu/cpu43}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu47 => virhostcpudata/linux-test8/cpu/cpu43}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu44}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu14 => virhostcpudata/linux-test8/cpu/cpu44}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu44}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu44}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu45}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu13 => virhostcpudata/linux-test8/cpu/cpu45}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu45}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu41 => virhostcpudata/linux-test8/cpu/cpu45}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu46}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu12 => virhostcpudata/linux-test8/cpu/cpu46}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu46}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu42 => virhostcpudata/linux-test8/cpu/cpu46}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu47}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu47}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu21 => virhostcpudata/linux-test8/cpu/cpu47}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu43 => virhostcpudata/linux-test8/cpu/cpu47}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu48}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu18 => virhostcpudata/linux-test8/cpu/cpu48}/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu48}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu52 => virhostcpudata/linux-test8/cpu/cpu48}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu49}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu17 => virhostcpudata/linux-test8/cpu/cpu49}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu49}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu53 => virhostcpudata/linux-test8/cpu/cpu49}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu5}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu5}/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu72 => virhostcpudata/linux-test8/cpu/cpu5}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu5}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu50}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu50}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu18 => virhostcpudata/linux-test8/cpu/cpu50}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu54 => virhostcpudata/linux-test8/cpu/cpu50}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu51}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu51}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu17 => virhostcpudata/linux-test8/cpu/cpu51}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu55 => virhostcpudata/linux-test8/cpu/cpu51}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu52}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu22 => virhostcpudata/linux-test8/cpu/cpu52}/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu52}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu52}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu53}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu21 => virhostcpudata/linux-test8/cpu/cpu53}/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu53}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu49 => virhostcpudata/linux-test8/cpu/cpu53}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu54}/online (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu20 => virhostcpudata/linux-test8/cpu/cpu54}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu14 => virhostcpudata/linux-test8/cpu/cpu54}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu50 => virhostcpudata/linux-test8/cpu/cpu54}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu0 => virhostcpudata/linux-test8/cpu/cpu55}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu55}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu13 => virhostcpudata/linux-test8/cpu/cpu55}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu51 => virhostcpudata/linux-test8/cpu/cpu55}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu72 => virhostcpudata/linux-test8/cpu/cpu56}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu26 => virhostcpudata/linux-test8/cpu/cpu56}/topology/core_id (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/present => virhostcpudata/linux-test8/cpu/cpu56/topology/physical_package_id} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu60 => virhostcpudata/linux-test8/cpu/cpu56}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu48 => virhostcpudata/linux-test8/cpu/cpu57}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu25 => virhostcpudata/linux-test8/cpu/cpu57}/topology/core_id (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu57}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu61 => virhostcpudata/linux-test8/cpu/cpu57}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu40 => virhostcpudata/linux-test8/cpu/cpu58}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu58}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu10 => virhostcpudata/linux-test8/cpu/cpu58}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu62 => virhostcpudata/linux-test8/cpu/cpu58}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu24 => virhostcpudata/linux-test8/cpu/cpu59}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu59}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu59}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu63 => virhostcpudata/linux-test8/cpu/cpu59}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu16 => virhostcpudata/linux-test8/cpu/cpu6}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1 => virhostcpudata/linux-test8/cpu/cpu6}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu5 => virhostcpudata/linux-test8/cpu/cpu6}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu6}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu136 => virhostcpudata/linux-test8/cpu/cpu60}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu30 => virhostcpudata/linux-test8/cpu/cpu60}/topology/core_id (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/kernel_max => virhostcpudata/linux-test8/cpu/cpu60/topology/physical_package_id} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu56 => virhostcpudata/linux-test8/cpu/cpu60}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu128 => virhostcpudata/linux-test8/cpu/cpu61}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu29 => virhostcpudata/linux-test8/cpu/cpu61}/topology/core_id (100%) rename tests/{nodeinfodata/linux-test1/cpu/cpu1/thread_siblings_list => virhostcpudata/linux-test8/cpu/cpu61/topology/physical_package_id} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu57 => virhostcpudata/linux-test8/cpu/cpu61}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu120 => virhostcpudata/linux-test8/cpu/cpu62}/online (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu28 => virhostcpudata/linux-test8/cpu/cpu62}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu4 => virhostcpudata/linux-test8/cpu/cpu62}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu58 => virhostcpudata/linux-test8/cpu/cpu62}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu112 => virhostcpudata/linux-test8/cpu/cpu63}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu63}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu7 => virhostcpudata/linux-test8/cpu/cpu63}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu59 => virhostcpudata/linux-test8/cpu/cpu63}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-deconf-cpus/cpu/cpu104 => virhostcpudata/linux-test8/cpu/cpu7}/online (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu1/topology/thread_siblings_list => virhostcpudata/linux-test8/cpu/cpu7/topology/core_id} (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu6 => virhostcpudata/linux-test8/cpu/cpu7}/topology/physical_package_id (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu3 => virhostcpudata/linux-test8/cpu/cpu7}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/cpu0/topology/thread_siblings => virhostcpudata/linux-test8/cpu/cpu8/online} (100%) rename tests/{nodeinfodata/linux-test3/cpu/cpu10 => virhostcpudata/linux-test8/cpu/cpu8}/topology/core_id (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/cpu0/topology/core_siblings_list => virhostcpudata/linux-test8/cpu/cpu8/topology/physical_package_id} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu12 => virhostcpudata/linux-test8/cpu/cpu8}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-raspberrypi/cpu/cpu0/topology/core_siblings => virhostcpudata/linux-test8/cpu/cpu9/online} (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang/cpu/cpu2 => virhostcpudata/linux-test8/cpu/cpu9}/topology/core_id (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu/cpu1/topology/thread_siblings_list => virhostcpudata/linux-test8/cpu/cpu9/topology/physical_package_id} (100%) rename tests/{nodeinfodata/linux-test8/cpu/cpu13 => virhostcpudata/linux-test8/cpu/cpu9}/topology/thread_siblings (100%) rename tests/{nodeinfodata/linux-rhelsa-3.19.0-mustang => virhostcpudata/linux-test8}/cpu/kernel_max (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/offline (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/online (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/possible (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/cpu/present (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu0 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu12 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu16 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu20 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu24 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu28 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu4 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node0/cpu8 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node0/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node1}/cpu32 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node1}/cpu36 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node1/cpu40 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node1/cpu44 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node1/cpu48 (100%) rename tests/{nodeinfodata/linux-deconf-cpus => virhostcpudata/linux-test8}/node/node1/cpu52 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node1}/cpu56 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node1}/cpu60 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node1/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu1 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu13 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu17 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu21 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu25 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu29 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu5 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node2}/cpu9 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node2/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node3}/cpu33 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node3}/cpu37 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node3}/cpu41 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node3}/cpu45 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node3}/cpu49 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node3}/cpu53 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node3}/cpu57 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node3}/cpu61 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node3/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu10 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu14 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu18 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu2 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu22 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu26 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu30 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node4}/cpu6 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node4/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node5}/cpu34 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node5}/cpu38 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node5}/cpu42 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node5}/cpu46 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node5}/cpu50 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node5}/cpu54 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node5}/cpu58 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node5}/cpu62 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node5/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node6}/cpu35 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node6}/cpu39 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node6}/cpu43 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node6}/cpu47 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node6}/cpu51 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node1 => virhostcpudata/linux-test8/node/node6}/cpu55 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node6}/cpu59 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node6}/cpu63 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node6/meminfo (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu11 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu15 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu19 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu23 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu27 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu3 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu31 (100%) rename tests/{nodeinfodata/linux-deconf-cpus/node/node0 => virhostcpudata/linux-test8/node/node7}/cpu7 (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-test8/node/node7/meminfo (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu => virhostcpudata/linux-test8/node}/online (100%) rename tests/{nodeinfodata/linux-f21-mustang/cpu => virhostcpudata/linux-test8/node}/possible (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test1.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test1.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test2.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test2.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test3.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test3.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test4.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test4.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test5.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test5.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test6.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test6.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test7.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test7.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.expected (100%) rename tests/{nodeinfomock.c => virhostcpumock.c} (91%) rename tests/{nodeinfotest.c => virhostcputest.c} (79%) -- 2.5.5

Nearly all the methods in the nodeinfo file are given a 'const char *sysfs_prefix' parameter to override the default sysfs path (/sys/devices/system). Every single caller passes in NULL for this, except one use in the unit tests. Furthermore this parameter is totally Linux-specific, when the APIs are intended to be cross platform portable. This removes the sysfs_prefix parameter and instead gives a new method linuxNodeInfoSetSysFSSystemPath for use by the test suite. For two of the methods this hardcodes use of the constant SYSFS_SYSTEM_PATH, since the test suite does not need to override the path for thos methods. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_driver.c | 6 +-- src/libvirt_linux.syms | 1 + src/lxc/lxc_conf.c | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 6 +-- src/nodeinfo.c | 112 +++++++++++++++++++---------------------- src/nodeinfo.h | 16 +++--- src/nodeinfopriv.h | 5 +- src/openvz/openvz_conf.c | 4 +- src/openvz/openvz_driver.c | 6 +-- src/phyp/phyp_driver.c | 2 +- src/qemu/qemu_capabilities.c | 4 +- src/qemu/qemu_driver.c | 12 ++--- src/qemu/qemu_process.c | 2 +- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 6 +-- src/util/vircgroup.c | 2 +- src/vbox/vbox_common.c | 4 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 10 ++-- src/vz/vz_sdk.c | 2 +- tests/nodeinfotest.c | 9 ++-- tests/vircgrouptest.c | 4 +- 24 files changed, 108 insertions(+), 115 deletions(-) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 93faaed..d0af4d9 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -51,7 +51,7 @@ virBhyveCapsInitCPU(virCapsPtr caps, cpu->arch = arch; - if (nodeGetInfo(NULL, &nodeinfo)) + if (nodeGetInfo(&nodeinfo)) goto error; cpu->type = VIR_CPU_TYPE_HOST; diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 5526bb0..b8060d5 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1148,7 +1148,7 @@ bhyveNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } static int @@ -1158,7 +1158,7 @@ bhyveNodeGetInfo(virConnectPtr conn, if (virNodeGetInfoEnsureACL(conn) < 0) return -1; - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } static int @@ -1334,7 +1334,7 @@ bhyveNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } static int diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms index 1a7f263..f569a23 100644 --- a/src/libvirt_linux.syms +++ b/src/libvirt_linux.syms @@ -5,6 +5,7 @@ # nodeinfo.h linuxNodeGetCPUStats; linuxNodeInfoCPUPopulate; +linuxNodeInfoSetSysFSSystemPath; # Let emacs know we want case-insensitive sorting # Local Variables: diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index 8ada531..96a0f47 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -77,7 +77,7 @@ virCapsPtr virLXCDriverCapsInit(virLXCDriverPtr driver) * unexpected failures. We don't want to break the lxc * driver in this scenario, so log errors & carry on */ - if (nodeCapsInitNUMA(NULL, caps) < 0) { + if (nodeCapsInitNUMA(caps) < 0) { virCapabilitiesFreeNUMAInfo(caps); VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); } diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index 8b5ec4c..a566c12 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -723,7 +723,7 @@ static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl) /* setaffinity fails if you set bits for CPUs which * aren't present, so we have to limit ourselves */ - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) + if ((hostcpus = nodeGetCPUCount()) < 0) return -1; if (maxcpu > hostcpus) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index ef48812..e7f66cc 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -5368,7 +5368,7 @@ lxcNodeGetInfo(virConnectPtr conn, if (virNodeGetInfoEnsureACL(conn) < 0) return -1; - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } @@ -5454,7 +5454,7 @@ lxcNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } @@ -5521,7 +5521,7 @@ lxcNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 77ea155..1288543 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -65,7 +65,6 @@ VIR_LOG_INIT("nodeinfo"); -#define SYSFS_SYSTEM_PATH "/sys/devices/system" #if defined(__FreeBSD__) || defined(__APPLE__) static int @@ -290,6 +289,7 @@ freebsdNodeGetMemoryStats(virNodeMemoryStatsPtr params, #endif /* __FreeBSD__ */ #ifdef __linux__ +# define SYSFS_SYSTEM_PATH "/sys/devices/system" # define CPUINFO_PATH "/proc/cpuinfo" # define PROCSTAT_PATH "/proc/stat" # define MEMINFO_PATH "/proc/meminfo" @@ -300,6 +300,16 @@ freebsdNodeGetMemoryStats(virNodeMemoryStatsPtr params, # define LINUX_NB_MEMORY_STATS_ALL 4 # define LINUX_NB_MEMORY_STATS_CELL 2 +static const char *sysfs_system_path = SYSFS_SYSTEM_PATH; + +void linuxNodeInfoSetSysFSSystemPath(const char *path) +{ + if (path) + sysfs_system_path = path; + else + sysfs_system_path = SYSFS_SYSTEM_PATH; +} + /* Return the positive decimal contents of the given * DIR/cpu%u/FILE, or -1 on error. If DEFAULT_VALUE is non-negative * and the file could not be found, return that instead of an error; @@ -593,8 +603,7 @@ virNodeParseNode(const char *node, * A valid configuration is one where no secondary thread is online; * the primary thread in a subcore is always the first one */ static bool -nodeHasValidSubcoreConfiguration(const char *sysfs_prefix, - int threads_per_subcore) +nodeHasValidSubcoreConfiguration(int threads_per_subcore) { virBitmapPtr online_cpus = NULL; int cpu = -1; @@ -604,7 +613,7 @@ nodeHasValidSubcoreConfiguration(const char *sysfs_prefix, if (threads_per_subcore <= 0) goto cleanup; - if (!(online_cpus = nodeGetOnlineCPUBitmap(sysfs_prefix))) + if (!(online_cpus = nodeGetOnlineCPUBitmap())) goto cleanup; while ((cpu = virBitmapNextSetBit(online_cpus, cpu)) >= 0) { @@ -624,12 +633,10 @@ nodeHasValidSubcoreConfiguration(const char *sysfs_prefix, } int -linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - FILE *cpuinfo, +linuxNodeInfoCPUPopulate(FILE *cpuinfo, virArch arch, virNodeInfoPtr nodeinfo) { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; virBitmapPtr present_cpus_map = NULL; virBitmapPtr online_cpus_map = NULL; char line[1024]; @@ -726,17 +733,17 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, /* Get information about what CPUs are present in the host and what * CPUs are online, so that we don't have to so for each node */ - present_cpus_map = nodeGetPresentCPUBitmap(sysfs_prefix); + present_cpus_map = nodeGetPresentCPUBitmap(); if (!present_cpus_map) goto cleanup; - online_cpus_map = nodeGetOnlineCPUBitmap(sysfs_prefix); + online_cpus_map = nodeGetOnlineCPUBitmap(); if (!online_cpus_map) goto cleanup; /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the * core, node, socket, thread and topology information from /sys */ - if (virAsprintf(&sysfs_nodedir, "%s/node", prefix) < 0) + if (virAsprintf(&sysfs_nodedir, "%s/node", sysfs_system_path) < 0) goto cleanup; if (!(nodedir = opendir(sysfs_nodedir))) { @@ -771,7 +778,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, /* If the subcore configuration is not valid, just pretend subcores * are not in use and count threads one by one */ - if (!nodeHasValidSubcoreConfiguration(sysfs_prefix, threads_per_subcore)) + if (!nodeHasValidSubcoreConfiguration(threads_per_subcore)) threads_per_subcore = 0; while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) { @@ -781,7 +788,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, nodeinfo->nodes++; if (virAsprintf(&sysfs_cpudir, "%s/node/%s", - prefix, nodedirent->d_name) < 0) + sysfs_system_path, nodedirent->d_name) < 0) goto cleanup; if ((cpus = virNodeParseNode(sysfs_cpudir, arch, @@ -815,7 +822,7 @@ linuxNodeInfoCPUPopulate(const char *sysfs_prefix, fallback: VIR_FREE(sysfs_cpudir); - if (virAsprintf(&sysfs_cpudir, "%s/cpu", prefix) < 0) + if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_system_path) < 0) goto cleanup; if ((cpus = virNodeParseNode(sysfs_cpudir, arch, @@ -1079,28 +1086,26 @@ linuxNodeGetMemoryStats(FILE *meminfo, } static char * -linuxGetCPUGlobalPath(const char *sysfs_prefix, - const char *file) +linuxGetCPUGlobalPath(const char *file) { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; char *path = NULL; - if (virAsprintf(&path, "%s/cpu/%s", prefix, file) < 0) + if (virAsprintf(&path, "%s/cpu/%s", sysfs_system_path, file) < 0) return NULL; return path; } static char * -linuxGetCPUPresentPath(const char *sysfs_prefix) +linuxGetCPUPresentPath(void) { - return linuxGetCPUGlobalPath(sysfs_prefix, "present"); + return linuxGetCPUGlobalPath("present"); } static char * -linuxGetCPUOnlinePath(const char *sysfs_prefix) +linuxGetCPUOnlinePath(void) { - return linuxGetCPUGlobalPath(sysfs_prefix, "online"); + return linuxGetCPUGlobalPath("online"); } /* Determine the number of CPUs (maximum CPU id + 1) from a file containing @@ -1184,8 +1189,7 @@ virNodeGetSiblingsList(const char *dir, int cpu_id) #endif int -nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, - virNodeInfoPtr nodeinfo) +nodeGetInfo(virNodeInfoPtr nodeinfo) { virArch hostarch = virArchFromHost(); @@ -1205,8 +1209,7 @@ nodeGetInfo(const char *sysfs_prefix ATTRIBUTE_UNUSED, return -1; } - ret = linuxNodeInfoCPUPopulate(sysfs_prefix, cpuinfo, - hostarch, nodeinfo); + ret = linuxNodeInfoCPUPopulate(cpuinfo, hostarch, nodeinfo); if (ret < 0) goto cleanup; @@ -1293,8 +1296,7 @@ nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, } int -nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, - int cellNum ATTRIBUTE_UNUSED, +nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, int *nparams ATTRIBUTE_UNUSED, unsigned int flags) @@ -1304,7 +1306,6 @@ nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, #ifdef __linux__ { int ret; - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; char *meminfo_path = NULL; FILE *meminfo; int max_node; @@ -1323,8 +1324,9 @@ nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, return -1; } - if (virAsprintf(&meminfo_path, "%s/node/node%d/meminfo", - prefix, cellNum) < 0) + if (virAsprintf(&meminfo_path, + SYSFS_SYSTEM_PATH "/node/node%d/meminfo", + cellNum) < 0) return -1; } meminfo = fopen(meminfo_path, "r"); @@ -1351,7 +1353,7 @@ nodeGetMemoryStats(const char *sysfs_prefix ATTRIBUTE_UNUSED, } int -nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) +nodeGetCPUCount(void) { #if defined(__linux__) /* To support older kernels that lack cpu/present, such as 2.6.18 @@ -1360,11 +1362,10 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) * will be consecutive. */ char *present_path = NULL; - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; char *cpupath = NULL; int ncpu = -1; - if (!(present_path = linuxGetCPUPresentPath(sysfs_prefix))) + if (!(present_path = linuxGetCPUPresentPath())) return -1; if (virFileExists(present_path)) { @@ -1372,7 +1373,7 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) goto cleanup; } - if (virAsprintf(&cpupath, "%s/cpu/cpu0", prefix) < 0) + if (virAsprintf(&cpupath, "%s/cpu/cpu0", sysfs_system_path) < 0) goto cleanup; if (virFileExists(cpupath)) { ncpu = 0; @@ -1380,7 +1381,7 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) ncpu++; VIR_FREE(cpupath); if (virAsprintf(&cpupath, "%s/cpu/cpu%d", - prefix, ncpu) < 0) { + sysfs_system_path, ncpu) < 0) { ncpu = -1; goto cleanup; } @@ -1405,17 +1406,17 @@ nodeGetCPUCount(const char *sysfs_prefix ATTRIBUTE_UNUSED) } virBitmapPtr -nodeGetPresentCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) +nodeGetPresentCPUBitmap(void) { #ifdef __linux__ virBitmapPtr present_cpus = NULL; char *present_path = NULL; int npresent_cpus; - if ((npresent_cpus = nodeGetCPUCount(sysfs_prefix)) < 0) + if ((npresent_cpus = nodeGetCPUCount()) < 0) goto cleanup; - if (!(present_path = linuxGetCPUPresentPath(sysfs_prefix))) + if (!(present_path = linuxGetCPUPresentPath())) goto cleanup; /* If the cpu/present file is available, parse it and exit */ @@ -1443,20 +1444,19 @@ nodeGetPresentCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) } virBitmapPtr -nodeGetOnlineCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) +nodeGetOnlineCPUBitmap(void) { #ifdef __linux__ - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; char *online_path = NULL; char *cpudir = NULL; virBitmapPtr cpumap; int present; - present = nodeGetCPUCount(sysfs_prefix); + present = nodeGetCPUCount(); if (present < 0) return NULL; - if (!(online_path = linuxGetCPUOnlinePath(sysfs_prefix))) + if (!(online_path = linuxGetCPUOnlinePath())) return NULL; if (virFileExists(online_path)) { cpumap = linuxParseCPUmap(present, online_path); @@ -1467,7 +1467,7 @@ nodeGetOnlineCPUBitmap(const char *sysfs_prefix ATTRIBUTE_UNUSED) if (!cpumap) goto cleanup; - if (virAsprintf(&cpudir, "%s/cpu", prefix) < 0) + if (virAsprintf(&cpudir, "%s/cpu", sysfs_system_path) < 0) goto cleanup; for (i = 0; i < present; i++) { @@ -1796,8 +1796,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, } int -nodeGetCPUMap(const char *sysfs_prefix, - unsigned char **cpumap, +nodeGetCPUMap(unsigned char **cpumap, unsigned int *online, unsigned int flags) { @@ -1808,9 +1807,9 @@ nodeGetCPUMap(const char *sysfs_prefix, virCheckFlags(0, -1); if (!cpumap && !online) - return nodeGetCPUCount(sysfs_prefix); + return nodeGetCPUCount(); - if (!(cpus = nodeGetOnlineCPUBitmap(sysfs_prefix))) + if (!(cpus = nodeGetOnlineCPUBitmap())) goto cleanup; if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) @@ -1828,8 +1827,7 @@ nodeGetCPUMap(const char *sysfs_prefix, } static int -nodeCapsInitNUMAFake(const char *sysfs_prefix, - const char *cpupath ATTRIBUTE_UNUSED, +nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED, virCapsPtr caps ATTRIBUTE_UNUSED) { virNodeInfo nodeinfo; @@ -1839,7 +1837,7 @@ nodeCapsInitNUMAFake(const char *sysfs_prefix, int id, cid; int onlinecpus ATTRIBUTE_UNUSED; - if (nodeGetInfo(sysfs_prefix, &nodeinfo) < 0) + if (nodeGetInfo(&nodeinfo) < 0) return -1; ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo); @@ -2088,11 +2086,8 @@ virNodeCapsGetPagesInfo(int node, } int -nodeCapsInitNUMA(const char *sysfs_prefix, - virCapsPtr caps) +nodeCapsInitNUMA(virCapsPtr caps) { - const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SYSTEM_PATH; - char *cpupath; int n; unsigned long long memory; virCapsHostNUMACellCPUPtr cpus = NULL; @@ -2107,11 +2102,8 @@ nodeCapsInitNUMA(const char *sysfs_prefix, bool topology_failed = false; int max_node; - if (virAsprintf(&cpupath, "%s/cpu", prefix) < 0) - return -1; - if (!virNumaIsAvailable()) { - ret = nodeCapsInitNUMAFake(sysfs_prefix, cpupath, caps); + ret = nodeCapsInitNUMAFake(SYSFS_SYSTEM_PATH "/cpu", caps); goto cleanup; } @@ -2134,7 +2126,8 @@ nodeCapsInitNUMA(const char *sysfs_prefix, for (i = 0; i < virBitmapSize(cpumap); i++) { if (virBitmapIsBitSet(cpumap, i)) { - if (virNodeCapsFillCPUInfo(cpupath, i, cpus + cpu++) < 0) { + if (virNodeCapsFillCPUInfo(SYSFS_SYSTEM_PATH "/cpu", + i, cpus + cpu++) < 0) { topology_failed = true; virResetLastError(); } @@ -2174,7 +2167,6 @@ nodeCapsInitNUMA(const char *sysfs_prefix, VIR_FREE(cpus); VIR_FREE(siblings); VIR_FREE(pageinfo); - VIR_FREE(cpupath); return ret; } diff --git a/src/nodeinfo.h b/src/nodeinfo.h index ac96dca..b4f434e 100644 --- a/src/nodeinfo.h +++ b/src/nodeinfo.h @@ -26,15 +26,14 @@ # include "capabilities.h" -int nodeGetInfo(const char *sysfs_prefix, virNodeInfoPtr nodeinfo); -int nodeCapsInitNUMA(const char *sysfs_prefix, virCapsPtr caps); +int nodeGetInfo(virNodeInfoPtr nodeinfo); +int nodeCapsInitNUMA(virCapsPtr caps); int nodeGetCPUStats(int cpuNum, virNodeCPUStatsPtr params, int *nparams, unsigned int flags); -int nodeGetMemoryStats(const char *sysfs_prefix, - int cellNum, +int nodeGetMemoryStats(int cellNum, virNodeMemoryStatsPtr params, int *nparams, unsigned int flags); @@ -44,9 +43,9 @@ int nodeGetCellsFreeMemory(unsigned long long *freeMems, int nodeGetMemory(unsigned long long *mem, unsigned long long *freeMem); -virBitmapPtr nodeGetPresentCPUBitmap(const char *sysfs_prefix); -virBitmapPtr nodeGetOnlineCPUBitmap(const char *sysfs_prefix); -int nodeGetCPUCount(const char *sysfs_prefix); +virBitmapPtr nodeGetPresentCPUBitmap(void); +virBitmapPtr nodeGetOnlineCPUBitmap(void); +int nodeGetCPUCount(void); int nodeGetThreadsPerSubcore(virArch arch); int nodeGetMemoryParameters(virTypedParameterPtr params, @@ -57,8 +56,7 @@ int nodeSetMemoryParameters(virTypedParameterPtr params, int nparams, unsigned int flags); -int nodeGetCPUMap(const char *sysfs_prefix, - unsigned char **cpumap, +int nodeGetCPUMap(unsigned char **cpumap, unsigned int *online, unsigned int flags); diff --git a/src/nodeinfopriv.h b/src/nodeinfopriv.h index 1aab4ad..4fe489a 100644 --- a/src/nodeinfopriv.h +++ b/src/nodeinfopriv.h @@ -25,8 +25,9 @@ # include "nodeinfo.h" # ifdef __linux__ -int linuxNodeInfoCPUPopulate(const char *sysfs_prefix, - FILE *cpuinfo, +void linuxNodeInfoSetSysFSSystemPath(const char *path); + +int linuxNodeInfoCPUPopulate(FILE *cpuinfo, virArch arch, virNodeInfoPtr nodeinfo); diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 4103d69..820dc22 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -165,7 +165,7 @@ virCapsPtr openvzCapsInit(void) false, false)) == NULL) goto no_memory; - if (nodeCapsInitNUMA(NULL, caps) < 0) + if (nodeCapsInitNUMA(caps) < 0) goto no_memory; if ((guest = virCapabilitiesAddGuest(caps, @@ -633,7 +633,7 @@ openvzGetNodeCPUs(void) { virNodeInfo nodeinfo; - if (nodeGetInfo(NULL, &nodeinfo) < 0) + if (nodeGetInfo(&nodeinfo) < 0) return 0; return nodeinfo.cpus; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index e154a0f..24a20cc 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -2155,7 +2155,7 @@ static int openvzNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, virNodeInfoPtr nodeinfo) { - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } @@ -2177,7 +2177,7 @@ openvzNodeGetMemoryStats(virConnectPtr conn ATTRIBUTE_UNUSED, int *nparams, unsigned int flags) { - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } @@ -2207,7 +2207,7 @@ openvzNodeGetCPUMap(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned int *online, unsigned int flags) { - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 55a63e7..eb5c378 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -335,7 +335,7 @@ phypCapsInit(void) * unexpected failures. We don't want to break the QEMU * driver in this scenario, so log errors & carry on */ - if (nodeCapsInitNUMA(NULL, caps) < 0) { + if (nodeCapsInitNUMA(caps) < 0) { virCapabilitiesFreeNUMAInfo(caps); VIR_WARN ("Failed to query host NUMA topology, disabling NUMA capabilities"); diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index b73c296..3466b72 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1000,7 +1000,7 @@ virQEMUCapsInitCPU(virCapsPtr caps, cpu->arch = arch; - if (nodeGetInfo(NULL, &nodeinfo)) + if (nodeGetInfo(&nodeinfo)) goto error; cpu->type = VIR_CPU_TYPE_HOST; @@ -1063,7 +1063,7 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache) * unexpected failures. We don't want to break the QEMU * driver in this scenario, so log errors & carry on */ - if (nodeCapsInitNUMA(NULL, caps) < 0) { + if (nodeCapsInitNUMA(caps) < 0) { virCapabilitiesFreeNUMAInfo(caps); VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index eaabe58..79447e9 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5148,7 +5148,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, priv = vm->privateData; ret = virDomainDefGetVcpuPinInfoHelper(def, maplen, ncpumaps, cpumaps, - nodeGetCPUCount(NULL), + nodeGetCPUCount(), priv->autoCpuset); cleanup: virDomainObjEndAPI(&vm); @@ -5293,7 +5293,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, if (!(def = virDomainObjGetOneDef(vm, flags))) goto cleanup; - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) + if ((hostcpus = nodeGetCPUCount()) < 0) goto cleanup; priv = vm->privateData; @@ -5541,7 +5541,7 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, if (targetDef->niothreadids == 0) return 0; - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) + if ((hostcpus = nodeGetCPUCount()) < 0) goto cleanup; if (VIR_ALLOC_N(info_ret, targetDef->niothreadids) < 0) @@ -18510,7 +18510,7 @@ qemuNodeGetInfo(virConnectPtr conn, if (virNodeGetInfoEnsureACL(conn) < 0) return -1; - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } @@ -18538,7 +18538,7 @@ qemuNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } @@ -18605,7 +18605,7 @@ qemuNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index b1e270f..274b4d4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2194,7 +2194,7 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm) /* setaffinity fails if you set bits for CPUs which * aren't present, so we have to limit ourselves */ - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) + if ((hostcpus = nodeGetCPUCount()) < 0) goto cleanup; if (hostcpus > QEMUD_CPUMASK_LEN) diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index afc0375..a97ae64 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -65,7 +65,7 @@ virCapsPtr umlCapsInit(void) * unexpected failures. We don't want to break the QEMU * driver in this scenario, so log errors & carry on */ - if (nodeCapsInitNUMA(NULL, caps) < 0) { + if (nodeCapsInitNUMA(caps) < 0) { virCapabilitiesFreeNUMAInfo(caps); VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities"); } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 84e1df8..1c7a36d 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -2778,7 +2778,7 @@ umlNodeGetInfo(virConnectPtr conn, if (virNodeGetInfoEnsureACL(conn) < 0) return -1; - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } @@ -2806,7 +2806,7 @@ umlNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } @@ -2873,7 +2873,7 @@ umlNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index bffd88f..1b90447 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -3131,7 +3131,7 @@ virCgroupGetPercpuStats(virCgroupPtr group, } /* To parse account file, we need to know how many cpus are present. */ - if (!(cpumap = nodeGetPresentCPUBitmap(NULL))) + if (!(cpumap = nodeGetPresentCPUBitmap())) return -1; total_cpus = virBitmapSize(cpumap); diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 0cead10..02a7231 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -317,7 +317,7 @@ static virCapsPtr vboxCapsInit(void) false, false)) == NULL) goto no_memory; - if (nodeCapsInitNUMA(NULL, caps) < 0) + if (nodeCapsInitNUMA(caps) < 0) goto no_memory; if ((guest = virCapabilitiesAddGuest(caps, @@ -7522,7 +7522,7 @@ static int vboxNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, virNodeInfoPtr nodeinfo) { - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } static int diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c index b30b5de..8736976 100644 --- a/src/vmware/vmware_conf.c +++ b/src/vmware/vmware_conf.c @@ -68,7 +68,7 @@ vmwareCapsInit(void) false, false)) == NULL) goto error; - if (nodeCapsInitNUMA(NULL, caps) < 0) + if (nodeCapsInitNUMA(caps) < 0) goto error; /* i686 guests are always supported */ diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index d2bf54e..3e1a4f5 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -115,7 +115,7 @@ vzBuildCapabilities(void) false, false)) == NULL) return NULL; - if (nodeCapsInitNUMA(NULL, caps) < 0) + if (nodeCapsInitNUMA(caps) < 0) goto error; for (i = 0; i < 2; i++) @@ -125,7 +125,7 @@ vzBuildCapabilities(void) emulators[k], virt_types[k]) < 0) goto error; - if (nodeGetInfo(NULL, &nodeinfo)) + if (nodeGetInfo(&nodeinfo)) goto error; if (VIR_ALLOC(cpu) < 0) @@ -804,7 +804,7 @@ static int vzNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED, virNodeInfoPtr nodeinfo) { - return nodeGetInfo(NULL, nodeinfo); + return nodeGetInfo(nodeinfo); } static int vzConnectIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED) @@ -891,7 +891,7 @@ vzNodeGetCPUMap(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned int *online, unsigned int flags) { - return nodeGetCPUMap(NULL, cpumap, online, flags); + return nodeGetCPUMap(cpumap, online, flags); } static int @@ -1457,7 +1457,7 @@ vzNodeGetMemoryStats(virConnectPtr conn ATTRIBUTE_UNUSED, int *nparams, unsigned int flags) { - return nodeGetMemoryStats(NULL, cellNum, params, nparams, flags); + return nodeGetMemoryStats(cellNum, params, nparams, flags); } static int diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index 01de4f6..eb79be7 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -1125,7 +1125,7 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom, PRL_RESULT pret; int ret = -1; - if ((hostcpus = nodeGetCPUCount(NULL)) < 0) + if ((hostcpus = nodeGetCPUCount()) < 0) goto cleanup; /* get number of CPUs */ diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c index d8eace5..8d93024 100644 --- a/tests/nodeinfotest.c +++ b/tests/nodeinfotest.c @@ -24,8 +24,7 @@ main(void) #else static int -linuxTestCompareFiles(char *sysfs_prefix, - const char *cpuinfofile, +linuxTestCompareFiles(const char *cpuinfofile, virArch arch, const char *outputfile) { @@ -42,7 +41,7 @@ linuxTestCompareFiles(char *sysfs_prefix, } memset(&nodeinfo, 0, sizeof(nodeinfo)); - if (linuxNodeInfoCPUPopulate(sysfs_prefix, cpuinfo, arch, &nodeinfo) < 0) { + if (linuxNodeInfoCPUPopulate(cpuinfo, arch, &nodeinfo) < 0) { if (virTestGetDebug()) { virErrorPtr error = virSaveLastError(); if (error && error->code != VIR_ERR_OK) @@ -177,7 +176,9 @@ linuxTestNodeInfo(const void *opaque) goto cleanup; } - result = linuxTestCompareFiles(sysfs_prefix, cpuinfo, data->arch, output); + linuxNodeInfoSetSysFSSystemPath(sysfs_prefix); + result = linuxTestCompareFiles(cpuinfo, data->arch, output); + linuxNodeInfoSetSysFSSystemPath(NULL); cleanup: VIR_FREE(cpuinfo); diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 322f6cb..6ce03f7 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -649,8 +649,8 @@ static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED) goto cleanup; } - if (nodeGetCPUCount(NULL) != EXPECTED_NCPUS) { - fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount(NULL)); + if (nodeGetCPUCount() != EXPECTED_NCPUS) { + fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount()); goto cleanup; } -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Nearly all the methods in the nodeinfo file are given a 'const char *sysfs_prefix' parameter to override the default sysfs path (/sys/devices/system). Every single caller passes in NULL for this, except one use in the unit tests. Furthermore this parameter is totally Linux-specific, when the APIs are intended to be cross platform portable.
This removes the sysfs_prefix parameter and instead gives a new method linuxNodeInfoSetSysFSSystemPath for use by the test suite.
For two of the methods this hardcodes use of the constant SYSFS_SYSTEM_PATH, since the test suite does not need to override the path for thos methods.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_driver.c | 6 +-- src/libvirt_linux.syms | 1 + src/lxc/lxc_conf.c | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 6 +-- src/nodeinfo.c | 112 +++++++++++++++++++---------------------- src/nodeinfo.h | 16 +++--- src/nodeinfopriv.h | 5 +- src/openvz/openvz_conf.c | 4 +- src/openvz/openvz_driver.c | 6 +-- src/phyp/phyp_driver.c | 2 +- src/qemu/qemu_capabilities.c | 4 +- src/qemu/qemu_driver.c | 12 ++--- src/qemu/qemu_process.c | 2 +- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 6 +-- src/util/vircgroup.c | 2 +- src/vbox/vbox_common.c | 4 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 10 ++-- src/vz/vz_sdk.c | 2 +- tests/nodeinfotest.c | 9 ++-- tests/vircgrouptest.c | 4 +- 24 files changed, 108 insertions(+), 115 deletions(-)
Oh - I remember this code ... ACK John

The nodeGetInfo() method currently has its own code for getting memory size in KB, that basically just re-invents what nodeGetMemory already does. Remove it and just call nodeGetMemory, converting its result from bytes to KB, allowing removal of more platform specific conditional code. --- src/nodeinfo.c | 38 +++++--------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-) diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 1288543..bc5400f 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -81,33 +81,6 @@ appleFreebsdNodeGetCPUCount(void) return ncpu; } - -/* VIR_HW_PHYSMEM - the resulting value of HW_PHYSMEM of FreeBSD - * is 64 bits while that of Mac OS X is still 32 bits. - * Mac OS X provides HW_MEMSIZE for 64 bits version of HW_PHYSMEM - * since 10.6.8 (Snow Leopard) at least. - */ -# ifdef HW_MEMSIZE -# define VIR_HW_PHYSMEM HW_MEMSIZE -# else -# define VIR_HW_PHYSMEM HW_PHYSMEM -# endif -static int -appleFreebsdNodeGetMemorySize(unsigned long *memory) -{ - int mib[2] = { CTL_HW, VIR_HW_PHYSMEM }; - unsigned long physmem; - size_t len = sizeof(physmem); - - if (sysctl(mib, 2, &physmem, &len, NULL, 0) == -1) { - virReportSystemError(errno, "%s", _("cannot obtain memory size")); - return -1; - } - - *memory = (unsigned long)(physmem / 1024); - - return 0; -} #endif /* defined(__FreeBSD__) || defined(__APPLE__) */ #ifdef __FreeBSD__ @@ -1192,12 +1165,17 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo) { virArch hostarch = virArchFromHost(); + unsigned long long memorybytes; memset(nodeinfo, 0, sizeof(*nodeinfo)); if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) return -1; + if (nodeGetMemory(&memorybytes, NULL) < 0) + return -1; + nodeinfo->memory = memorybytes / 1024; + #ifdef __linux__ { int ret = -1; @@ -1213,9 +1191,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) if (ret < 0) goto cleanup; - /* Convert to KB. */ - nodeinfo->memory = physmem_total() / 1024; - cleanup: VIR_FORCE_FCLOSE(cpuinfo); return ret; @@ -1251,9 +1226,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) nodeinfo->mhz = cpu_freq / 1000000; # endif - if (appleFreebsdNodeGetMemorySize(&nodeinfo->memory) < 0) - return -1; - return 0; } #else -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The nodeGetInfo() method currently has its own code for getting memory size in KB, that basically just re-invents what nodeGetMemory already does. Remove it and just call nodeGetMemory, converting its result from bytes to KB, allowing removal of more platform specific conditional code. --- src/nodeinfo.c | 38 +++++--------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-)
diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 1288543..bc5400f 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -81,33 +81,6 @@ appleFreebsdNodeGetCPUCount(void)
return ncpu; } - -/* VIR_HW_PHYSMEM - the resulting value of HW_PHYSMEM of FreeBSD - * is 64 bits while that of Mac OS X is still 32 bits. - * Mac OS X provides HW_MEMSIZE for 64 bits version of HW_PHYSMEM - * since 10.6.8 (Snow Leopard) at least. - */ -# ifdef HW_MEMSIZE -# define VIR_HW_PHYSMEM HW_MEMSIZE -# else -# define VIR_HW_PHYSMEM HW_PHYSMEM -# endif -static int -appleFreebsdNodeGetMemorySize(unsigned long *memory) -{ - int mib[2] = { CTL_HW, VIR_HW_PHYSMEM }; - unsigned long physmem; - size_t len = sizeof(physmem); - - if (sysctl(mib, 2, &physmem, &len, NULL, 0) == -1) { - virReportSystemError(errno, "%s", _("cannot obtain memory size")); - return -1; - } - - *memory = (unsigned long)(physmem / 1024); - - return 0; -}
I have no idea "how" FreeBSD and Apple do things, but this is different than what's in nodeGetMemoryFake()... Would that code need an "|| defined(__APPLE__)" though? or it's own APPLE only section using the above? Although I suppose if nodeGetMemoryFake has been good enough "so far" for the nodeGetMemory specific call, then it should be good enough for the nodeGetInfo call (to at least get the same answer!).
#endif /* defined(__FreeBSD__) || defined(__APPLE__) */
#ifdef __FreeBSD__ @@ -1192,12 +1165,17 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo) { virArch hostarch = virArchFromHost(); + unsigned long long memorybytes;
memset(nodeinfo, 0, sizeof(*nodeinfo));
if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) return -1;
+ if (nodeGetMemory(&memorybytes, NULL) < 0) + return -1; + nodeinfo->memory = memorybytes / 1024; +
_virNodeInfo->memory is unsigned long local memory is unsigned long long Do we need any sort of overflow check ? I imagine our compiler takes care of the cast... ACK - in principle at least as long as the "details" work out. John
#ifdef __linux__ { int ret = -1; @@ -1213,9 +1191,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) if (ret < 0) goto cleanup;
- /* Convert to KB. */ - nodeinfo->memory = physmem_total() / 1024; - cleanup: VIR_FORCE_FCLOSE(cpuinfo); return ret; @@ -1251,9 +1226,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) nodeinfo->mhz = cpu_freq / 1000000; # endif
- if (appleFreebsdNodeGetMemorySize(&nodeinfo->memory) < 0) - return -1; - return 0; } #else

On Tue, Apr 26, 2016 at 02:20:18PM -0400, John Ferlan wrote:
On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The nodeGetInfo() method currently has its own code for getting memory size in KB, that basically just re-invents what nodeGetMemory already does. Remove it and just call nodeGetMemory, converting its result from bytes to KB, allowing removal of more platform specific conditional code. --- src/nodeinfo.c | 38 +++++--------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-)
diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 1288543..bc5400f 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -81,33 +81,6 @@ appleFreebsdNodeGetCPUCount(void)
return ncpu; } - -/* VIR_HW_PHYSMEM - the resulting value of HW_PHYSMEM of FreeBSD - * is 64 bits while that of Mac OS X is still 32 bits. - * Mac OS X provides HW_MEMSIZE for 64 bits version of HW_PHYSMEM - * since 10.6.8 (Snow Leopard) at least. - */ -# ifdef HW_MEMSIZE -# define VIR_HW_PHYSMEM HW_MEMSIZE -# else -# define VIR_HW_PHYSMEM HW_PHYSMEM -# endif -static int -appleFreebsdNodeGetMemorySize(unsigned long *memory) -{ - int mib[2] = { CTL_HW, VIR_HW_PHYSMEM }; - unsigned long physmem; - size_t len = sizeof(physmem); - - if (sysctl(mib, 2, &physmem, &len, NULL, 0) == -1) { - virReportSystemError(errno, "%s", _("cannot obtain memory size")); - return -1; - } - - *memory = (unsigned long)(physmem / 1024); - - return 0; -}
I have no idea "how" FreeBSD and Apple do things, but this is different than what's in nodeGetMemoryFake()...
Would that code need an "|| defined(__APPLE__)" though? or it's own APPLE only section using the above?
Although I suppose if nodeGetMemoryFake has been good enough "so far" for the nodeGetMemory specific call, then it should be good enough for the nodeGetInfo call (to at least get the same answer!).
The nodeGetMemoryFake method will end up calling physmem_total/available provided by gnulib, which are supported on Darwin. For that matter they are also supported on *BSD. So we can just kill that FreeBSD block from the nodeGetMemoryFake method too. If there's issues with the gnulib impl we should put the platform specific fixes in gnulib directly rather than in libvirt.
+ if (nodeGetMemory(&memorybytes, NULL) < 0) + return -1; + nodeinfo->memory = memorybytes / 1024; +
_virNodeInfo->memory is unsigned long local memory is unsigned long long
Do we need any sort of overflow check ? I imagine our compiler takes care of the cast...
I think we're ok here - at least this isn't any worse than the code already is. It is a shame we used unsigned long for the NodeInfo struct, but we have to live with it. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Instead of having platform specific code in nodeGetInfo to fetch CPU topology, split it all out into a new method nodeGetCPUInfo. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/nodeinfo.c | 172 +++++++++++++++++++++++++++++---------------------- src/nodeinfopriv.h | 7 ++- tests/nodeinfotest.c | 5 +- 3 files changed, 108 insertions(+), 76 deletions(-) diff --git a/src/nodeinfo.c b/src/nodeinfo.c index bc5400f..e6a9d3d 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -608,14 +608,19 @@ nodeHasValidSubcoreConfiguration(int threads_per_subcore) int linuxNodeInfoCPUPopulate(FILE *cpuinfo, virArch arch, - virNodeInfoPtr nodeinfo) + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) { virBitmapPtr present_cpus_map = NULL; virBitmapPtr online_cpus_map = NULL; char line[1024]; DIR *nodedir = NULL; struct dirent *nodedirent = NULL; - int cpus, cores, socks, threads, offline = 0; + int nodecpus, nodecores, nodesockets, nodethreads, offline = 0; int threads_per_subcore = 0; unsigned int node; int ret = -1; @@ -623,6 +628,9 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, char *sysfs_cpudir = NULL; int direrr; + *mhz = 0; + *cpus = *nodes = *sockets = *cores = *threads = 0; + /* Start with parsing CPU clock speed from /proc/cpuinfo */ while (fgets(line, sizeof(line), cpuinfo) != NULL) { if (ARCH_IS_X86(arch)) { @@ -644,9 +652,8 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && /* Accept trailing fractional part. */ (*p == '\0' || *p == '.' || c_isspace(*p))) - nodeinfo->mhz = ui; + *mhz = ui; } - } else if (ARCH_IS_PPC(arch)) { char *buf = line; if (STRPREFIX(buf, "clock")) { @@ -666,7 +673,7 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && /* Accept trailing fractional part. */ (*p == '\0' || *p == '.' || c_isspace(*p))) - nodeinfo->mhz = ui; + *mhz = ui; /* No other interesting infos are available in /proc/cpuinfo. * However, there is a line identifying processor's version, * identification and machine, but we don't want it to be caught @@ -692,12 +699,12 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 /* Accept trailing fractional part. */ && (*p == '\0' || *p == '.' || c_isspace(*p))) - nodeinfo->mhz = ui; + *mhz = ui; } } else if (ARCH_IS_S390(arch)) { /* s390x has no realistic value for CPU speed, * assign a value of zero to signify this */ - nodeinfo->mhz = 0; + *mhz = 0; } else { VIR_WARN("Parser for /proc/cpuinfo needs to be adapted for your architecture"); break; @@ -758,38 +765,38 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (sscanf(nodedirent->d_name, "node%u", &node) != 1) continue; - nodeinfo->nodes++; + (*nodes)++; if (virAsprintf(&sysfs_cpudir, "%s/node/%s", sysfs_system_path, nodedirent->d_name) < 0) goto cleanup; - if ((cpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &socks, &cores, - &threads, &offline)) < 0) + if ((nodecpus = virNodeParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) goto cleanup; VIR_FREE(sysfs_cpudir); - nodeinfo->cpus += cpus; + *cpus += nodecpus; - if (socks > nodeinfo->sockets) - nodeinfo->sockets = socks; + if (nodesockets > *sockets) + *sockets = nodesockets; - if (cores > nodeinfo->cores) - nodeinfo->cores = cores; + if (nodecores > *cores) + *cores = nodecores; - if (threads > nodeinfo->threads) - nodeinfo->threads = threads; + if (nodethreads > *threads) + *threads = nodethreads; } if (direrr < 0) goto cleanup; - if (nodeinfo->cpus && nodeinfo->nodes) + if (*cpus && *nodes) goto done; fallback: @@ -798,33 +805,33 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_system_path) < 0) goto cleanup; - if ((cpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &socks, &cores, - &threads, &offline)) < 0) + if ((nodecpus = virNodeParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) goto cleanup; - nodeinfo->nodes = 1; - nodeinfo->cpus = cpus; - nodeinfo->sockets = socks; - nodeinfo->cores = cores; - nodeinfo->threads = threads; + *nodes = 1; + *cpus = nodecpus; + *sockets = nodesockets; + *cores = nodecores; + *threads = nodethreads; done: /* There should always be at least one cpu, socket, node, and thread. */ - if (nodeinfo->cpus == 0) { + if (*cpus == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no CPUs found")); goto cleanup; } - if (nodeinfo->sockets == 0) { + if (*sockets == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no sockets found")); goto cleanup; } - if (nodeinfo->threads == 0) { + if (*threads == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no threads found")); goto cleanup; } @@ -836,14 +843,14 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, * the nodeinfo structure isn't designed to carry the full topology so * we're going to lie about the detected topology to notify the user * to check the host capabilities for the actual topology. */ - if ((nodeinfo->nodes * - nodeinfo->sockets * - nodeinfo->cores * - nodeinfo->threads) != (nodeinfo->cpus + offline)) { - nodeinfo->nodes = 1; - nodeinfo->sockets = 1; - nodeinfo->cores = nodeinfo->cpus + offline; - nodeinfo->threads = 1; + if ((*nodes * + *sockets * + *cores * + *threads) != (*cpus + offline)) { + *nodes = 1; + *sockets = 1; + *cores = *cpus + offline; + *threads = 1; } ret = 0; @@ -1161,23 +1168,17 @@ virNodeGetSiblingsList(const char *dir, int cpu_id) } #endif -int -nodeGetInfo(virNodeInfoPtr nodeinfo) -{ - virArch hostarch = virArchFromHost(); - unsigned long long memorybytes; - - memset(nodeinfo, 0, sizeof(*nodeinfo)); - - if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) - return -1; - - if (nodeGetMemory(&memorybytes, NULL) < 0) - return -1; - nodeinfo->memory = memorybytes / 1024; +static int +nodeGetCPUInfo(virArch hostarch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) +{ #ifdef __linux__ - { int ret = -1; FILE *cpuinfo = fopen(CPUINFO_PATH, "r"); @@ -1187,28 +1188,27 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) return -1; } - ret = linuxNodeInfoCPUPopulate(cpuinfo, hostarch, nodeinfo); + ret = linuxNodeInfoCPUPopulate(cpuinfo, hostarch, + cpus, mhz, nodes, + sockets, cores, threads); if (ret < 0) goto cleanup; cleanup: VIR_FORCE_FCLOSE(cpuinfo); return ret; - } #elif defined(__FreeBSD__) || defined(__APPLE__) - { - nodeinfo->nodes = 1; - nodeinfo->sockets = 1; - nodeinfo->threads = 1; + unsigned long cpu_freq; + size_t cpu_freq_len = sizeof(cpu_freq); - nodeinfo->cpus = appleFreebsdNodeGetCPUCount(); - if (nodeinfo->cpus == -1) + *cpus = appleFreebsdNodeGetCPUCount(); + if (*cpus == -1) return -1; - nodeinfo->cores = nodeinfo->cpus; - - unsigned long cpu_freq; - size_t cpu_freq_len = sizeof(cpu_freq); + *nodes = 1; + *sockets = 1; + *cores = *cpus; + *threads = 1; # ifdef __FreeBSD__ if (sysctlbyname("dev.cpu.0.freq", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { @@ -1216,18 +1216,17 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) return -1; } - nodeinfo->mhz = cpu_freq; + *mhz = cpu_freq; # else if (sysctlbyname("hw.cpufrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { virReportSystemError(errno, "%s", _("cannot obtain CPU freq")); return -1; } - nodeinfo->mhz = cpu_freq / 1000000; + *mhz = cpu_freq / 1000000; # endif return 0; - } #else /* XXX Solaris will need an impl later if they port QEMU driver */ virReportError(VIR_ERR_NO_SUPPORT, "%s", @@ -1236,6 +1235,31 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) #endif } + +int +nodeGetInfo(virNodeInfoPtr nodeinfo) +{ + virArch hostarch = virArchFromHost(); + unsigned long long memorybytes; + + memset(nodeinfo, 0, sizeof(*nodeinfo)); + + if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) + return -1; + + if (nodeGetMemory(&memorybytes, NULL) < 0) + return -1; + nodeinfo->memory = memorybytes / 1024; + + if (nodeGetCPUInfo(hostarch, + &nodeinfo->cpus, &nodeinfo->mhz, + &nodeinfo->nodes, &nodeinfo->sockets, + &nodeinfo->cores, &nodeinfo->threads) < 0) + return -1; + + return 0; +} + int nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, diff --git a/src/nodeinfopriv.h b/src/nodeinfopriv.h index 4fe489a..01bcb8d 100644 --- a/src/nodeinfopriv.h +++ b/src/nodeinfopriv.h @@ -29,7 +29,12 @@ void linuxNodeInfoSetSysFSSystemPath(const char *path); int linuxNodeInfoCPUPopulate(FILE *cpuinfo, virArch arch, - virNodeInfoPtr nodeinfo); + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads); int linuxNodeGetCPUStats(FILE *procstat, int cpuNum, diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c index 8d93024..951ae2f 100644 --- a/tests/nodeinfotest.c +++ b/tests/nodeinfotest.c @@ -41,7 +41,10 @@ linuxTestCompareFiles(const char *cpuinfofile, } memset(&nodeinfo, 0, sizeof(nodeinfo)); - if (linuxNodeInfoCPUPopulate(cpuinfo, arch, &nodeinfo) < 0) { + if (linuxNodeInfoCPUPopulate(cpuinfo, arch, + &nodeinfo.cpus, &nodeinfo.mhz, + &nodeinfo.nodes, &nodeinfo.sockets, + &nodeinfo.cores, &nodeinfo.threads) < 0) { if (virTestGetDebug()) { virErrorPtr error = virSaveLastError(); if (error && error->code != VIR_ERR_OK) -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Instead of having platform specific code in nodeGetInfo to fetch CPU topology, split it all out into a new method nodeGetCPUInfo.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/nodeinfo.c | 172 +++++++++++++++++++++++++++++---------------------- src/nodeinfopriv.h | 7 ++- tests/nodeinfotest.c | 5 +- 3 files changed, 108 insertions(+), 76 deletions(-)
ACK John

In preparation for moving all the memory related APIs out of the nodeinfo file, give them a virHostMem name prefix. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_private.syms | 14 ++++---- src/lxc/lxc_driver.c | 16 ++++----- src/nodeinfo.c | 82 +++++++++++++++++++++++----------------------- src/nodeinfo.h | 35 ++++++++++---------- src/openvz/openvz_driver.c | 6 ++-- src/qemu/qemu_driver.c | 16 ++++----- src/uml/uml_driver.c | 16 ++++----- src/util/virnuma.c | 2 +- src/vbox/vbox_common.c | 10 +++--- src/xen/xen_driver.c | 4 +-- 10 files changed, 101 insertions(+), 100 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a9025f5..2317c25 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1025,21 +1025,21 @@ virLogManagerNew; # nodeinfo.h -nodeAllocPages; nodeCapsInitNUMA; -nodeGetCellsFreeMemory; nodeGetCPUCount; nodeGetCPUMap; nodeGetCPUStats; -nodeGetFreePages; nodeGetInfo; -nodeGetMemory; -nodeGetMemoryParameters; -nodeGetMemoryStats; nodeGetOnlineCPUBitmap; nodeGetPresentCPUBitmap; nodeGetThreadsPerSubcore; -nodeSetMemoryParameters; +virHostMemAllocPages; +virHostMemGetCellsFree; +virHostMemGetFreePages; +virHostMemGetInfo; +virHostMemGetParameters; +virHostMemGetStats; +virHostMemSetParameters; # secret/secret_util.h diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index e7f66cc..3a8383b 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -5454,7 +5454,7 @@ lxcNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(cellNum, params, nparams, flags); + return virHostMemGetStats(cellNum, params, nparams, flags); } @@ -5467,7 +5467,7 @@ lxcNodeGetCellsFreeMemory(virConnectPtr conn, if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0) return -1; - return nodeGetCellsFreeMemory(freeMems, startCell, maxCells); + return virHostMemGetCellsFree(freeMems, startCell, maxCells); } @@ -5479,7 +5479,7 @@ lxcNodeGetFreeMemory(virConnectPtr conn) if (virNodeGetFreeMemoryEnsureACL(conn) < 0) return 0; - if (nodeGetMemory(NULL, &freeMem) < 0) + if (virHostMemGetInfo(NULL, &freeMem) < 0) return 0; return freeMem; @@ -5495,7 +5495,7 @@ lxcNodeGetMemoryParameters(virConnectPtr conn, if (virNodeGetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeGetMemoryParameters(params, nparams, flags); + return virHostMemGetParameters(params, nparams, flags); } @@ -5508,7 +5508,7 @@ lxcNodeSetMemoryParameters(virConnectPtr conn, if (virNodeSetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeSetMemoryParameters(params, nparams, flags); + return virHostMemSetParameters(params, nparams, flags); } @@ -5667,7 +5667,7 @@ lxcNodeGetFreePages(virConnectPtr conn, if (virNodeGetFreePagesEnsureACL(conn) < 0) return -1; - return nodeGetFreePages(npages, pages, startCell, cellCount, counts); + return virHostMemGetFreePages(npages, pages, startCell, cellCount, counts); } @@ -5687,8 +5687,8 @@ lxcNodeAllocPages(virConnectPtr conn, if (virNodeAllocPagesEnsureACL(conn) < 0) return -1; - return nodeAllocPages(npages, pageSizes, pageCounts, - startCell, cellCount, add); + return virHostMemAllocPages(npages, pageSizes, pageCounts, + startCell, cellCount, add); } diff --git a/src/nodeinfo.c b/src/nodeinfo.c index e6a9d3d..1cac1a4 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -187,7 +187,7 @@ freebsdNodeGetCPUStats(int cpuNum, } static int -freebsdNodeGetMemoryStats(virNodeMemoryStatsPtr params, +virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, int *nparams) { size_t i, j = 0; @@ -960,7 +960,7 @@ linuxNodeGetCPUStats(FILE *procstat, } static int -linuxNodeGetMemoryStats(FILE *meminfo, +virHostMemGetStatsLinux(FILE *meminfo, int cellNum, virNodeMemoryStatsPtr params, int *nparams) @@ -1247,7 +1247,7 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) return -1; - if (nodeGetMemory(&memorybytes, NULL) < 0) + if (virHostMemGetInfo(&memorybytes, NULL) < 0) return -1; nodeinfo->memory = memorybytes / 1024; @@ -1292,7 +1292,7 @@ nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, } int -nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, +virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, int *nparams ATTRIBUTE_UNUSED, unsigned int flags) @@ -1333,14 +1333,14 @@ nodeGetMemoryStats(int cellNum ATTRIBUTE_UNUSED, VIR_FREE(meminfo_path); return -1; } - ret = linuxNodeGetMemoryStats(meminfo, cellNum, params, nparams); + ret = virHostMemGetStatsLinux(meminfo, cellNum, params, nparams); VIR_FORCE_FCLOSE(meminfo); VIR_FREE(meminfo_path); return ret; } #elif defined(__FreeBSD__) - return freebsdNodeGetMemoryStats(params, nparams); + return virHostMemGetStatsFreeBSD(params, nparams); #else virReportError(VIR_ERR_NO_SUPPORT, "%s", _("node memory stats not implemented on this platform")); @@ -1491,7 +1491,7 @@ nodeGetOnlineCPUBitmap(void) #ifdef __linux__ static int -nodeSetMemoryParameterValue(virTypedParameterPtr param) +virHostMemSetParameterValue(virTypedParameterPtr param) { char *path = NULL; char *strval = NULL; @@ -1525,8 +1525,8 @@ nodeSetMemoryParameterValue(virTypedParameterPtr param) } static bool -nodeMemoryParametersIsAllSupported(virTypedParameterPtr params, - int nparams) +virHostMemParametersAreAllSupported(virTypedParameterPtr params, + int nparams) { char *path = NULL; size_t i; @@ -1557,7 +1557,7 @@ nodeMemoryParametersIsAllSupported(virTypedParameterPtr params, #endif int -nodeSetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, +virHostMemSetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, int nparams ATTRIBUTE_UNUSED, unsigned int flags) { @@ -1577,11 +1577,11 @@ nodeSetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, NULL) < 0) return -1; - if (!nodeMemoryParametersIsAllSupported(params, nparams)) + if (!virHostMemParametersAreAllSupported(params, nparams)) return -1; for (i = 0; i < nparams; i++) { - rc = nodeSetMemoryParameterValue(¶ms[i]); + rc = virHostMemSetParameterValue(¶ms[i]); if (rc < 0) return -1; @@ -1598,7 +1598,7 @@ nodeSetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, #ifdef __linux__ static int -nodeGetMemoryParameterValue(const char *field, +virHostMemGetParameterValue(const char *field, void *value) { char *path = NULL; @@ -1649,7 +1649,7 @@ nodeGetMemoryParameterValue(const char *field, #define NODE_MEMORY_PARAMETERS_NUM 8 int -nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, +virHostMemGetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, int *nparams ATTRIBUTE_UNUSED, unsigned int flags) { @@ -1677,7 +1677,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, switch (i) { case 0: - ret = nodeGetMemoryParameterValue("pages_to_scan", &pages_to_scan); + ret = virHostMemGetParameterValue("pages_to_scan", &pages_to_scan); if (ret == -2) continue; else if (ret == -1) @@ -1690,7 +1690,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 1: - ret = nodeGetMemoryParameterValue("sleep_millisecs", &sleep_millisecs); + ret = virHostMemGetParameterValue("sleep_millisecs", &sleep_millisecs); if (ret == -2) continue; else if (ret == -1) @@ -1703,7 +1703,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 2: - ret = nodeGetMemoryParameterValue("pages_shared", &pages_shared); + ret = virHostMemGetParameterValue("pages_shared", &pages_shared); if (ret == -2) continue; else if (ret == -1) @@ -1716,7 +1716,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 3: - ret = nodeGetMemoryParameterValue("pages_sharing", &pages_sharing); + ret = virHostMemGetParameterValue("pages_sharing", &pages_sharing); if (ret == -2) continue; else if (ret == -1) @@ -1729,7 +1729,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 4: - ret = nodeGetMemoryParameterValue("pages_unshared", &pages_unshared); + ret = virHostMemGetParameterValue("pages_unshared", &pages_unshared); if (ret == -2) continue; else if (ret == -1) @@ -1742,7 +1742,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 5: - ret = nodeGetMemoryParameterValue("pages_volatile", &pages_volatile); + ret = virHostMemGetParameterValue("pages_volatile", &pages_volatile); if (ret == -2) continue; else if (ret == -1) @@ -1755,7 +1755,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 6: - ret = nodeGetMemoryParameterValue("full_scans", &full_scans); + ret = virHostMemGetParameterValue("full_scans", &full_scans); if (ret == -2) continue; else if (ret == -1) @@ -1768,7 +1768,7 @@ nodeGetMemoryParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, break; case 7: - ret = nodeGetMemoryParameterValue("merge_across_nodes", &merge_across_nodes); + ret = virHostMemGetParameterValue("merge_across_nodes", &merge_across_nodes); if (ret == -2) continue; else if (ret == -1) @@ -1886,7 +1886,7 @@ nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED, } static int -nodeGetCellsFreeMemoryFake(unsigned long long *freeMems, +virHostMemGetCellsFreeFake(unsigned long long *freeMems, int startCell, int maxCells ATTRIBUTE_UNUSED) { @@ -1911,8 +1911,8 @@ nodeGetCellsFreeMemoryFake(unsigned long long *freeMems, } static int -nodeGetMemoryFake(unsigned long long *mem, - unsigned long long *freeMem) +virHostMemGetInfoFake(unsigned long long *mem, + unsigned long long *freeMem) { int ret = -1; @@ -2168,7 +2168,7 @@ nodeCapsInitNUMA(virCapsPtr caps) int -nodeGetCellsFreeMemory(unsigned long long *freeMems, +virHostMemGetCellsFree(unsigned long long *freeMems, int startCell, int maxCells) { @@ -2178,7 +2178,7 @@ nodeGetCellsFreeMemory(unsigned long long *freeMems, int maxCell; if (!virNumaIsAvailable()) - return nodeGetCellsFreeMemoryFake(freeMems, + return virHostMemGetCellsFreeFake(freeMems, startCell, maxCells); if ((maxCell = virNumaGetMaxNode()) < 0) @@ -2206,8 +2206,8 @@ nodeGetCellsFreeMemory(unsigned long long *freeMems, } int -nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem) +virHostMemGetInfo(unsigned long long *mem, + unsigned long long *freeMem) { int max_node; int n; @@ -2219,7 +2219,7 @@ nodeGetMemory(unsigned long long *mem, *freeMem = 0; if (!virNumaIsAvailable()) - return nodeGetMemoryFake(mem, freeMem); + return virHostMemGetInfoFake(mem, freeMem); if ((max_node = virNumaGetMaxNode()) < 0) return -1; @@ -2244,11 +2244,11 @@ nodeGetMemory(unsigned long long *mem, } int -nodeGetFreePages(unsigned int npages, - unsigned int *pages, - int startCell, - unsigned int cellCount, - unsigned long long *counts) +virHostMemGetFreePages(unsigned int npages, + unsigned int *pages, + int startCell, + unsigned int cellCount, + unsigned long long *counts) { int ret = -1; int cell, lastCell; @@ -2290,12 +2290,12 @@ nodeGetFreePages(unsigned int npages, } int -nodeAllocPages(unsigned int npages, - unsigned int *pageSizes, - unsigned long long *pageCounts, - int startCell, - unsigned int cellCount, - bool add) +virHostMemAllocPages(unsigned int npages, + unsigned int *pageSizes, + unsigned long long *pageCounts, + int startCell, + unsigned int cellCount, + bool add) { int ret = -1; int cell, lastCell; diff --git a/src/nodeinfo.h b/src/nodeinfo.h index b4f434e..d89db33 100644 --- a/src/nodeinfo.h +++ b/src/nodeinfo.h @@ -33,26 +33,26 @@ int nodeGetCPUStats(int cpuNum, virNodeCPUStatsPtr params, int *nparams, unsigned int flags); -int nodeGetMemoryStats(int cellNum, +int virHostMemGetStats(int cellNum, virNodeMemoryStatsPtr params, int *nparams, unsigned int flags); -int nodeGetCellsFreeMemory(unsigned long long *freeMems, +int virHostMemGetCellsFree(unsigned long long *freeMems, int startCell, int maxCells); -int nodeGetMemory(unsigned long long *mem, - unsigned long long *freeMem); +int virHostMemGetInfo(unsigned long long *mem, + unsigned long long *freeMem); virBitmapPtr nodeGetPresentCPUBitmap(void); virBitmapPtr nodeGetOnlineCPUBitmap(void); int nodeGetCPUCount(void); int nodeGetThreadsPerSubcore(virArch arch); -int nodeGetMemoryParameters(virTypedParameterPtr params, +int virHostMemGetParameters(virTypedParameterPtr params, int *nparams, unsigned int flags); -int nodeSetMemoryParameters(virTypedParameterPtr params, +int virHostMemSetParameters(virTypedParameterPtr params, int nparams, unsigned int flags); @@ -60,16 +60,17 @@ int nodeGetCPUMap(unsigned char **cpumap, unsigned int *online, unsigned int flags); -int nodeGetFreePages(unsigned int npages, - unsigned int *pages, - int startCell, - unsigned int cellCount, - unsigned long long *counts); +int virHostMemGetFreePages(unsigned int npages, + unsigned int *pages, + int startCell, + unsigned int cellCount, + unsigned long long *counts); + +int virHostMemAllocPages(unsigned int npages, + unsigned int *pageSizes, + unsigned long long *pageCounts, + int startCell, + unsigned int cellCount, + bool add); -int nodeAllocPages(unsigned int npages, - unsigned int *pageSizes, - unsigned long long *pageCounts, - int startCell, - unsigned int cellCount, - bool add); #endif /* __VIR_NODEINFO_H__*/ diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 24a20cc..a68c1e7 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -2177,7 +2177,7 @@ openvzNodeGetMemoryStats(virConnectPtr conn ATTRIBUTE_UNUSED, int *nparams, unsigned int flags) { - return nodeGetMemoryStats(cellNum, params, nparams, flags); + return virHostMemGetStats(cellNum, params, nparams, flags); } @@ -2187,7 +2187,7 @@ openvzNodeGetCellsFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED, int startCell, int maxCells) { - return nodeGetCellsFreeMemory(freeMems, startCell, maxCells); + return virHostMemGetCellsFree(freeMems, startCell, maxCells); } @@ -2195,7 +2195,7 @@ static unsigned long long openvzNodeGetFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED) { unsigned long long freeMem; - if (nodeGetMemory(NULL, &freeMem) < 0) + if (virHostMemGetInfo(NULL, &freeMem) < 0) return 0; return freeMem; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 79447e9..b6d332c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18538,7 +18538,7 @@ qemuNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(cellNum, params, nparams, flags); + return virHostMemGetStats(cellNum, params, nparams, flags); } @@ -18551,7 +18551,7 @@ qemuNodeGetCellsFreeMemory(virConnectPtr conn, if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0) return -1; - return nodeGetCellsFreeMemory(freeMems, startCell, maxCells); + return virHostMemGetCellsFree(freeMems, startCell, maxCells); } @@ -18563,7 +18563,7 @@ qemuNodeGetFreeMemory(virConnectPtr conn) if (virNodeGetFreeMemoryEnsureACL(conn) < 0) return 0; - if (nodeGetMemory(NULL, &freeMem) < 0) + if (virHostMemGetInfo(NULL, &freeMem) < 0) return 0; return freeMem; @@ -18579,7 +18579,7 @@ qemuNodeGetMemoryParameters(virConnectPtr conn, if (virNodeGetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeGetMemoryParameters(params, nparams, flags); + return virHostMemGetParameters(params, nparams, flags); } @@ -18592,7 +18592,7 @@ qemuNodeSetMemoryParameters(virConnectPtr conn, if (virNodeSetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeSetMemoryParameters(params, nparams, flags); + return virHostMemSetParameters(params, nparams, flags); } @@ -18863,7 +18863,7 @@ qemuNodeGetFreePages(virConnectPtr conn, if (virNodeGetFreePagesEnsureACL(conn) < 0) return -1; - return nodeGetFreePages(npages, pages, startCell, cellCount, counts); + return virHostMemGetFreePages(npages, pages, startCell, cellCount, counts); } @@ -19740,8 +19740,8 @@ qemuNodeAllocPages(virConnectPtr conn, if (virNodeAllocPagesEnsureACL(conn) < 0) return -1; - return nodeAllocPages(npages, pageSizes, pageCounts, - startCell, cellCount, add); + return virHostMemAllocPages(npages, pageSizes, pageCounts, + startCell, cellCount, add); } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 1c7a36d..fd6811f 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -2806,7 +2806,7 @@ umlNodeGetMemoryStats(virConnectPtr conn, if (virNodeGetMemoryStatsEnsureACL(conn) < 0) return -1; - return nodeGetMemoryStats(cellNum, params, nparams, flags); + return virHostMemGetStats(cellNum, params, nparams, flags); } @@ -2819,7 +2819,7 @@ umlNodeGetCellsFreeMemory(virConnectPtr conn, if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0) return -1; - return nodeGetCellsFreeMemory(freeMems, startCell, maxCells); + return virHostMemGetCellsFree(freeMems, startCell, maxCells); } @@ -2831,7 +2831,7 @@ umlNodeGetFreeMemory(virConnectPtr conn) if (virNodeGetFreeMemoryEnsureACL(conn) < 0) return 0; - if (nodeGetMemory(NULL, &freeMem) < 0) + if (virHostMemGetInfo(NULL, &freeMem) < 0) return 0; return freeMem; @@ -2847,7 +2847,7 @@ umlNodeGetMemoryParameters(virConnectPtr conn, if (virNodeGetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeGetMemoryParameters(params, nparams, flags); + return virHostMemGetParameters(params, nparams, flags); } @@ -2860,7 +2860,7 @@ umlNodeSetMemoryParameters(virConnectPtr conn, if (virNodeSetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeSetMemoryParameters(params, nparams, flags); + return virHostMemSetParameters(params, nparams, flags); } @@ -2904,7 +2904,7 @@ umlNodeGetFreePages(virConnectPtr conn, if (virNodeGetFreePagesEnsureACL(conn) < 0) return -1; - return nodeGetFreePages(npages, pages, startCell, cellCount, counts); + return virHostMemGetFreePages(npages, pages, startCell, cellCount, counts); } @@ -2924,8 +2924,8 @@ umlNodeAllocPages(virConnectPtr conn, if (virNodeAllocPagesEnsureACL(conn) < 0) return -1; - return nodeAllocPages(npages, pageSizes, pageCounts, - startCell, cellCount, add); + return virHostMemAllocPages(npages, pageSizes, pageCounts, + startCell, cellCount, add); } diff --git a/src/util/virnuma.c b/src/util/virnuma.c index df0f93a..1e78eb6 100644 --- a/src/util/virnuma.c +++ b/src/util/virnuma.c @@ -659,7 +659,7 @@ virNumaGetPageInfo(int node, /* TODO: come up with better algorithm that takes huge pages into * account. The problem is huge pages cut off regular memory. */ if (node == -1) { - if (nodeGetMemory(&memsize, &memfree) < 0) + if (virHostMemGetInfo(&memsize, &memfree) < 0) goto cleanup; } else { if (virNumaGetNodeMemory(node, &memsize, &memfree) < 0) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 02a7231..603a071 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -7531,14 +7531,14 @@ vboxNodeGetCellsFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED, int startCell, int maxCells) { - return nodeGetCellsFreeMemory(freeMems, startCell, maxCells); + return virHostMemGetCellsFree(freeMems, startCell, maxCells); } static unsigned long long vboxNodeGetFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED) { unsigned long long freeMem; - if (nodeGetMemory(NULL, &freeMem) < 0) + if (virHostMemGetInfo(NULL, &freeMem) < 0) return 0; return freeMem; } @@ -7554,7 +7554,7 @@ vboxNodeGetFreePages(virConnectPtr conn ATTRIBUTE_UNUSED, { virCheckFlags(0, -1); - return nodeGetFreePages(npages, pages, startCell, cellCount, counts); + return virHostMemGetFreePages(npages, pages, startCell, cellCount, counts); } static int @@ -7570,8 +7570,8 @@ vboxNodeAllocPages(virConnectPtr conn ATTRIBUTE_UNUSED, virCheckFlags(VIR_NODE_ALLOC_PAGES_SET, -1); - return nodeAllocPages(npages, pageSizes, pageCounts, - startCell, cellCount, add); + return virHostMemAllocPages(npages, pageSizes, pageCounts, + startCell, cellCount, add); } static int diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 3f5d80d..2196666 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -2563,7 +2563,7 @@ xenUnifiedNodeGetMemoryParameters(virConnectPtr conn, if (virNodeGetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeGetMemoryParameters(params, nparams, flags); + return virHostMemGetParameters(params, nparams, flags); } @@ -2576,7 +2576,7 @@ xenUnifiedNodeSetMemoryParameters(virConnectPtr conn, if (virNodeSetMemoryParametersEnsureACL(conn) < 0) return -1; - return nodeSetMemoryParameters(params, nparams, flags); + return virHostMemSetParameters(params, nparams, flags); } -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
In preparation for moving all the memory related APIs out of the nodeinfo file, give them a virHostMem name prefix.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_private.syms | 14 ++++---- src/lxc/lxc_driver.c | 16 ++++----- src/nodeinfo.c | 82 +++++++++++++++++++++++----------------------- src/nodeinfo.h | 35 ++++++++++---------- src/openvz/openvz_driver.c | 6 ++-- src/qemu/qemu_driver.c | 16 ++++----- src/uml/uml_driver.c | 16 ++++----- src/util/virnuma.c | 2 +- src/vbox/vbox_common.c | 10 +++--- src/xen/xen_driver.c | 4 +-- 10 files changed, 101 insertions(+), 100 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a9025f5..2317c25 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1025,21 +1025,21 @@ virLogManagerNew;
# nodeinfo.h -nodeAllocPages; nodeCapsInitNUMA; -nodeGetCellsFreeMemory;
Using cscope, there's a reference left to this in vz_driver.c
nodeGetCPUCount; nodeGetCPUMap; nodeGetCPUStats; -nodeGetFreePages; nodeGetInfo; -nodeGetMemory;
Using cscope, there's references in bhyve_driver.c and vz_driver.c
-nodeGetMemoryParameters;
Using cscope, there's a reference to this in bhyve_driver.c
-nodeGetMemoryStats;
Using cscope, there's a reference to this in bhyve_driver.c
nodeGetOnlineCPUBitmap; nodeGetPresentCPUBitmap; nodeGetThreadsPerSubcore; -nodeSetMemoryParameters;
Using cscope, there's a reference to this in bhyve_driver.c
+virHostMemAllocPages; +virHostMemGetCellsFree; +virHostMemGetFreePages; +virHostMemGetInfo; +virHostMemGetParameters; +virHostMemGetStats; +virHostMemSetParameters;
ACK w/ the change of call in bhyve_driver.c and vz_driver.c John

In preparation for moving all the CPU related APIs out of the nodeinfo file, give them a virHostCPU name prefix. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_linux.syms | 6 +- src/libvirt_private.syms | 12 +-- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 4 +- src/nodeinfo.c | 212 ++++++++++++++++++++++----------------------- src/nodeinfo.h | 22 ++--- src/nodeinfopriv.h | 26 +++--- src/openvz/openvz_driver.c | 4 +- src/qemu/qemu_driver.c | 10 +-- src/qemu/qemu_process.c | 2 +- src/uml/uml_driver.c | 4 +- src/util/vircgroup.c | 2 +- tests/nodeinfomock.c | 2 +- tests/nodeinfotest.c | 20 ++--- tests/vircgrouptest.c | 4 +- 15 files changed, 166 insertions(+), 166 deletions(-) diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms index f569a23..a2fc076 100644 --- a/src/libvirt_linux.syms +++ b/src/libvirt_linux.syms @@ -3,9 +3,9 @@ # # nodeinfo.h -linuxNodeGetCPUStats; -linuxNodeInfoCPUPopulate; -linuxNodeInfoSetSysFSSystemPath; +virHostCPUGetInfoPopulateLinux; +virHostCPUGetStatsLinux; +virHostCPUSetSysFSSystemPathLinux; # Let emacs know we want case-insensitive sorting # Local Variables: diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 2317c25..22b81ae 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1026,13 +1026,13 @@ virLogManagerNew; # nodeinfo.h nodeCapsInitNUMA; -nodeGetCPUCount; -nodeGetCPUMap; -nodeGetCPUStats; nodeGetInfo; -nodeGetOnlineCPUBitmap; -nodeGetPresentCPUBitmap; -nodeGetThreadsPerSubcore; +virHostCPUGetCount; +virHostCPUGetMap; +virHostCPUGetOnlineBitmap; +virHostCPUGetPresentBitmap; +virHostCPUGetStats; +virHostCPUGetThreadsPerSubcore; virHostMemAllocPages; virHostMemGetCellsFree; virHostMemGetFreePages; diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index a566c12..45ad25e 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -723,7 +723,7 @@ static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl) /* setaffinity fails if you set bits for CPUs which * aren't present, so we have to limit ourselves */ - if ((hostcpus = nodeGetCPUCount()) < 0) + if ((hostcpus = virHostCPUGetCount()) < 0) return -1; if (maxcpu > hostcpus) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 3a8383b..c5e9a5f 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -5440,7 +5440,7 @@ lxcNodeGetCPUStats(virConnectPtr conn, if (virNodeGetCPUStatsEnsureACL(conn) < 0) return -1; - return nodeGetCPUStats(cpuNum, params, nparams, flags); + return virHostCPUGetStats(cpuNum, params, nparams, flags); } @@ -5521,7 +5521,7 @@ lxcNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(cpumap, online, flags); + return virHostCPUGetMap(cpumap, online, flags); } diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 1cac1a4..a3d0024 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -68,7 +68,7 @@ VIR_LOG_INIT("nodeinfo"); #if defined(__FreeBSD__) || defined(__APPLE__) static int -appleFreebsdNodeGetCPUCount(void) +virHostCPUGetCountAppleFreeBSD(void) { int ncpu_mib[2] = { CTL_HW, HW_NCPU }; unsigned long ncpu; @@ -90,9 +90,9 @@ appleFreebsdNodeGetCPUCount(void) # define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / (stathz ? stathz : hz)) static int -freebsdNodeGetCPUStats(int cpuNum, - virNodeCPUStatsPtr params, - int *nparams) +virHostCPUGetStatsFreebsd(int cpuNum, + virNodeCPUStatsPtr params, + int *nparams) { const char *sysctl_name; long *cpu_times; @@ -139,7 +139,7 @@ freebsdNodeGetCPUStats(int cpuNum, offset = 0; } else { sysctl_name = "kern.cp_times"; - cpu_times_num = appleFreebsdNodeGetCPUCount(); + cpu_times_num = virHostCPUGetCountAppleFreeBSD(); if (cpuNum >= cpu_times_num) { virReportInvalidArg(cpuNum, @@ -275,7 +275,7 @@ virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, static const char *sysfs_system_path = SYSFS_SYSTEM_PATH; -void linuxNodeInfoSetSysFSSystemPath(const char *path) +void virHostCPUSetSysFSSystemPathLinux(const char *path) { if (path) sysfs_system_path = path; @@ -330,7 +330,7 @@ virNodeGetCpuValue(const char *dir, unsigned int cpu, const char *file, } static unsigned long -virNodeCountThreadSiblings(const char *dir, unsigned int cpu) +virHostCPUCountThreadSiblings(const char *dir, unsigned int cpu) { unsigned long ret = 0; char *path; @@ -363,9 +363,9 @@ virNodeCountThreadSiblings(const char *dir, unsigned int cpu) } static int -virNodeParseSocket(const char *dir, - virArch arch, - unsigned int cpu) +virHostCPUParseSocket(const char *dir, + virArch arch, + unsigned int cpu) { int ret = virNodeGetCpuValue(dir, cpu, "topology/physical_package_id", 0); @@ -385,15 +385,15 @@ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) ATTRIBUTE_NONNULL(8) ATTRIBUTE_NONNULL(9) -virNodeParseNode(const char *node, - virArch arch, - virBitmapPtr present_cpus_map, - virBitmapPtr online_cpus_map, - int threads_per_subcore, - int *sockets, - int *cores, - int *threads, - int *offline) +virHostCPUParseNode(const char *node, + virArch arch, + virBitmapPtr present_cpus_map, + virBitmapPtr online_cpus_map, + int threads_per_subcore, + int *sockets, + int *cores, + int *threads, + int *offline) { /* Biggest value we can expect to be used as either socket id * or core id. Bitmaps will need to be sized accordingly */ @@ -446,7 +446,7 @@ virNodeParseNode(const char *node, continue; /* Parse socket */ - if ((sock = virNodeParseSocket(node, arch, cpu)) < 0) + if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) goto cleanup; if (sock > ID_MAX) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -501,7 +501,7 @@ virNodeParseNode(const char *node, processors++; /* Parse socket */ - if ((sock = virNodeParseSocket(node, arch, cpu)) < 0) + if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) goto cleanup; if (!virBitmapIsBitSet(sockets_map, sock)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -528,7 +528,7 @@ virNodeParseNode(const char *node, if (virBitmapSetBit(cores_maps[sock], core) < 0) goto cleanup; - if (!(siblings = virNodeCountThreadSiblings(node, cpu))) + if (!(siblings = virHostCPUCountThreadSiblings(node, cpu))) goto cleanup; if (siblings > *threads) @@ -576,7 +576,7 @@ virNodeParseNode(const char *node, * A valid configuration is one where no secondary thread is online; * the primary thread in a subcore is always the first one */ static bool -nodeHasValidSubcoreConfiguration(int threads_per_subcore) +virHostCPUHasValidSubcoreConfiguration(int threads_per_subcore) { virBitmapPtr online_cpus = NULL; int cpu = -1; @@ -586,7 +586,7 @@ nodeHasValidSubcoreConfiguration(int threads_per_subcore) if (threads_per_subcore <= 0) goto cleanup; - if (!(online_cpus = nodeGetOnlineCPUBitmap())) + if (!(online_cpus = virHostCPUGetOnlineBitmap())) goto cleanup; while ((cpu = virBitmapNextSetBit(online_cpus, cpu)) >= 0) { @@ -606,14 +606,14 @@ nodeHasValidSubcoreConfiguration(int threads_per_subcore) } int -linuxNodeInfoCPUPopulate(FILE *cpuinfo, - virArch arch, - unsigned int *cpus, - unsigned int *mhz, - unsigned int *nodes, - unsigned int *sockets, - unsigned int *cores, - unsigned int *threads) +virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, + virArch arch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) { virBitmapPtr present_cpus_map = NULL; virBitmapPtr online_cpus_map = NULL; @@ -713,10 +713,10 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, /* Get information about what CPUs are present in the host and what * CPUs are online, so that we don't have to so for each node */ - present_cpus_map = nodeGetPresentCPUBitmap(); + present_cpus_map = virHostCPUGetPresentBitmap(); if (!present_cpus_map) goto cleanup; - online_cpus_map = nodeGetOnlineCPUBitmap(); + online_cpus_map = virHostCPUGetOnlineBitmap(); if (!online_cpus_map) goto cleanup; @@ -753,12 +753,12 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, * offline/online randomly. * On hosts other than POWER this will be 0, in which case a simpler * thread-counting logic will be used */ - if ((threads_per_subcore = nodeGetThreadsPerSubcore(arch)) < 0) + if ((threads_per_subcore = virHostCPUGetThreadsPerSubcore(arch)) < 0) goto cleanup; /* If the subcore configuration is not valid, just pretend subcores * are not in use and count threads one by one */ - if (!nodeHasValidSubcoreConfiguration(threads_per_subcore)) + if (!virHostCPUHasValidSubcoreConfiguration(threads_per_subcore)) threads_per_subcore = 0; while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) { @@ -771,12 +771,12 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, sysfs_system_path, nodedirent->d_name) < 0) goto cleanup; - if ((nodecpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &nodesockets, &nodecores, - &nodethreads, &offline)) < 0) + if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) goto cleanup; VIR_FREE(sysfs_cpudir); @@ -805,12 +805,12 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_system_path) < 0) goto cleanup; - if ((nodecpus = virNodeParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &nodesockets, &nodecores, - &nodethreads, &offline)) < 0) + if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) goto cleanup; *nodes = 1; @@ -870,7 +870,7 @@ linuxNodeInfoCPUPopulate(FILE *cpuinfo, } static int -virNodeCPUStatsAssign(virNodeCPUStatsPtr param, +virHostCPUStatsAssign(virNodeCPUStatsPtr param, const char *name, unsigned long long value) { @@ -887,10 +887,10 @@ virNodeCPUStatsAssign(virNodeCPUStatsPtr param, # define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / sysconf(_SC_CLK_TCK)) int -linuxNodeGetCPUStats(FILE *procstat, - int cpuNum, - virNodeCPUStatsPtr params, - int *nparams) +virHostCPUGetStatsLinux(FILE *procstat, + int cpuNum, + virNodeCPUStatsPtr params, + int *nparams) { int ret = -1; char line[1024]; @@ -930,19 +930,19 @@ linuxNodeGetCPUStats(FILE *procstat, continue; } - if (virNodeCPUStatsAssign(¶ms[0], VIR_NODE_CPU_STATS_KERNEL, + if (virHostCPUStatsAssign(¶ms[0], VIR_NODE_CPU_STATS_KERNEL, (sys + irq + softirq) * TICK_TO_NSEC) < 0) goto cleanup; - if (virNodeCPUStatsAssign(¶ms[1], VIR_NODE_CPU_STATS_USER, + if (virHostCPUStatsAssign(¶ms[1], VIR_NODE_CPU_STATS_USER, (usr + ni) * TICK_TO_NSEC) < 0) goto cleanup; - if (virNodeCPUStatsAssign(¶ms[2], VIR_NODE_CPU_STATS_IDLE, + if (virHostCPUStatsAssign(¶ms[2], VIR_NODE_CPU_STATS_IDLE, idle * TICK_TO_NSEC) < 0) goto cleanup; - if (virNodeCPUStatsAssign(¶ms[3], VIR_NODE_CPU_STATS_IOWAIT, + if (virHostCPUStatsAssign(¶ms[3], VIR_NODE_CPU_STATS_IOWAIT, iowait * TICK_TO_NSEC) < 0) goto cleanup; @@ -1066,7 +1066,7 @@ virHostMemGetStatsLinux(FILE *meminfo, } static char * -linuxGetCPUGlobalPath(const char *file) +virHostCPUGetGlobalPathLinux(const char *file) { char *path = NULL; @@ -1077,21 +1077,21 @@ linuxGetCPUGlobalPath(const char *file) } static char * -linuxGetCPUPresentPath(void) +virHostCPUGetPresentPathLinux(void) { - return linuxGetCPUGlobalPath("present"); + return virHostCPUGetGlobalPathLinux("present"); } static char * -linuxGetCPUOnlinePath(void) +virHostCPUGetOnlinePathLinux(void) { - return linuxGetCPUGlobalPath("online"); + return virHostCPUGetGlobalPathLinux("online"); } /* Determine the number of CPUs (maximum CPU id + 1) from a file containing * a list of CPU ids, like the Linux sysfs cpu/present file */ static int -linuxParseCPUCount(const char *path) +virHostCPUParseCountLinux(const char *path) { char *str = NULL; char *tmp; @@ -1123,7 +1123,7 @@ linuxParseCPUCount(const char *path) * 0-4,6-7. This function parses it and returns cpumap. */ static virBitmapPtr -linuxParseCPUmap(int max_cpuid, const char *path) +virHostCPUParseMapLinux(int max_cpuid, const char *path) { virBitmapPtr map = NULL; char *str = NULL; @@ -1145,7 +1145,7 @@ linuxParseCPUmap(int max_cpuid, const char *path) static virBitmapPtr -virNodeGetSiblingsList(const char *dir, int cpu_id) +virNodeGetSiblingsListLinux(const char *dir, int cpu_id) { char *path = NULL; char *buf = NULL; @@ -1170,13 +1170,13 @@ virNodeGetSiblingsList(const char *dir, int cpu_id) static int -nodeGetCPUInfo(virArch hostarch, - unsigned int *cpus, - unsigned int *mhz, - unsigned int *nodes, - unsigned int *sockets, - unsigned int *cores, - unsigned int *threads) +virHostCPUGetInfo(virArch hostarch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) { #ifdef __linux__ int ret = -1; @@ -1188,9 +1188,9 @@ nodeGetCPUInfo(virArch hostarch, return -1; } - ret = linuxNodeInfoCPUPopulate(cpuinfo, hostarch, - cpus, mhz, nodes, - sockets, cores, threads); + ret = virHostCPUGetInfoPopulateLinux(cpuinfo, hostarch, + cpus, mhz, nodes, + sockets, cores, threads); if (ret < 0) goto cleanup; @@ -1201,7 +1201,7 @@ nodeGetCPUInfo(virArch hostarch, unsigned long cpu_freq; size_t cpu_freq_len = sizeof(cpu_freq); - *cpus = appleFreebsdNodeGetCPUCount(); + *cpus = virHostCPUGetCountAppleFreeBSD(); if (*cpus == -1) return -1; @@ -1251,20 +1251,20 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) return -1; nodeinfo->memory = memorybytes / 1024; - if (nodeGetCPUInfo(hostarch, - &nodeinfo->cpus, &nodeinfo->mhz, - &nodeinfo->nodes, &nodeinfo->sockets, - &nodeinfo->cores, &nodeinfo->threads) < 0) + if (virHostCPUGetInfo(hostarch, + &nodeinfo->cpus, &nodeinfo->mhz, + &nodeinfo->nodes, &nodeinfo->sockets, + &nodeinfo->cores, &nodeinfo->threads) < 0) return -1; return 0; } int -nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, - virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, - int *nparams ATTRIBUTE_UNUSED, - unsigned int flags) +virHostCPUGetStats(int cpuNum ATTRIBUTE_UNUSED, + virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, + int *nparams ATTRIBUTE_UNUSED, + unsigned int flags) { virCheckFlags(0, -1); @@ -1277,13 +1277,13 @@ nodeGetCPUStats(int cpuNum ATTRIBUTE_UNUSED, _("cannot open %s"), PROCSTAT_PATH); return -1; } - ret = linuxNodeGetCPUStats(procstat, cpuNum, params, nparams); + ret = virHostCPUGetStatsLinux(procstat, cpuNum, params, nparams); VIR_FORCE_FCLOSE(procstat); return ret; } #elif defined(__FreeBSD__) - return freebsdNodeGetCPUStats(cpuNum, params, nparams); + return virHostCPUGetStatsFreeBSD(cpuNum, params, nparams); #else virReportError(VIR_ERR_NO_SUPPORT, "%s", _("node CPU stats not implemented on this platform")); @@ -1349,7 +1349,7 @@ virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, } int -nodeGetCPUCount(void) +virHostCPUGetCount(void) { #if defined(__linux__) /* To support older kernels that lack cpu/present, such as 2.6.18 @@ -1361,11 +1361,11 @@ nodeGetCPUCount(void) char *cpupath = NULL; int ncpu = -1; - if (!(present_path = linuxGetCPUPresentPath())) + if (!(present_path = virHostCPUGetPresentPathLinux())) return -1; if (virFileExists(present_path)) { - ncpu = linuxParseCPUCount(present_path); + ncpu = virHostCPUParseCountLinux(present_path); goto cleanup; } @@ -1393,7 +1393,7 @@ nodeGetCPUCount(void) VIR_FREE(cpupath); return ncpu; #elif defined(__FreeBSD__) || defined(__APPLE__) - return appleFreebsdNodeGetCPUCount(); + return virHostCPUGetCountAppleFreeBSD(); #else virReportError(VIR_ERR_NO_SUPPORT, "%s", _("host cpu counting not implemented on this platform")); @@ -1402,22 +1402,22 @@ nodeGetCPUCount(void) } virBitmapPtr -nodeGetPresentCPUBitmap(void) +virHostCPUGetPresentBitmap(void) { #ifdef __linux__ virBitmapPtr present_cpus = NULL; char *present_path = NULL; int npresent_cpus; - if ((npresent_cpus = nodeGetCPUCount()) < 0) + if ((npresent_cpus = virHostCPUGetCount()) < 0) goto cleanup; - if (!(present_path = linuxGetCPUPresentPath())) + if (!(present_path = virHostCPUGetPresentPathLinux())) goto cleanup; /* If the cpu/present file is available, parse it and exit */ if (virFileExists(present_path)) { - present_cpus = linuxParseCPUmap(npresent_cpus, present_path); + present_cpus = virHostCPUParseMapLinux(npresent_cpus, present_path); goto cleanup; } @@ -1440,7 +1440,7 @@ nodeGetPresentCPUBitmap(void) } virBitmapPtr -nodeGetOnlineCPUBitmap(void) +virHostCPUGetOnlineBitmap(void) { #ifdef __linux__ char *online_path = NULL; @@ -1448,14 +1448,14 @@ nodeGetOnlineCPUBitmap(void) virBitmapPtr cpumap; int present; - present = nodeGetCPUCount(); + present = virHostCPUGetCount(); if (present < 0) return NULL; - if (!(online_path = linuxGetCPUOnlinePath())) + if (!(online_path = virHostCPUGetOnlinePathLinux())) return NULL; if (virFileExists(online_path)) { - cpumap = linuxParseCPUmap(present, online_path); + cpumap = virHostCPUParseMapLinux(present, online_path); } else { size_t i; @@ -1792,9 +1792,9 @@ virHostMemGetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, } int -nodeGetCPUMap(unsigned char **cpumap, - unsigned int *online, - unsigned int flags) +virHostCPUGetMap(unsigned char **cpumap, + unsigned int *online, + unsigned int flags) { virBitmapPtr cpus = NULL; int ret = -1; @@ -1803,9 +1803,9 @@ nodeGetCPUMap(unsigned char **cpumap, virCheckFlags(0, -1); if (!cpumap && !online) - return nodeGetCPUCount(); + return virHostCPUGetCount(); - if (!(cpus = nodeGetOnlineCPUBitmap())) + if (!(cpus = virHostCPUGetOnlineBitmap())) goto cleanup; if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) @@ -1994,7 +1994,7 @@ virNodeCapsFillCPUInfo(const char *cpupath ATTRIBUTE_UNUSED, cpu->core_id = tmp; - if (!(cpu->siblings = virNodeGetSiblingsList(cpupath, cpu_id))) + if (!(cpu->siblings = virNodeGetSiblingsListLinux(cpupath, cpu_id))) return -1; return 0; @@ -2340,7 +2340,7 @@ virHostMemAllocPages(unsigned int npages, * Returns the number of threads per subcore if subcores are in use, zero * if subcores are not in use, and a negative value on error */ int -nodeGetThreadsPerSubcore(virArch arch) +virHostCPUGetThreadsPerSubcore(virArch arch) { int threads_per_subcore = 0; const char *kvmpath = "/dev/kvm"; @@ -2387,7 +2387,7 @@ nodeGetThreadsPerSubcore(virArch arch) /* Fallback for nodeGetThreadsPerSubcore() used when KVM headers * are not available on the system */ int -nodeGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED) +virHostCPUGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED) { return 0; } diff --git a/src/nodeinfo.h b/src/nodeinfo.h index d89db33..08b9f9d 100644 --- a/src/nodeinfo.h +++ b/src/nodeinfo.h @@ -29,10 +29,10 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo); int nodeCapsInitNUMA(virCapsPtr caps); -int nodeGetCPUStats(int cpuNum, - virNodeCPUStatsPtr params, - int *nparams, - unsigned int flags); +int virHostCPUGetStats(int cpuNum, + virNodeCPUStatsPtr params, + int *nparams, + unsigned int flags); int virHostMemGetStats(int cellNum, virNodeMemoryStatsPtr params, int *nparams, @@ -43,10 +43,10 @@ int virHostMemGetCellsFree(unsigned long long *freeMems, int virHostMemGetInfo(unsigned long long *mem, unsigned long long *freeMem); -virBitmapPtr nodeGetPresentCPUBitmap(void); -virBitmapPtr nodeGetOnlineCPUBitmap(void); -int nodeGetCPUCount(void); -int nodeGetThreadsPerSubcore(virArch arch); +virBitmapPtr virHostCPUGetPresentBitmap(void); +virBitmapPtr virHostCPUGetOnlineBitmap(void); +int virHostCPUGetCount(void); +int virHostCPUGetThreadsPerSubcore(virArch arch); int virHostMemGetParameters(virTypedParameterPtr params, int *nparams, @@ -56,9 +56,9 @@ int virHostMemSetParameters(virTypedParameterPtr params, int nparams, unsigned int flags); -int nodeGetCPUMap(unsigned char **cpumap, - unsigned int *online, - unsigned int flags); +int virHostCPUGetMap(unsigned char **cpumap, + unsigned int *online, + unsigned int flags); int virHostMemGetFreePages(unsigned int npages, unsigned int *pages, diff --git a/src/nodeinfopriv.h b/src/nodeinfopriv.h index 01bcb8d..0fd4391 100644 --- a/src/nodeinfopriv.h +++ b/src/nodeinfopriv.h @@ -25,21 +25,21 @@ # include "nodeinfo.h" # ifdef __linux__ -void linuxNodeInfoSetSysFSSystemPath(const char *path); +void virHostCPUSetSysFSSystemPathLinux(const char *path); -int linuxNodeInfoCPUPopulate(FILE *cpuinfo, - virArch arch, - unsigned int *cpus, - unsigned int *mhz, - unsigned int *nodes, - unsigned int *sockets, - unsigned int *cores, - unsigned int *threads); +int virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, + virArch arch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads); -int linuxNodeGetCPUStats(FILE *procstat, - int cpuNum, - virNodeCPUStatsPtr params, - int *nparams); +int virHostCPUGetStatsLinux(FILE *procstat, + int cpuNum, + virNodeCPUStatsPtr params, + int *nparams); # endif #endif /* __NODEINFO_PRIV_H__ */ diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index a68c1e7..ef11745 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -2166,7 +2166,7 @@ openvzNodeGetCPUStats(virConnectPtr conn ATTRIBUTE_UNUSED, int *nparams, unsigned int flags) { - return nodeGetCPUStats(cpuNum, params, nparams, flags); + return virHostCPUGetStats(cpuNum, params, nparams, flags); } @@ -2207,7 +2207,7 @@ openvzNodeGetCPUMap(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned int *online, unsigned int flags) { - return nodeGetCPUMap(cpumap, online, flags); + return virHostCPUGetMap(cpumap, online, flags); } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b6d332c..38aab15 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5148,7 +5148,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom, priv = vm->privateData; ret = virDomainDefGetVcpuPinInfoHelper(def, maplen, ncpumaps, cpumaps, - nodeGetCPUCount(), + virHostCPUGetCount(), priv->autoCpuset); cleanup: virDomainObjEndAPI(&vm); @@ -5293,7 +5293,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, if (!(def = virDomainObjGetOneDef(vm, flags))) goto cleanup; - if ((hostcpus = nodeGetCPUCount()) < 0) + if ((hostcpus = virHostCPUGetCount()) < 0) goto cleanup; priv = vm->privateData; @@ -5541,7 +5541,7 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, if (targetDef->niothreadids == 0) return 0; - if ((hostcpus = nodeGetCPUCount()) < 0) + if ((hostcpus = virHostCPUGetCount()) < 0) goto cleanup; if (VIR_ALLOC_N(info_ret, targetDef->niothreadids) < 0) @@ -18524,7 +18524,7 @@ qemuNodeGetCPUStats(virConnectPtr conn, if (virNodeGetCPUStatsEnsureACL(conn) < 0) return -1; - return nodeGetCPUStats(cpuNum, params, nparams, flags); + return virHostCPUGetStats(cpuNum, params, nparams, flags); } @@ -18605,7 +18605,7 @@ qemuNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(cpumap, online, flags); + return virHostCPUGetMap(cpumap, online, flags); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 274b4d4..7d01e38 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2194,7 +2194,7 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm) /* setaffinity fails if you set bits for CPUs which * aren't present, so we have to limit ourselves */ - if ((hostcpus = nodeGetCPUCount()) < 0) + if ((hostcpus = virHostCPUGetCount()) < 0) goto cleanup; if (hostcpus > QEMUD_CPUMASK_LEN) diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index fd6811f..19ba901 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -2792,7 +2792,7 @@ umlNodeGetCPUStats(virConnectPtr conn, if (virNodeGetCPUStatsEnsureACL(conn) < 0) return -1; - return nodeGetCPUStats(cpuNum, params, nparams, flags); + return virHostCPUGetStats(cpuNum, params, nparams, flags); } @@ -2873,7 +2873,7 @@ umlNodeGetCPUMap(virConnectPtr conn, if (virNodeGetCPUMapEnsureACL(conn) < 0) return -1; - return nodeGetCPUMap(cpumap, online, flags); + return virHostCPUGetMap(cpumap, online, flags); } diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 1b90447..05097f8 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -3131,7 +3131,7 @@ virCgroupGetPercpuStats(virCgroupPtr group, } /* To parse account file, we need to know how many cpus are present. */ - if (!(cpumap = nodeGetPresentCPUBitmap())) + if (!(cpumap = virHostCPUGetPresentBitmap())) return -1; total_cpus = virBitmapSize(cpumap); diff --git a/tests/nodeinfomock.c b/tests/nodeinfomock.c index b9c0152..ac12b5e 100644 --- a/tests/nodeinfomock.c +++ b/tests/nodeinfomock.c @@ -23,7 +23,7 @@ #include "nodeinfo.h" int -nodeGetThreadsPerSubcore(virArch arch) +virHostCPUGetThreadsPerSubcore(virArch arch) { int threads_per_subcore = 0; diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c index 951ae2f..50b1c82 100644 --- a/tests/nodeinfotest.c +++ b/tests/nodeinfotest.c @@ -41,10 +41,10 @@ linuxTestCompareFiles(const char *cpuinfofile, } memset(&nodeinfo, 0, sizeof(nodeinfo)); - if (linuxNodeInfoCPUPopulate(cpuinfo, arch, - &nodeinfo.cpus, &nodeinfo.mhz, - &nodeinfo.nodes, &nodeinfo.sockets, - &nodeinfo.cores, &nodeinfo.threads) < 0) { + if (virHostCPUGetInfoPopulateLinux(cpuinfo, arch, + &nodeinfo.cpus, &nodeinfo.mhz, + &nodeinfo.nodes, &nodeinfo.sockets, + &nodeinfo.cores, &nodeinfo.threads) < 0) { if (virTestGetDebug()) { virErrorPtr error = virSaveLastError(); if (error && error->code != VIR_ERR_OK) @@ -115,14 +115,14 @@ linuxCPUStatsCompareFiles(const char *cpustatfile, goto fail; } - if (linuxNodeGetCPUStats(NULL, 0, NULL, &nparams) < 0) + if (virHostCPUGetStatsLinux(NULL, 0, NULL, &nparams) < 0) goto fail; if (VIR_ALLOC_N(params, nparams) < 0) goto fail; - if (linuxNodeGetCPUStats(cpustat, VIR_NODE_CPU_STATS_ALL_CPUS, params, - &nparams) < 0) + if (virHostCPUGetStatsLinux(cpustat, VIR_NODE_CPU_STATS_ALL_CPUS, params, + &nparams) < 0) goto fail; if (linuxCPUStatsToBuf(&buf, VIR_NODE_CPU_STATS_ALL_CPUS, @@ -130,7 +130,7 @@ linuxCPUStatsCompareFiles(const char *cpustatfile, goto fail; for (i = 0; i < ncpus; i++) { - if (linuxNodeGetCPUStats(cpustat, i, params, &nparams) < 0) + if (virHostCPUGetStatsLinux(cpustat, i, params, &nparams) < 0) goto fail; if (linuxCPUStatsToBuf(&buf, i, params, nparams) < 0) goto fail; @@ -179,9 +179,9 @@ linuxTestNodeInfo(const void *opaque) goto cleanup; } - linuxNodeInfoSetSysFSSystemPath(sysfs_prefix); + virHostCPUSetSysFSSystemPathLinux(sysfs_prefix); result = linuxTestCompareFiles(cpuinfo, data->arch, output); - linuxNodeInfoSetSysFSSystemPath(NULL); + virHostCPUSetSysFSSystemPathLinux(NULL); cleanup: VIR_FREE(cpuinfo); diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 6ce03f7..148721d 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -649,8 +649,8 @@ static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED) goto cleanup; } - if (nodeGetCPUCount() != EXPECTED_NCPUS) { - fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount()); + if (virHostCPUGetCount() != EXPECTED_NCPUS) { + fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", virHostCPUGetCount()); goto cleanup; } -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
In preparation for moving all the CPU related APIs out of the nodeinfo file, give them a virHostCPU name prefix.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_linux.syms | 6 +- src/libvirt_private.syms | 12 +-- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 4 +- src/nodeinfo.c | 212 ++++++++++++++++++++++----------------------- src/nodeinfo.h | 22 ++--- src/nodeinfopriv.h | 26 +++--- src/openvz/openvz_driver.c | 4 +- src/qemu/qemu_driver.c | 10 +-- src/qemu/qemu_process.c | 2 +- src/uml/uml_driver.c | 4 +- src/util/vircgroup.c | 2 +- tests/nodeinfomock.c | 2 +- tests/nodeinfotest.c | 20 ++--- tests/vircgrouptest.c | 4 +- 15 files changed, 166 insertions(+), 166 deletions(-)
diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms index f569a23..a2fc076 100644 --- a/src/libvirt_linux.syms +++ b/src/libvirt_linux.syms @@ -3,9 +3,9 @@ #
# nodeinfo.h -linuxNodeGetCPUStats; -linuxNodeInfoCPUPopulate; -linuxNodeInfoSetSysFSSystemPath; +virHostCPUGetInfoPopulateLinux; +virHostCPUGetStatsLinux; +virHostCPUSetSysFSSystemPathLinux;
# Let emacs know we want case-insensitive sorting # Local Variables: diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 2317c25..22b81ae 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1026,13 +1026,13 @@ virLogManagerNew;
# nodeinfo.h nodeCapsInitNUMA; -nodeGetCPUCount;
cscope shows reference in 'src/vz/vz_sdk.c'
-nodeGetCPUMap;
cscope shows reference in bhyve_driver.c and vz_driver.c
-nodeGetCPUStats;
cscope shows reference in bhyve_driver.c and vz_driver.c
nodeGetInfo; -nodeGetOnlineCPUBitmap; -nodeGetPresentCPUBitmap; -nodeGetThreadsPerSubcore; +virHostCPUGetCount; +virHostCPUGetMap; +virHostCPUGetOnlineBitmap; +virHostCPUGetPresentBitmap; +virHostCPUGetStats; +virHostCPUGetThreadsPerSubcore; virHostMemAllocPages; virHostMemGetCellsFree; virHostMemGetFreePages;
[...]
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 6ce03f7..148721d 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -649,8 +649,8 @@ static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED) goto cleanup; }
- if (nodeGetCPUCount() != EXPECTED_NCPUS) { - fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount()); + if (virHostCPUGetCount() != EXPECTED_NCPUS) { + fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", virHostCPUGetCount());
^^^^^ May as well adjust the error message too... ACK w/ adjustments. John
goto cleanup; }

--- po/POTFILES.in | 1 + src/Makefile.am | 1 + src/lxc/lxc_driver.c | 1 + src/nodeinfo.c | 812 +----------------------------------------- src/nodeinfo.h | 31 -- src/openvz/openvz_driver.c | 1 + src/qemu/qemu_driver.c | 1 + src/uml/uml_driver.c | 1 + src/util/virhostmem.c | 865 +++++++++++++++++++++++++++++++++++++++++++++ src/util/virhostmem.h | 60 ++++ src/util/virnuma.c | 2 +- src/vbox/vbox_common.c | 1 + src/xen/xen_driver.c | 1 + 13 files changed, 935 insertions(+), 843 deletions(-) create mode 100644 src/util/virhostmem.c create mode 100644 src/util/virhostmem.h diff --git a/po/POTFILES.in b/po/POTFILES.in index b0cd8cf..0cd9c08 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -197,6 +197,7 @@ src/util/virhash.c src/util/virhook.c src/util/virhostcpu.c src/util/virhostdev.c +src/util/virhostmem.c src/util/viridentity.c src/util/virinitctl.c src/util/viriptables.c diff --git a/src/Makefile.am b/src/Makefile.am index 8d2a8e0..8b6ff15 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -120,6 +120,7 @@ UTIL_SOURCES = \ util/virhook.c util/virhook.h \ util/virhostcpu.c util/virhostcpu.h util/virhostcpupriv.h \ util/virhostdev.c util/virhostdev.h \ + util/virhostmem.c util/virhostmem.h \ util/viridentity.c util/viridentity.h \ util/virinitctl.c util/virinitctl.h \ util/viriptables.c util/viriptables.h \ diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 2cecabc..3550026 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -52,6 +52,7 @@ #include "virnetdevopenvswitch.h" #include "nodeinfo.h" #include "virhostcpu.h" +#include "virhostmem.h" #include "viruuid.h" #include "virstats.h" #include "virhook.h" diff --git a/src/nodeinfo.c b/src/nodeinfo.c index 8bf495f..4e344bb 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -28,27 +28,16 @@ #include <stdlib.h> #include <stdint.h> #include <errno.h> -#include <dirent.h> #include <sys/utsname.h> #include "conf/domain_conf.h" #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> -#if HAVE_LINUX_KVM_H -# include <linux/kvm.h> -#endif - -#if defined(__FreeBSD__) || defined(__APPLE__) -# include <sys/time.h> -# include <sys/types.h> -# include <sys/sysctl.h> -# include <sys/resource.h> -#endif - #include "viralloc.h" #include "nodeinfo.h" #include "virhostcpu.h" +#include "virhostmem.h" #include "physmem.h" #include "virerror.h" #include "count-one-bits.h" @@ -65,92 +54,11 @@ VIR_LOG_INIT("nodeinfo"); -#ifdef __FreeBSD__ -# define BSD_MEMORY_STATS_ALL 4 - -static int -virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, - int *nparams) -{ - size_t i, j = 0; - unsigned long pagesize = getpagesize() >> 10; - long bufpages; - size_t bufpages_size = sizeof(bufpages); - struct field_sysctl_map { - const char *field; - const char *sysctl_name; - } sysctl_map[] = { - {VIR_NODE_MEMORY_STATS_TOTAL, "vm.stats.vm.v_page_count"}, - {VIR_NODE_MEMORY_STATS_FREE, "vm.stats.vm.v_free_count"}, - {VIR_NODE_MEMORY_STATS_CACHED, "vm.stats.vm.v_cache_count"}, - {NULL, NULL} - }; - - if ((*nparams) == 0) { - *nparams = BSD_MEMORY_STATS_ALL; - return 0; - } - - if ((*nparams) != BSD_MEMORY_STATS_ALL) { - virReportInvalidArg(nparams, - _("nparams in %s must be %d"), - __FUNCTION__, BSD_MEMORY_STATS_ALL); - return -1; - } - - for (i = 0; sysctl_map[i].field != NULL; i++) { - u_int value; - size_t value_size = sizeof(value); - virNodeMemoryStatsPtr param; - - if (sysctlbyname(sysctl_map[i].sysctl_name, &value, - &value_size, NULL, 0) < 0) { - virReportSystemError(errno, - _("sysctl failed for '%s'"), - sysctl_map[i].sysctl_name); - return -1; - } - - param = ¶ms[j++]; - if (virStrcpyStatic(param->field, sysctl_map[i].field) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Field '%s' too long for destination"), - sysctl_map[i].field); - return -1; - } - param->value = (unsigned long long)value * pagesize; - } - - { - virNodeMemoryStatsPtr param = ¶ms[j++]; - - if (sysctlbyname("vfs.bufspace", &bufpages, &bufpages_size, NULL, 0) < 0) { - virReportSystemError(errno, - _("sysctl failed for '%s'"), - "vfs.bufspace"); - return -1; - } - if (virStrcpyStatic(param->field, VIR_NODE_MEMORY_STATS_BUFFERS) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Field '%s' too long for destination"), - VIR_NODE_MEMORY_STATS_BUFFERS); - return -1; - } - param->value = (unsigned long long)bufpages >> 10; - } - - return 0; -} -#endif /* __FreeBSD__ */ #ifdef __linux__ # define SYSFS_SYSTEM_PATH "/sys/devices/system" -# define MEMINFO_PATH "/proc/meminfo" -# define SYSFS_MEMORY_SHARED_PATH "/sys/kernel/mm/ksm" # define SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX 8192 -# define LINUX_NB_MEMORY_STATS_ALL 4 -# define LINUX_NB_MEMORY_STATS_CELL 2 /* Return the positive decimal contents of the given * DIR/cpu%u/FILE, or -1 on error. If DEFAULT_VALUE is non-negative @@ -199,113 +107,6 @@ virNodeGetCpuValue(const char *dir, unsigned int cpu, const char *file, } -static int -virHostMemGetStatsLinux(FILE *meminfo, - int cellNum, - virNodeMemoryStatsPtr params, - int *nparams) -{ - int ret = -1; - size_t i = 0, j = 0, k = 0; - int found = 0; - int nr_param; - char line[1024]; - char meminfo_hdr[VIR_NODE_MEMORY_STATS_FIELD_LENGTH]; - unsigned long val; - struct field_conv { - const char *meminfo_hdr; // meminfo header - const char *field; // MemoryStats field name - } field_conv[] = { - {"MemTotal:", VIR_NODE_MEMORY_STATS_TOTAL}, - {"MemFree:", VIR_NODE_MEMORY_STATS_FREE}, - {"Buffers:", VIR_NODE_MEMORY_STATS_BUFFERS}, - {"Cached:", VIR_NODE_MEMORY_STATS_CACHED}, - {NULL, NULL} - }; - - if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) { - nr_param = LINUX_NB_MEMORY_STATS_ALL; - } else { - nr_param = LINUX_NB_MEMORY_STATS_CELL; - } - - if ((*nparams) == 0) { - /* Current number of memory stats supported by linux */ - *nparams = nr_param; - ret = 0; - goto cleanup; - } - - if ((*nparams) != nr_param) { - virReportInvalidArg(nparams, - _("nparams in %s must be %d"), - __FUNCTION__, nr_param); - goto cleanup; - } - - while (fgets(line, sizeof(line), meminfo) != NULL) { - char *buf = line; - - if (STRPREFIX(buf, "Node ")) { - /* - * /sys/devices/system/node/nodeX/meminfo format is below. - * So, skip prefix "Node XX ". - * - * Node 0 MemTotal: 8386980 kB - * Node 0 MemFree: 5300920 kB - * : - */ - char *p; - - p = buf; - for (i = 0; i < 2; i++) { - p = strchr(p, ' '); - if (p == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no prefix found")); - goto cleanup; - } - p++; - } - buf = p; - } - - if (sscanf(buf, "%s %lu kB", meminfo_hdr, &val) < 2) - continue; - - for (j = 0; field_conv[j].meminfo_hdr != NULL; j++) { - struct field_conv *convp = &field_conv[j]; - - if (STREQ(meminfo_hdr, convp->meminfo_hdr)) { - virNodeMemoryStatsPtr param = ¶ms[k++]; - - if (virStrcpyStatic(param->field, convp->field) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("Field kernel memory too long for destination")); - goto cleanup; - } - param->value = val; - found++; - break; - } - } - if (found >= nr_param) - break; - } - - if (found == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no available memory line found")); - goto cleanup; - } - - ret = 0; - - cleanup: - return ret; -} - - static virBitmapPtr virNodeGetSiblingsListLinux(const char *dir, int cpu_id) { @@ -356,367 +157,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) } -int -virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, - virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, - int *nparams ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(0, -1); - -#ifdef __linux__ - { - int ret; - char *meminfo_path = NULL; - FILE *meminfo; - int max_node; - - if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) { - if (VIR_STRDUP(meminfo_path, MEMINFO_PATH) < 0) - return -1; - } else { - if ((max_node = virNumaGetMaxNode()) < 0) - return -1; - - if (cellNum > max_node) { - virReportInvalidArg(cellNum, - _("cellNum in %s must be less than or equal to %d"), - __FUNCTION__, max_node); - return -1; - } - - if (virAsprintf(&meminfo_path, - SYSFS_SYSTEM_PATH "/node/node%d/meminfo", - cellNum) < 0) - return -1; - } - meminfo = fopen(meminfo_path, "r"); - - if (!meminfo) { - virReportSystemError(errno, - _("cannot open %s"), meminfo_path); - VIR_FREE(meminfo_path); - return -1; - } - ret = virHostMemGetStatsLinux(meminfo, cellNum, params, nparams); - VIR_FORCE_FCLOSE(meminfo); - VIR_FREE(meminfo_path); - - return ret; - } -#elif defined(__FreeBSD__) - return virHostMemGetStatsFreeBSD(params, nparams); -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node memory stats not implemented on this platform")); - return -1; -#endif -} - - -#ifdef __linux__ -static int -virHostMemSetParameterValue(virTypedParameterPtr param) -{ - char *path = NULL; - char *strval = NULL; - int ret = -1; - int rc = -1; - - char *field = strchr(param->field, '_'); - sa_assert(field); - field++; - if (virAsprintf(&path, "%s/%s", - SYSFS_MEMORY_SHARED_PATH, field) < 0) { - ret = -2; - goto cleanup; - } - - if (virAsprintf(&strval, "%u", param->value.ui) == -1) { - ret = -2; - goto cleanup; - } - - if ((rc = virFileWriteStr(path, strval, 0)) < 0) { - virReportSystemError(-rc, _("failed to set %s"), param->field); - goto cleanup; - } - - ret = 0; - cleanup: - VIR_FREE(path); - VIR_FREE(strval); - return ret; -} - -static bool -virHostMemParametersAreAllSupported(virTypedParameterPtr params, - int nparams) -{ - char *path = NULL; - size_t i; - - for (i = 0; i < nparams; i++) { - virTypedParameterPtr param = ¶ms[i]; - - char *field = strchr(param->field, '_'); - sa_assert(field); - field++; - if (virAsprintf(&path, "%s/%s", - SYSFS_MEMORY_SHARED_PATH, field) < 0) - return false; - - if (!virFileExists(path)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("Parameter '%s' is not supported by " - "this kernel"), param->field); - VIR_FREE(path); - return false; - } - - VIR_FREE(path); - } - - return true; -} -#endif - -int -virHostMemSetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, - int nparams ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(0, -1); - -#ifdef __linux__ - size_t i; - int rc; - - if (virTypedParamsValidate(params, nparams, - VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN, - VIR_TYPED_PARAM_UINT, - VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS, - VIR_TYPED_PARAM_UINT, - VIR_NODE_MEMORY_SHARED_MERGE_ACROSS_NODES, - VIR_TYPED_PARAM_UINT, - NULL) < 0) - return -1; - - if (!virHostMemParametersAreAllSupported(params, nparams)) - return -1; - - for (i = 0; i < nparams; i++) { - rc = virHostMemSetParameterValue(¶ms[i]); - - if (rc < 0) - return -1; - } - - return 0; -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node set memory parameters not implemented" - " on this platform")); - return -1; -#endif -} - -#ifdef __linux__ -static int -virHostMemGetParameterValue(const char *field, - void *value) -{ - char *path = NULL; - char *buf = NULL; - char *tmp = NULL; - int ret = -1; - int rc = -1; - - if (virAsprintf(&path, "%s/%s", - SYSFS_MEMORY_SHARED_PATH, field) < 0) - goto cleanup; - - if (!virFileExists(path)) { - ret = -2; - goto cleanup; - } - - if (virFileReadAll(path, 1024, &buf) < 0) - goto cleanup; - - if ((tmp = strchr(buf, '\n'))) - *tmp = '\0'; - - if (STREQ(field, "pages_to_scan") || - STREQ(field, "sleep_millisecs") || - STREQ(field, "merge_across_nodes")) - rc = virStrToLong_ui(buf, NULL, 10, (unsigned int *)value); - else if (STREQ(field, "pages_shared") || - STREQ(field, "pages_sharing") || - STREQ(field, "pages_unshared") || - STREQ(field, "pages_volatile") || - STREQ(field, "full_scans")) - rc = virStrToLong_ull(buf, NULL, 10, (unsigned long long *)value); - - if (rc < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed to parse %s"), field); - goto cleanup; - } - - ret = 0; - cleanup: - VIR_FREE(path); - VIR_FREE(buf); - return ret; -} -#endif - -#define NODE_MEMORY_PARAMETERS_NUM 8 -int -virHostMemGetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, - int *nparams ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_TYPED_PARAM_STRING_OKAY, -1); - -#ifdef __linux__ - unsigned int pages_to_scan; - unsigned int sleep_millisecs; - unsigned int merge_across_nodes; - unsigned long long pages_shared; - unsigned long long pages_sharing; - unsigned long long pages_unshared; - unsigned long long pages_volatile; - unsigned long long full_scans = 0; - size_t i; - int ret; - - if ((*nparams) == 0) { - *nparams = NODE_MEMORY_PARAMETERS_NUM; - return 0; - } - - for (i = 0; i < *nparams && i < NODE_MEMORY_PARAMETERS_NUM; i++) { - virTypedParameterPtr param = ¶ms[i]; - - switch (i) { - case 0: - ret = virHostMemGetParameterValue("pages_to_scan", &pages_to_scan); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN, - VIR_TYPED_PARAM_UINT, pages_to_scan) < 0) - return -1; - - break; - - case 1: - ret = virHostMemGetParameterValue("sleep_millisecs", &sleep_millisecs); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS, - VIR_TYPED_PARAM_UINT, sleep_millisecs) < 0) - return -1; - - break; - - case 2: - ret = virHostMemGetParameterValue("pages_shared", &pages_shared); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_SHARED, - VIR_TYPED_PARAM_ULLONG, pages_shared) < 0) - return -1; - - break; - - case 3: - ret = virHostMemGetParameterValue("pages_sharing", &pages_sharing); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_SHARING, - VIR_TYPED_PARAM_ULLONG, pages_sharing) < 0) - return -1; - - break; - - case 4: - ret = virHostMemGetParameterValue("pages_unshared", &pages_unshared); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_UNSHARED, - VIR_TYPED_PARAM_ULLONG, pages_unshared) < 0) - return -1; - - break; - - case 5: - ret = virHostMemGetParameterValue("pages_volatile", &pages_volatile); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_VOLATILE, - VIR_TYPED_PARAM_ULLONG, pages_volatile) < 0) - return -1; - - break; - - case 6: - ret = virHostMemGetParameterValue("full_scans", &full_scans); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_FULL_SCANS, - VIR_TYPED_PARAM_ULLONG, full_scans) < 0) - return -1; - - break; - - case 7: - ret = virHostMemGetParameterValue("merge_across_nodes", &merge_across_nodes); - if (ret == -2) - continue; - else if (ret == -1) - return -1; - - if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_MERGE_ACROSS_NODES, - VIR_TYPED_PARAM_UINT, merge_across_nodes) < 0) - return -1; - - break; - } - } - - return 0; -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node get memory parameters not implemented" - " on this platform")); - return -1; -#endif -} - - static int nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED, virCapsPtr caps ATTRIBUTE_UNUSED) @@ -780,92 +220,6 @@ nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED, return -1; } -static int -virHostMemGetCellsFreeFake(unsigned long long *freeMems, - int startCell, - int maxCells ATTRIBUTE_UNUSED) -{ - double avail = physmem_available(); - - if (startCell != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("start cell %d out of range (0-%d)"), - startCell, 0); - return -1; - } - - freeMems[0] = (unsigned long long)avail; - - if (!freeMems[0]) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Cannot determine free memory")); - return -1; - } - - return 1; -} - -static int -virHostMemGetInfoFake(unsigned long long *mem, - unsigned long long *freeMem) -{ - int ret = -1; - -#if defined(__FreeBSD__) - unsigned long pagesize = getpagesize(); - u_int value; - size_t value_size = sizeof(value); - - if (mem) { - if (sysctlbyname("vm.stats.vm.v_page_count", &value, - &value_size, NULL, 0) < 0) { - virReportSystemError(errno, "%s", - _("sysctl failed for vm.stats.vm.v_page_count")); - goto cleanup; - } - *mem = value * (unsigned long long)pagesize; - } - - if (freeMem) { - if (sysctlbyname("vm.stats.vm.v_free_count", &value, - &value_size, NULL, 0) < 0) { - virReportSystemError(errno, "%s", - _("sysctl failed for vm.stats.vm.v_free_count")); - goto cleanup; - } - - *freeMem = value * (unsigned long long)pagesize; - } - -#else - if (mem) { - double total = physmem_total(); - if (!total) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Cannot determine free memory")); - goto cleanup; - } - - *mem = (unsigned long long) total; - } - - if (freeMem) { - double avail = physmem_available(); - - if (!avail) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Cannot determine free memory")); - goto cleanup; - } - - *freeMem = (unsigned long long) avail; - } -#endif - - ret = 0; - cleanup: - return ret; -} /* returns 1 on success, 0 if the detection failed and -1 on hard error */ static int @@ -1060,167 +414,3 @@ nodeCapsInitNUMA(virCapsPtr caps) VIR_FREE(pageinfo); return ret; } - - -int -virHostMemGetCellsFree(unsigned long long *freeMems, - int startCell, - int maxCells) -{ - unsigned long long mem; - int n, lastCell, numCells; - int ret = -1; - int maxCell; - - if (!virNumaIsAvailable()) - return virHostMemGetCellsFreeFake(freeMems, - startCell, maxCells); - - if ((maxCell = virNumaGetMaxNode()) < 0) - return 0; - - if (startCell > maxCell) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("start cell %d out of range (0-%d)"), - startCell, maxCell); - goto cleanup; - } - lastCell = startCell + maxCells - 1; - if (lastCell > maxCell) - lastCell = maxCell; - - for (numCells = 0, n = startCell; n <= lastCell; n++) { - virNumaGetNodeMemory(n, NULL, &mem); - - freeMems[numCells++] = mem; - } - ret = numCells; - - cleanup: - return ret; -} - -int -virHostMemGetInfo(unsigned long long *mem, - unsigned long long *freeMem) -{ - int max_node; - int n; - - if (mem) - *mem = 0; - - if (freeMem) - *freeMem = 0; - - if (!virNumaIsAvailable()) - return virHostMemGetInfoFake(mem, freeMem); - - if ((max_node = virNumaGetMaxNode()) < 0) - return -1; - - for (n = 0; n <= max_node; n++) { - unsigned long long tmp_mem = 0, tmp_freeMem = 0; - - if (!virNumaNodeIsAvailable(n)) - continue; - - if (virNumaGetNodeMemory(n, &tmp_mem, &tmp_freeMem) < 0) - return -1; - - if (mem) - *mem += tmp_mem; - - if (freeMem) - *freeMem += tmp_freeMem; - } - - return 0; -} - -int -virHostMemGetFreePages(unsigned int npages, - unsigned int *pages, - int startCell, - unsigned int cellCount, - unsigned long long *counts) -{ - int ret = -1; - int cell, lastCell; - size_t i, ncounts = 0; - - if ((lastCell = virNumaGetMaxNode()) < 0) - return 0; - - if (startCell > lastCell) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("start cell %d out of range (0-%d)"), - startCell, lastCell); - goto cleanup; - } - - lastCell = MIN(lastCell, startCell + (int) cellCount - 1); - - for (cell = startCell; cell <= lastCell; cell++) { - for (i = 0; i < npages; i++) { - unsigned int page_size = pages[i]; - unsigned int page_free; - - if (virNumaGetPageInfo(cell, page_size, 0, NULL, &page_free) < 0) - goto cleanup; - - counts[ncounts++] = page_free; - } - } - - if (!ncounts) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("no suitable info found")); - goto cleanup; - } - - ret = ncounts; - cleanup: - return ret; -} - -int -virHostMemAllocPages(unsigned int npages, - unsigned int *pageSizes, - unsigned long long *pageCounts, - int startCell, - unsigned int cellCount, - bool add) -{ - int ret = -1; - int cell, lastCell; - size_t i, ncounts = 0; - - if ((lastCell = virNumaGetMaxNode()) < 0) - return 0; - - if (startCell > lastCell) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("start cell %d out of range (0-%d)"), - startCell, lastCell); - goto cleanup; - } - - lastCell = MIN(lastCell, startCell + (int) cellCount - 1); - - for (cell = startCell; cell <= lastCell; cell++) { - for (i = 0; i < npages; i++) { - unsigned int page_size = pageSizes[i]; - unsigned long long page_count = pageCounts[i]; - - if (virNumaSetPagePoolSize(cell, page_size, page_count, add) < 0) - goto cleanup; - - ncounts++; - } - } - - ret = ncounts; - cleanup: - return ret; -} diff --git a/src/nodeinfo.h b/src/nodeinfo.h index 918fcb5..3c4dc46 100644 --- a/src/nodeinfo.h +++ b/src/nodeinfo.h @@ -29,35 +29,4 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo); int nodeCapsInitNUMA(virCapsPtr caps); -int virHostMemGetStats(int cellNum, - virNodeMemoryStatsPtr params, - int *nparams, - unsigned int flags); -int virHostMemGetCellsFree(unsigned long long *freeMems, - int startCell, - int maxCells); -int virHostMemGetInfo(unsigned long long *mem, - unsigned long long *freeMem); - -int virHostMemGetParameters(virTypedParameterPtr params, - int *nparams, - unsigned int flags); - -int virHostMemSetParameters(virTypedParameterPtr params, - int nparams, - unsigned int flags); - -int virHostMemGetFreePages(unsigned int npages, - unsigned int *pages, - int startCell, - unsigned int cellCount, - unsigned long long *counts); - -int virHostMemAllocPages(unsigned int npages, - unsigned int *pageSizes, - unsigned long long *pageCounts, - int startCell, - unsigned int cellCount, - bool add); - #endif /* __VIR_NODEINFO_H__*/ diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 910ccfe..f3586ce 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -50,6 +50,7 @@ #include "openvz_conf.h" #include "nodeinfo.h" #include "virhostcpu.h" +#include "virhostmem.h" #include "viralloc.h" #include "virfile.h" #include "virtypedparam.h" diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ec04fb7..9860be3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -64,6 +64,7 @@ #include "virbuffer.h" #include "nodeinfo.h" #include "virhostcpu.h" +#include "virhostmem.h" #include "virstats.h" #include "capabilities.h" #include "viralloc.h" diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 4048b11..cea9999 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -47,6 +47,7 @@ #include "virbuffer.h" #include "nodeinfo.h" #include "virhostcpu.h" +#include "virhostmem.h" #include "virstats.h" #include "capabilities.h" #include "viralloc.h" diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c new file mode 100644 index 0000000..6fb383e --- /dev/null +++ b/src/util/virhostmem.c @@ -0,0 +1,865 @@ +/* + * virhostmem.c: helper APIs for host memory info + * + * Copyright (C) 2006-2008, 2010-2015 Red Hat, Inc. + * Copyright (C) 2006 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdint.h> +#include <errno.h> +#include <sys/utsname.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <unistd.h> + +#if defined(__FreeBSD__) || defined(__APPLE__) +# include <sys/time.h> +# include <sys/types.h> +# include <sys/sysctl.h> +# include <sys/resource.h> +#endif + +#include "viralloc.h" +#include "virhostmem.h" +#include "physmem.h" +#include "virerror.h" +#include "count-one-bits.h" +#include "virarch.h" +#include "virfile.h" +#include "virtypedparam.h" +#include "virstring.h" +#include "virnuma.h" +#include "virlog.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("util.hostmem"); + + +#ifdef __FreeBSD__ +# define BSD_MEMORY_STATS_ALL 4 + +static int +virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, + int *nparams) +{ + size_t i, j = 0; + unsigned long pagesize = getpagesize() >> 10; + long bufpages; + size_t bufpages_size = sizeof(bufpages); + struct field_sysctl_map { + const char *field; + const char *sysctl_name; + } sysctl_map[] = { + {VIR_NODE_MEMORY_STATS_TOTAL, "vm.stats.vm.v_page_count"}, + {VIR_NODE_MEMORY_STATS_FREE, "vm.stats.vm.v_free_count"}, + {VIR_NODE_MEMORY_STATS_CACHED, "vm.stats.vm.v_cache_count"}, + {NULL, NULL} + }; + + if ((*nparams) == 0) { + *nparams = BSD_MEMORY_STATS_ALL; + return 0; + } + + if ((*nparams) != BSD_MEMORY_STATS_ALL) { + virReportInvalidArg(nparams, + _("nparams in %s must be %d"), + __FUNCTION__, BSD_MEMORY_STATS_ALL); + return -1; + } + + for (i = 0; sysctl_map[i].field != NULL; i++) { + u_int value; + size_t value_size = sizeof(value); + virNodeMemoryStatsPtr param; + + if (sysctlbyname(sysctl_map[i].sysctl_name, &value, + &value_size, NULL, 0) < 0) { + virReportSystemError(errno, + _("sysctl failed for '%s'"), + sysctl_map[i].sysctl_name); + return -1; + } + + param = ¶ms[j++]; + if (virStrcpyStatic(param->field, sysctl_map[i].field) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Field '%s' too long for destination"), + sysctl_map[i].field); + return -1; + } + param->value = (unsigned long long)value * pagesize; + } + + { + virNodeMemoryStatsPtr param = ¶ms[j++]; + + if (sysctlbyname("vfs.bufspace", &bufpages, &bufpages_size, NULL, 0) < 0) { + virReportSystemError(errno, + _("sysctl failed for '%s'"), + "vfs.bufspace"); + return -1; + } + if (virStrcpyStatic(param->field, VIR_NODE_MEMORY_STATS_BUFFERS) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Field '%s' too long for destination"), + VIR_NODE_MEMORY_STATS_BUFFERS); + return -1; + } + param->value = (unsigned long long)bufpages >> 10; + } + + return 0; +} +#endif /* __FreeBSD__ */ + +#ifdef __linux__ +# define SYSFS_SYSTEM_PATH "/sys/devices/system" +# define MEMINFO_PATH "/proc/meminfo" +# define SYSFS_MEMORY_SHARED_PATH "/sys/kernel/mm/ksm" +# define SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX 8192 + +# define LINUX_NB_MEMORY_STATS_ALL 4 +# define LINUX_NB_MEMORY_STATS_CELL 2 + +static int +virHostMemGetStatsLinux(FILE *meminfo, + int cellNum, + virNodeMemoryStatsPtr params, + int *nparams) +{ + int ret = -1; + size_t i = 0, j = 0, k = 0; + int found = 0; + int nr_param; + char line[1024]; + char meminfo_hdr[VIR_NODE_MEMORY_STATS_FIELD_LENGTH]; + unsigned long val; + struct field_conv { + const char *meminfo_hdr; // meminfo header + const char *field; // MemoryStats field name + } field_conv[] = { + {"MemTotal:", VIR_NODE_MEMORY_STATS_TOTAL}, + {"MemFree:", VIR_NODE_MEMORY_STATS_FREE}, + {"Buffers:", VIR_NODE_MEMORY_STATS_BUFFERS}, + {"Cached:", VIR_NODE_MEMORY_STATS_CACHED}, + {NULL, NULL} + }; + + if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) { + nr_param = LINUX_NB_MEMORY_STATS_ALL; + } else { + nr_param = LINUX_NB_MEMORY_STATS_CELL; + } + + if ((*nparams) == 0) { + /* Current number of memory stats supported by linux */ + *nparams = nr_param; + ret = 0; + goto cleanup; + } + + if ((*nparams) != nr_param) { + virReportInvalidArg(nparams, + _("nparams in %s must be %d"), + __FUNCTION__, nr_param); + goto cleanup; + } + + while (fgets(line, sizeof(line), meminfo) != NULL) { + char *buf = line; + + if (STRPREFIX(buf, "Node ")) { + /* + * /sys/devices/system/node/nodeX/meminfo format is below. + * So, skip prefix "Node XX ". + * + * Node 0 MemTotal: 8386980 kB + * Node 0 MemFree: 5300920 kB + * : + */ + char *p; + + p = buf; + for (i = 0; i < 2; i++) { + p = strchr(p, ' '); + if (p == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("no prefix found")); + goto cleanup; + } + p++; + } + buf = p; + } + + if (sscanf(buf, "%s %lu kB", meminfo_hdr, &val) < 2) + continue; + + for (j = 0; field_conv[j].meminfo_hdr != NULL; j++) { + struct field_conv *convp = &field_conv[j]; + + if (STREQ(meminfo_hdr, convp->meminfo_hdr)) { + virNodeMemoryStatsPtr param = ¶ms[k++]; + + if (virStrcpyStatic(param->field, convp->field) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("Field kernel memory too long for destination")); + goto cleanup; + } + param->value = val; + found++; + break; + } + } + if (found >= nr_param) + break; + } + + if (found == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("no available memory line found")); + goto cleanup; + } + + ret = 0; + + cleanup: + return ret; +} +#endif + + +int +virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, + virNodeMemoryStatsPtr params ATTRIBUTE_UNUSED, + int *nparams ATTRIBUTE_UNUSED, + unsigned int flags) +{ + virCheckFlags(0, -1); + +#ifdef __linux__ + { + int ret; + char *meminfo_path = NULL; + FILE *meminfo; + int max_node; + + if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) { + if (VIR_STRDUP(meminfo_path, MEMINFO_PATH) < 0) + return -1; + } else { + if ((max_node = virNumaGetMaxNode()) < 0) + return -1; + + if (cellNum > max_node) { + virReportInvalidArg(cellNum, + _("cellNum in %s must be less than or equal to %d"), + __FUNCTION__, max_node); + return -1; + } + + if (virAsprintf(&meminfo_path, + SYSFS_SYSTEM_PATH "/node/node%d/meminfo", + cellNum) < 0) + return -1; + } + meminfo = fopen(meminfo_path, "r"); + + if (!meminfo) { + virReportSystemError(errno, + _("cannot open %s"), meminfo_path); + VIR_FREE(meminfo_path); + return -1; + } + ret = virHostMemGetStatsLinux(meminfo, cellNum, params, nparams); + VIR_FORCE_FCLOSE(meminfo); + VIR_FREE(meminfo_path); + + return ret; + } +#elif defined(__FreeBSD__) + return virHostMemGetStatsFreeBSD(params, nparams); +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node memory stats not implemented on this platform")); + return -1; +#endif +} + + +#ifdef __linux__ +static int +virHostMemSetParameterValue(virTypedParameterPtr param) +{ + char *path = NULL; + char *strval = NULL; + int ret = -1; + int rc = -1; + + char *field = strchr(param->field, '_'); + sa_assert(field); + field++; + if (virAsprintf(&path, "%s/%s", + SYSFS_MEMORY_SHARED_PATH, field) < 0) { + ret = -2; + goto cleanup; + } + + if (virAsprintf(&strval, "%u", param->value.ui) == -1) { + ret = -2; + goto cleanup; + } + + if ((rc = virFileWriteStr(path, strval, 0)) < 0) { + virReportSystemError(-rc, _("failed to set %s"), param->field); + goto cleanup; + } + + ret = 0; + cleanup: + VIR_FREE(path); + VIR_FREE(strval); + return ret; +} + +static bool +virHostMemParametersAreAllSupported(virTypedParameterPtr params, + int nparams) +{ + char *path = NULL; + size_t i; + + for (i = 0; i < nparams; i++) { + virTypedParameterPtr param = ¶ms[i]; + + char *field = strchr(param->field, '_'); + sa_assert(field); + field++; + if (virAsprintf(&path, "%s/%s", + SYSFS_MEMORY_SHARED_PATH, field) < 0) + return false; + + if (!virFileExists(path)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("Parameter '%s' is not supported by " + "this kernel"), param->field); + VIR_FREE(path); + return false; + } + + VIR_FREE(path); + } + + return true; +} +#endif + +int +virHostMemSetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, + int nparams ATTRIBUTE_UNUSED, + unsigned int flags) +{ + virCheckFlags(0, -1); + +#ifdef __linux__ + size_t i; + int rc; + + if (virTypedParamsValidate(params, nparams, + VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN, + VIR_TYPED_PARAM_UINT, + VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS, + VIR_TYPED_PARAM_UINT, + VIR_NODE_MEMORY_SHARED_MERGE_ACROSS_NODES, + VIR_TYPED_PARAM_UINT, + NULL) < 0) + return -1; + + if (!virHostMemParametersAreAllSupported(params, nparams)) + return -1; + + for (i = 0; i < nparams; i++) { + rc = virHostMemSetParameterValue(¶ms[i]); + + if (rc < 0) + return -1; + } + + return 0; +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node set memory parameters not implemented" + " on this platform")); + return -1; +#endif +} + +#ifdef __linux__ +static int +virHostMemGetParameterValue(const char *field, + void *value) +{ + char *path = NULL; + char *buf = NULL; + char *tmp = NULL; + int ret = -1; + int rc = -1; + + if (virAsprintf(&path, "%s/%s", + SYSFS_MEMORY_SHARED_PATH, field) < 0) + goto cleanup; + + if (!virFileExists(path)) { + ret = -2; + goto cleanup; + } + + if (virFileReadAll(path, 1024, &buf) < 0) + goto cleanup; + + if ((tmp = strchr(buf, '\n'))) + *tmp = '\0'; + + if (STREQ(field, "pages_to_scan") || + STREQ(field, "sleep_millisecs") || + STREQ(field, "merge_across_nodes")) + rc = virStrToLong_ui(buf, NULL, 10, (unsigned int *)value); + else if (STREQ(field, "pages_shared") || + STREQ(field, "pages_sharing") || + STREQ(field, "pages_unshared") || + STREQ(field, "pages_volatile") || + STREQ(field, "full_scans")) + rc = virStrToLong_ull(buf, NULL, 10, (unsigned long long *)value); + + if (rc < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("failed to parse %s"), field); + goto cleanup; + } + + ret = 0; + cleanup: + VIR_FREE(path); + VIR_FREE(buf); + return ret; +} +#endif + +#define NODE_MEMORY_PARAMETERS_NUM 8 +int +virHostMemGetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, + int *nparams ATTRIBUTE_UNUSED, + unsigned int flags) +{ + virCheckFlags(VIR_TYPED_PARAM_STRING_OKAY, -1); + +#ifdef __linux__ + unsigned int pages_to_scan; + unsigned int sleep_millisecs; + unsigned int merge_across_nodes; + unsigned long long pages_shared; + unsigned long long pages_sharing; + unsigned long long pages_unshared; + unsigned long long pages_volatile; + unsigned long long full_scans = 0; + size_t i; + int ret; + + if ((*nparams) == 0) { + *nparams = NODE_MEMORY_PARAMETERS_NUM; + return 0; + } + + for (i = 0; i < *nparams && i < NODE_MEMORY_PARAMETERS_NUM; i++) { + virTypedParameterPtr param = ¶ms[i]; + + switch (i) { + case 0: + ret = virHostMemGetParameterValue("pages_to_scan", &pages_to_scan); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN, + VIR_TYPED_PARAM_UINT, pages_to_scan) < 0) + return -1; + + break; + + case 1: + ret = virHostMemGetParameterValue("sleep_millisecs", &sleep_millisecs); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS, + VIR_TYPED_PARAM_UINT, sleep_millisecs) < 0) + return -1; + + break; + + case 2: + ret = virHostMemGetParameterValue("pages_shared", &pages_shared); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_SHARED, + VIR_TYPED_PARAM_ULLONG, pages_shared) < 0) + return -1; + + break; + + case 3: + ret = virHostMemGetParameterValue("pages_sharing", &pages_sharing); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_SHARING, + VIR_TYPED_PARAM_ULLONG, pages_sharing) < 0) + return -1; + + break; + + case 4: + ret = virHostMemGetParameterValue("pages_unshared", &pages_unshared); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_UNSHARED, + VIR_TYPED_PARAM_ULLONG, pages_unshared) < 0) + return -1; + + break; + + case 5: + ret = virHostMemGetParameterValue("pages_volatile", &pages_volatile); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_PAGES_VOLATILE, + VIR_TYPED_PARAM_ULLONG, pages_volatile) < 0) + return -1; + + break; + + case 6: + ret = virHostMemGetParameterValue("full_scans", &full_scans); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_FULL_SCANS, + VIR_TYPED_PARAM_ULLONG, full_scans) < 0) + return -1; + + break; + + case 7: + ret = virHostMemGetParameterValue("merge_across_nodes", &merge_across_nodes); + if (ret == -2) + continue; + else if (ret == -1) + return -1; + + if (virTypedParameterAssign(param, VIR_NODE_MEMORY_SHARED_MERGE_ACROSS_NODES, + VIR_TYPED_PARAM_UINT, merge_across_nodes) < 0) + return -1; + + break; + } + } + + return 0; +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node get memory parameters not implemented" + " on this platform")); + return -1; +#endif +} + + +static int +virHostMemGetCellsFreeFake(unsigned long long *freeMems, + int startCell, + int maxCells ATTRIBUTE_UNUSED) +{ + double avail = physmem_available(); + + if (startCell != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("start cell %d out of range (0-%d)"), + startCell, 0); + return -1; + } + + freeMems[0] = (unsigned long long)avail; + + if (!freeMems[0]) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot determine free memory")); + return -1; + } + + return 1; +} + +static int +virHostMemGetInfoFake(unsigned long long *mem, + unsigned long long *freeMem) +{ + int ret = -1; + +#if defined(__FreeBSD__) + unsigned long pagesize = getpagesize(); + u_int value; + size_t value_size = sizeof(value); + + if (mem) { + if (sysctlbyname("vm.stats.vm.v_page_count", &value, + &value_size, NULL, 0) < 0) { + virReportSystemError(errno, "%s", + _("sysctl failed for vm.stats.vm.v_page_count")); + goto cleanup; + } + *mem = value * (unsigned long long)pagesize; + } + + if (freeMem) { + if (sysctlbyname("vm.stats.vm.v_free_count", &value, + &value_size, NULL, 0) < 0) { + virReportSystemError(errno, "%s", + _("sysctl failed for vm.stats.vm.v_free_count")); + goto cleanup; + } + + *freeMem = value * (unsigned long long)pagesize; + } + +#else + if (mem) { + double total = physmem_total(); + if (!total) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot determine free memory")); + goto cleanup; + } + + *mem = (unsigned long long) total; + } + + if (freeMem) { + double avail = physmem_available(); + + if (!avail) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot determine free memory")); + goto cleanup; + } + + *freeMem = (unsigned long long) avail; + } +#endif + + ret = 0; + cleanup: + return ret; +} + + +int +virHostMemGetCellsFree(unsigned long long *freeMems, + int startCell, + int maxCells) +{ + unsigned long long mem; + int n, lastCell, numCells; + int ret = -1; + int maxCell; + + if (!virNumaIsAvailable()) + return virHostMemGetCellsFreeFake(freeMems, + startCell, maxCells); + + if ((maxCell = virNumaGetMaxNode()) < 0) + return 0; + + if (startCell > maxCell) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("start cell %d out of range (0-%d)"), + startCell, maxCell); + goto cleanup; + } + lastCell = startCell + maxCells - 1; + if (lastCell > maxCell) + lastCell = maxCell; + + for (numCells = 0, n = startCell; n <= lastCell; n++) { + virNumaGetNodeMemory(n, NULL, &mem); + + freeMems[numCells++] = mem; + } + ret = numCells; + + cleanup: + return ret; +} + +int +virHostMemGetInfo(unsigned long long *mem, + unsigned long long *freeMem) +{ + int max_node; + int n; + + if (mem) + *mem = 0; + + if (freeMem) + *freeMem = 0; + + if (!virNumaIsAvailable()) + return virHostMemGetInfoFake(mem, freeMem); + + if ((max_node = virNumaGetMaxNode()) < 0) + return -1; + + for (n = 0; n <= max_node; n++) { + unsigned long long tmp_mem = 0, tmp_freeMem = 0; + + if (!virNumaNodeIsAvailable(n)) + continue; + + if (virNumaGetNodeMemory(n, &tmp_mem, &tmp_freeMem) < 0) + return -1; + + if (mem) + *mem += tmp_mem; + + if (freeMem) + *freeMem += tmp_freeMem; + } + + return 0; +} + +int +virHostMemGetFreePages(unsigned int npages, + unsigned int *pages, + int startCell, + unsigned int cellCount, + unsigned long long *counts) +{ + int ret = -1; + int cell, lastCell; + size_t i, ncounts = 0; + + if ((lastCell = virNumaGetMaxNode()) < 0) + return 0; + + if (startCell > lastCell) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("start cell %d out of range (0-%d)"), + startCell, lastCell); + goto cleanup; + } + + lastCell = MIN(lastCell, startCell + (int) cellCount - 1); + + for (cell = startCell; cell <= lastCell; cell++) { + for (i = 0; i < npages; i++) { + unsigned int page_size = pages[i]; + unsigned int page_free; + + if (virNumaGetPageInfo(cell, page_size, 0, NULL, &page_free) < 0) + goto cleanup; + + counts[ncounts++] = page_free; + } + } + + if (!ncounts) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("no suitable info found")); + goto cleanup; + } + + ret = ncounts; + cleanup: + return ret; +} + +int +virHostMemAllocPages(unsigned int npages, + unsigned int *pageSizes, + unsigned long long *pageCounts, + int startCell, + unsigned int cellCount, + bool add) +{ + int ret = -1; + int cell, lastCell; + size_t i, ncounts = 0; + + if ((lastCell = virNumaGetMaxNode()) < 0) + return 0; + + if (startCell > lastCell) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("start cell %d out of range (0-%d)"), + startCell, lastCell); + goto cleanup; + } + + lastCell = MIN(lastCell, startCell + (int) cellCount - 1); + + for (cell = startCell; cell <= lastCell; cell++) { + for (i = 0; i < npages; i++) { + unsigned int page_size = pageSizes[i]; + unsigned long long page_count = pageCounts[i]; + + if (virNumaSetPagePoolSize(cell, page_size, page_count, add) < 0) + goto cleanup; + + ncounts++; + } + } + + ret = ncounts; + cleanup: + return ret; +} diff --git a/src/util/virhostmem.h b/src/util/virhostmem.h new file mode 100644 index 0000000..4008521 --- /dev/null +++ b/src/util/virhostmem.h @@ -0,0 +1,60 @@ +/* + * virhostmem.h: helper APIs for host memory info + * + * Copyright (C) 2006-2016 Red Hat, Inc. + * Copyright (C) 2006 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#ifndef __VIR_HOSTMEM_H__ +# define __VIR_HOSTMEM_H__ + +# include "internal.h" + +int virHostMemGetStats(int cellNum, + virNodeMemoryStatsPtr params, + int *nparams, + unsigned int flags); +int virHostMemGetCellsFree(unsigned long long *freeMems, + int startCell, + int maxCells); +int virHostMemGetInfo(unsigned long long *mem, + unsigned long long *freeMem); + +int virHostMemGetParameters(virTypedParameterPtr params, + int *nparams, + unsigned int flags); + +int virHostMemSetParameters(virTypedParameterPtr params, + int nparams, + unsigned int flags); + +int virHostMemGetFreePages(unsigned int npages, + unsigned int *pages, + int startCell, + unsigned int cellCount, + unsigned long long *counts); + +int virHostMemAllocPages(unsigned int npages, + unsigned int *pageSizes, + unsigned long long *pageCounts, + int startCell, + unsigned int cellCount, + bool add); + +#endif /* __VIR_HOSTMEM_H__*/ diff --git a/src/util/virnuma.c b/src/util/virnuma.c index 1e78eb6..23064ff 100644 --- a/src/util/virnuma.c +++ b/src/util/virnuma.c @@ -45,7 +45,7 @@ #include "virbitmap.h" #include "virstring.h" #include "virfile.h" -#include "nodeinfo.h" +#include "virhostmem.h" #define VIR_FROM_THIS VIR_FROM_NONE diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 603a071..a00977e 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -30,6 +30,7 @@ #include "virlog.h" #include "viralloc.h" #include "nodeinfo.h" +#include "virhostmem.h" #include "virstring.h" #include "virfile.h" #include "virtime.h" diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 2196666..a218392 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -65,6 +65,7 @@ #include "vircommand.h" #include "virnodesuspend.h" #include "nodeinfo.h" +#include "virhostmem.h" #include "configmake.h" #include "virstring.h" #include "viraccessapicheck.h" -- 2.5.5

$SUJB: "...virhostmem file" On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
--- po/POTFILES.in | 1 + src/Makefile.am | 1 + src/lxc/lxc_driver.c | 1 + src/nodeinfo.c | 812 +----------------------------------------- src/nodeinfo.h | 31 -- src/openvz/openvz_driver.c | 1 + src/qemu/qemu_driver.c | 1 + src/uml/uml_driver.c | 1 + src/util/virhostmem.c | 865 +++++++++++++++++++++++++++++++++++++++++++++ src/util/virhostmem.h | 60 ++++ src/util/virnuma.c | 2 +- src/vbox/vbox_common.c | 1 + src/xen/xen_driver.c | 1 + 13 files changed, 935 insertions(+), 843 deletions(-) create mode 100644 src/util/virhostmem.c create mode 100644 src/util/virhostmem.h
Similar to 6/17 - couldn't git am -3 this one, but it looks like things were moved properly and I have to assume it compiles and passes check, syntax-check... ACK John (I'll look through the rest tomorrow)

Add a virGetUserShell wrapper around virGetUserEnt, that returns the shell field. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_private.syms | 1 + src/util/virutil.c | 51 ++++++++++++++++++++++++++++++++++++++++-------- src/util/virutil.h | 1 + 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 22b81ae..f88dd02 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2460,6 +2460,7 @@ virGetUserDirectoryByUID; virGetUserID; virGetUserName; virGetUserRuntimeDirectory; +virGetUserShell; virHexToBin; virIndexToDiskName; virIsCapableFCHost; diff --git a/src/util/virutil.c b/src/util/virutil.c index 8205150..d151c1c 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -750,7 +750,7 @@ virGetUserDirectory(void) /* Look up fields from the user database for the given user. On * error, set errno, report the error, and return -1. */ static int -virGetUserEnt(uid_t uid, char **name, gid_t *group, char **dir) +virGetUserEnt(uid_t uid, char **name, gid_t *group, char **dir, char **shell) { char *strbuf; struct passwd pwbuf; @@ -764,6 +764,8 @@ virGetUserEnt(uid_t uid, char **name, gid_t *group, char **dir) *name = NULL; if (dir) *dir = NULL; + if (shell) + *shell = NULL; /* sysconf is a hint; if it fails, fall back to a reasonable size */ if (val < 0) @@ -799,14 +801,21 @@ virGetUserEnt(uid_t uid, char **name, gid_t *group, char **dir) goto cleanup; if (group) *group = pw->pw_gid; - if (dir && VIR_STRDUP(*dir, pw->pw_dir) < 0) { - if (name) - VIR_FREE(*name); + if (dir && VIR_STRDUP(*dir, pw->pw_dir) < 0) + goto cleanup; + if (shell && VIR_STRDUP(*shell, pw->pw_shell) < 0) goto cleanup; - } ret = 0; cleanup: + if (ret < 0) { + if (name) + VIR_FREE(*name); + if (dir) + VIR_FREE(*dir); + if (shell) + VIR_FREE(*shell); + } VIR_FREE(strbuf); return ret; } @@ -866,7 +875,15 @@ char * virGetUserDirectoryByUID(uid_t uid) { char *ret; - virGetUserEnt(uid, NULL, NULL, &ret); + virGetUserEnt(uid, NULL, NULL, &ret, NULL); + return ret; +} + + +char *virGetUserShell(uid_t uid) +{ + char *ret; + virGetUserEnt(uid, NULL, NULL, NULL, &ret); return ret; } @@ -916,7 +933,7 @@ char *virGetUserRuntimeDirectory(void) char *virGetUserName(uid_t uid) { char *ret; - virGetUserEnt(uid, &ret, NULL, NULL); + virGetUserEnt(uid, &ret, NULL, NULL, NULL); return ret; } @@ -1102,7 +1119,7 @@ virGetGroupList(uid_t uid, gid_t gid, gid_t **list) if (uid == (uid_t)-1) return 0; - if (virGetUserEnt(uid, &user, &primary, NULL) < 0) + if (virGetUserEnt(uid, &user, &primary, NULL, NULL) < 0) return -1; ret = mgetgroups(user, primary, list); @@ -1277,6 +1294,15 @@ virGetUserDirectoryByUID(uid_t uid ATTRIBUTE_UNUSED) } char * +virGetUserShell(uid_t uid ATTRIBUTE_UNUSED) +{ + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("virGetUserShell is not available")); + + return NULL; +} + +char * virGetUserConfigDirectory(void) { char *ret; @@ -1323,6 +1349,15 @@ virGetUserDirectoryByUID(uid_t uid ATTRIBUTE_UNUSED) } char * +virGetUserShell(uid_t uid ATTRIBUTE_UNUSED) +{ + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("virGetUserShell is not available")); + + return NULL; +} + +char * virGetUserConfigDirectory(void) { virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/util/virutil.h b/src/util/virutil.h index 1e51a25..703ec53 100644 --- a/src/util/virutil.h +++ b/src/util/virutil.h @@ -139,6 +139,7 @@ char *virGetUserDirectoryByUID(uid_t uid); char *virGetUserConfigDirectory(void); char *virGetUserCacheDirectory(void); char *virGetUserRuntimeDirectory(void); +char *virGetUserShell(uid_t uid); char *virGetUserName(uid_t uid); char *virGetGroupName(gid_t gid); int virGetGroupList(uid_t uid, gid_t group, gid_t **groups) -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Add a virGetUserShell wrapper around virGetUserEnt, that returns the shell field.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/libvirt_private.syms | 1 + src/util/virutil.c | 51 ++++++++++++++++++++++++++++++++++++++++-------- src/util/virutil.h | 1 + 3 files changed, 45 insertions(+), 8 deletions(-)
The only question I have is should there be a virGetUserShellByUID similar to GetUserDirectory and GetUserDirectoryByUID? Although it seems like it would be overkill. ACK - John

Add the virDomainLxcEnterCGroup API to the libvirt-lxc.so file. This method moves the calling process into the cgroups associated with the container. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- include/libvirt/libvirt-lxc.h | 2 ++ src/libvirt-lxc.c | 47 +++++++++++++++++++++++++++++++++++++++++++ src/libvirt_lxc.syms | 5 +++++ 3 files changed, 54 insertions(+) diff --git a/include/libvirt/libvirt-lxc.h b/include/libvirt/libvirt-lxc.h index 1901fce..0d16a5c 100644 --- a/include/libvirt/libvirt-lxc.h +++ b/include/libvirt/libvirt-lxc.h @@ -46,6 +46,8 @@ int virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virSecurityLabelPtr label, virSecurityLabelPtr oldlabel, unsigned int flags); +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags); # ifdef __cplusplus } diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c index 8553570..16e08e9 100644 --- a/src/libvirt-lxc.c +++ b/src/libvirt-lxc.c @@ -36,6 +36,7 @@ #ifdef WITH_APPARMOR # include <sys/apparmor.h> #endif +#include "vircgroup.h" #define VIR_FROM_THIS VIR_FROM_NONE @@ -269,3 +270,49 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virDispatchError(NULL); return -1; } + + +/** + * virDomainLxcEnterCGroup: + * @domain: a domain object + * @flags: currently unused, pass 0 + * + * This API is LXC specific, so it will only work with hypervisor + * connections to the LXC driver. + * + * Attaches the process to the control cgroups associated + * with the container @domain. + * + * Returns 0 on success, -1 on error + */ +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags) +{ + virConnectPtr conn; + virCgroupPtr cgroup = NULL; + + VIR_DOMAIN_DEBUG(domain, "flags=%x", flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn = domain->conn; + + virCheckReadOnlyGoto(conn->flags, error); + virCheckFlagsGoto(0, error); + + if (virCgroupNewDetect(domain->id, -1, &cgroup) < 0) + goto error; + + if (virCgroupAddTask(cgroup, getpid()) < 0) + goto error; + + virCgroupFree(&cgroup); + + return 0; + + error: + virDispatchError(NULL); + virCgroupFree(&cgroup); + return -1; +} diff --git a/src/libvirt_lxc.syms b/src/libvirt_lxc.syms index ccf1be9..061152a 100644 --- a/src/libvirt_lxc.syms +++ b/src/libvirt_lxc.syms @@ -20,3 +20,8 @@ LIBVIRT_LXC_1.0.4 { global: virDomainLxcEnterSecurityLabel; } LIBVIRT_LXC_1.0.2; + +LIBVIRT_LXC_1.3.4 { + global: + virDomainLxcEnterCGroup; +} LIBVIRT_LXC_1.0.4; -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Add the virDomainLxcEnterCGroup API to the libvirt-lxc.so file. This method moves the calling process into the cgroups associated with the container.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- include/libvirt/libvirt-lxc.h | 2 ++ src/libvirt-lxc.c | 47 +++++++++++++++++++++++++++++++++++++++++++ src/libvirt_lxc.syms | 5 +++++ 3 files changed, 54 insertions(+)
diff --git a/include/libvirt/libvirt-lxc.h b/include/libvirt/libvirt-lxc.h index 1901fce..0d16a5c 100644 --- a/include/libvirt/libvirt-lxc.h +++ b/include/libvirt/libvirt-lxc.h @@ -46,6 +46,8 @@ int virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virSecurityLabelPtr label, virSecurityLabelPtr oldlabel, unsigned int flags); +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags);
# ifdef __cplusplus } diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c index 8553570..16e08e9 100644 --- a/src/libvirt-lxc.c +++ b/src/libvirt-lxc.c @@ -36,6 +36,7 @@ #ifdef WITH_APPARMOR # include <sys/apparmor.h> #endif +#include "vircgroup.h"
#define VIR_FROM_THIS VIR_FROM_NONE
@@ -269,3 +270,49 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virDispatchError(NULL); return -1; } + + +/** + * virDomainLxcEnterCGroup: + * @domain: a domain object + * @flags: currently unused, pass 0 + * + * This API is LXC specific, so it will only work with hypervisor + * connections to the LXC driver. + * + * Attaches the process to the control cgroups associated + * with the container @domain. + * + * Returns 0 on success, -1 on error + */ +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags) +{ + virConnectPtr conn; + virCgroupPtr cgroup = NULL; + + VIR_DOMAIN_DEBUG(domain, "flags=%x", flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn = domain->conn; + + virCheckReadOnlyGoto(conn->flags, error); + virCheckFlagsGoto(0, error); + + if (virCgroupNewDetect(domain->id, -1, &cgroup) < 0)
virCgroupNewDetect takes a pid as parameter 1 ACK with that (your call on 1.3.4 or wait for 1.3.5 in which case the next file would need adjustment) John
+ goto error; + + if (virCgroupAddTask(cgroup, getpid()) < 0) + goto error; + + virCgroupFree(&cgroup); + + return 0; + + error: + virDispatchError(NULL); + virCgroupFree(&cgroup); + return -1; +} diff --git a/src/libvirt_lxc.syms b/src/libvirt_lxc.syms index ccf1be9..061152a 100644 --- a/src/libvirt_lxc.syms +++ b/src/libvirt_lxc.syms @@ -20,3 +20,8 @@ LIBVIRT_LXC_1.0.4 { global: virDomainLxcEnterSecurityLabel; } LIBVIRT_LXC_1.0.2; + +LIBVIRT_LXC_1.3.4 { + global: + virDomainLxcEnterCGroup; +} LIBVIRT_LXC_1.0.4;

On Wed, Apr 27, 2016 at 01:48:00PM -0400, John Ferlan wrote:
On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Add the virDomainLxcEnterCGroup API to the libvirt-lxc.so file. This method moves the calling process into the cgroups associated with the container.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- include/libvirt/libvirt-lxc.h | 2 ++ src/libvirt-lxc.c | 47 +++++++++++++++++++++++++++++++++++++++++++ src/libvirt_lxc.syms | 5 +++++ 3 files changed, 54 insertions(+)
diff --git a/include/libvirt/libvirt-lxc.h b/include/libvirt/libvirt-lxc.h index 1901fce..0d16a5c 100644 --- a/include/libvirt/libvirt-lxc.h +++ b/include/libvirt/libvirt-lxc.h @@ -46,6 +46,8 @@ int virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virSecurityLabelPtr label, virSecurityLabelPtr oldlabel, unsigned int flags); +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags);
# ifdef __cplusplus } diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c index 8553570..16e08e9 100644 --- a/src/libvirt-lxc.c +++ b/src/libvirt-lxc.c @@ -36,6 +36,7 @@ #ifdef WITH_APPARMOR # include <sys/apparmor.h> #endif +#include "vircgroup.h"
#define VIR_FROM_THIS VIR_FROM_NONE
@@ -269,3 +270,49 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model, virDispatchError(NULL); return -1; } + + +/** + * virDomainLxcEnterCGroup: + * @domain: a domain object + * @flags: currently unused, pass 0 + * + * This API is LXC specific, so it will only work with hypervisor + * connections to the LXC driver. + * + * Attaches the process to the control cgroups associated + * with the container @domain. + * + * Returns 0 on success, -1 on error + */ +int virDomainLxcEnterCGroup(virDomainPtr domain, + unsigned int flags) +{ + virConnectPtr conn; + virCgroupPtr cgroup = NULL; + + VIR_DOMAIN_DEBUG(domain, "flags=%x", flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn = domain->conn; + + virCheckReadOnlyGoto(conn->flags, error); + virCheckFlagsGoto(0, error); + + if (virCgroupNewDetect(domain->id, -1, &cgroup) < 0)
virCgroupNewDetect takes a pid as parameter 1
The domain->id is the pid of the libvirt_lxc process when using LXC Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Extend the lxc-enter-namespace command so that it joins the containers' cgroups before starting new namespaces. This ensures that the commands run have the normal resource limits applied Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virsh-domain.c | 3 +++ tools/virsh.pod | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 6d4265c..716db84 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -9328,6 +9328,9 @@ cmdLxcEnterNamespace(vshControl *ctl, const vshCmd *cmd) 0) < 0) _exit(EXIT_CANCELED); + if (virDomainLxcEnterCGroup(dom, 0) < 0) + _exit(EXIT_CANCELED); + if (virDomainLxcEnterNamespace(dom, nfdlist, fdlist, diff --git a/tools/virsh.pod b/tools/virsh.pod index d2cc5b2..a38b33f 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -4175,9 +4175,10 @@ omitted. Enter the namespace of I<domain> and execute the command C</path/to/binary> passing the requested args. The binary path is relative to the container root filesystem, not the host root filesystem. The binary will inherit the -environment variables / console visible to virsh. This command only works -when connected to the LXC hypervisor driver. This command succeeds only -if C</path/to/binary> has 0 exit status. +environment variables / console visible to virsh. The command will be run +with the same sVirt context and cgroups placement as processes within the +container. This command only works when connected to the LXC hypervisor +driver. This command succeeds only if C</path/to/binary> has 0 exit status. =back -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Extend the lxc-enter-namespace command so that it joins the containers' cgroups before starting new namespaces. This ensures that the commands run have the normal resource limits applied
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virsh-domain.c | 3 +++ tools/virsh.pod | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-)
ACK John

The virt-login-shell program is supposed to look like a regular shell to clients. Login services like sshd expect the shell to accept a '-c cmdstring' argument to specify a command to launch instead of presenting an interactive prompt. We can implement this by simply passing the '-c cmdstring' data straight through to the real shell we use. This does not open any security holes, since the command is not run until we're inside the container namespaces. This allows scp to work for users with virt-login-shell. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 70 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index ec759dc..34a8836 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -100,20 +100,19 @@ static int virLoginShellAllowedUser(virConfPtr conf, return ret; } -static char **virLoginShellGetShellArgv(virConfPtr conf) +static int virLoginShellGetShellArgv(virConfPtr conf, + char ***retshargv, + size_t *retshargvlen) { size_t i; + size_t len; char **shargv = NULL; - virConfValuePtr p; + virConfValuePtr p, pp; p = virConfGetValue(conf, "shell"); - if (!p) - return virStringSplit("/bin/sh -l", " ", 3); - - if (p->type == VIR_CONF_LIST) { - size_t len; - virConfValuePtr pp; - + if (!p) { + len = 2; /* /bin/sh -l */ + } else if (p->type == VIR_CONF_LIST) { /* Calc length and check items */ for (len = 0, pp = p->list; pp; len++, pp = pp->next) { if (pp->type != VIR_CONF_STRING) { @@ -122,18 +121,41 @@ static char **virLoginShellGetShellArgv(virConfPtr conf) goto error; } } + } else { + virReportSystemError(EINVAL, "%s", + _("shell must be a list of strings")); + goto error; + } - if (VIR_ALLOC_N(shargv, len + 1) < 0) + len++; /* NULL terminator */ + + if (VIR_ALLOC_N(shargv, len) < 0) + goto error; + + i = 0; + if (!p) { + if (VIR_STRDUP(shargv[i++], "/bin/sh") < 0) goto error; - for (i = 0, pp = p->list; pp; i++, pp = pp->next) { - if (VIR_STRDUP(shargv[i], pp->str) < 0) + if (VIR_STRDUP(shargv[i++], "-l") < 0) + goto error; + } else if (p->type == VIR_CONF_LIST) { + for (pp = p->list; pp; pp = pp->next) { + if (VIR_STRDUP(shargv[i++], pp->str) < 0) goto error; } } - return shargv; + + shargv[i] = NULL; + + *retshargvlen = i; + *retshargv = shargv; + + return 0; error: + *retshargv = NULL; + *retshargvlen = 0; virStringFreeList(shargv); - return NULL; + return -1; } static char *progname; @@ -177,6 +199,7 @@ main(int argc, char **argv) gid_t gid = getgid(); char *name = NULL; char **shargv = NULL; + size_t shargvlen = 0; virSecurityModelPtr secmodel = NULL; virSecurityLabelPtr seclabel = NULL; virDomainPtr dom = NULL; @@ -190,6 +213,7 @@ main(int argc, char **argv) int *fdlist = NULL; int openmax; size_t i; + const char *cmdstr = NULL; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -220,7 +244,7 @@ main(int argc, char **argv) return ret; } - while ((arg = getopt_long(argc, argv, "hV", opt, &longindex)) != -1) { + while ((arg = getopt_long(argc, argv, "hVc:", opt, &longindex)) != -1) { switch (arg) { case 'h': usage(); @@ -230,6 +254,10 @@ main(int argc, char **argv) show_version(); exit(EXIT_SUCCESS); + case 'c': + cmdstr = optarg; + break; + case '?': default: usage(); @@ -265,7 +293,7 @@ main(int argc, char **argv) if (virLoginShellAllowedUser(conf, name, groups) < 0) goto cleanup; - if (!(shargv = virLoginShellGetShellArgv(conf))) + if (virLoginShellGetShellArgv(conf, &shargv, &shargvlen) < 0) goto cleanup; conn = virConnectOpen("lxc:///"); @@ -318,6 +346,16 @@ main(int argc, char **argv) goto cleanup; } + if (cmdstr) { + if (VIR_REALLOC_N(shargv, shargvlen + 3) < 0) + goto cleanup; + if (VIR_STRDUP(shargv[shargvlen++], "-c") < 0) + goto cleanup; + if (VIR_STRDUP(shargv[shargvlen++], cmdstr) < 0) + goto cleanup; + shargv[shargvlen] = NULL; + } + /* A fork is required to create new process in correct pid namespace. */ if ((cpid = virFork()) < 0) goto cleanup; -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The virt-login-shell program is supposed to look like a regular shell to clients. Login services like sshd expect the shell to accept a '-c cmdstring' argument to specify a command to launch instead of presenting an interactive prompt.
We can implement this by simply passing the '-c cmdstring' data straight through to the real shell we use. This does not open any security holes, since the command is not run until we're inside the container namespaces. This allows scp to work for users with virt-login-shell.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 70 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 16 deletions(-)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index ec759dc..34a8836 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -100,20 +100,19 @@ static int virLoginShellAllowedUser(virConfPtr conf, return ret; }
-static char **virLoginShellGetShellArgv(virConfPtr conf) +static int virLoginShellGetShellArgv(virConfPtr conf, + char ***retshargv, + size_t *retshargvlen) { size_t i; + size_t len; char **shargv = NULL; - virConfValuePtr p; + virConfValuePtr p, pp;
p = virConfGetValue(conf, "shell"); - if (!p) - return virStringSplit("/bin/sh -l", " ", 3); - - if (p->type == VIR_CONF_LIST) { - size_t len; - virConfValuePtr pp; - + if (!p) { + len = 2; /* /bin/sh -l */ + } else if (p->type == VIR_CONF_LIST) { /* Calc length and check items */ for (len = 0, pp = p->list; pp; len++, pp = pp->next) { if (pp->type != VIR_CONF_STRING) { @@ -122,18 +121,41 @@ static char **virLoginShellGetShellArgv(virConfPtr conf) goto error; } } + } else { + virReportSystemError(EINVAL, "%s", + _("shell must be a list of strings")); + goto error; + }
- if (VIR_ALLOC_N(shargv, len + 1) < 0) + len++; /* NULL terminator */ + + if (VIR_ALLOC_N(shargv, len) < 0) + goto error; + + i = 0; + if (!p) { + if (VIR_STRDUP(shargv[i++], "/bin/sh") < 0) goto error; - for (i = 0, pp = p->list; pp; i++, pp = pp->next) { - if (VIR_STRDUP(shargv[i], pp->str) < 0) + if (VIR_STRDUP(shargv[i++], "-l") < 0) + goto error; + } else if (p->type == VIR_CONF_LIST) { + for (pp = p->list; pp; pp = pp->next) { + if (VIR_STRDUP(shargv[i++], pp->str) < 0) goto error; } } - return shargv; + + shargv[i] = NULL; + + *retshargvlen = i; + *retshargv = shargv; + + return 0; error: + *retshargv = NULL; + *retshargvlen = 0; virStringFreeList(shargv); - return NULL; + return -1; }
static char *progname;
Right in here somewhere there's some 'usage()' that should probably be updated.
@@ -177,6 +199,7 @@ main(int argc, char **argv) gid_t gid = getgid(); char *name = NULL; char **shargv = NULL; + size_t shargvlen = 0; virSecurityModelPtr secmodel = NULL; virSecurityLabelPtr seclabel = NULL; virDomainPtr dom = NULL; @@ -190,6 +213,7 @@ main(int argc, char **argv) int *fdlist = NULL; int openmax; size_t i; + const char *cmdstr = NULL;
struct option opt[] = { {"help", no_argument, NULL, 'h'},
Should this add a "-c" w/ required_argument? I also see the "V" lists "optional_argument", but that's not part of the "hV" below, so shouldn't it be no_argument? ACK with the changes - John
@@ -220,7 +244,7 @@ main(int argc, char **argv) return ret; }
- while ((arg = getopt_long(argc, argv, "hV", opt, &longindex)) != -1) { + while ((arg = getopt_long(argc, argv, "hVc:", opt, &longindex)) != -1) { switch (arg) { case 'h': usage(); @@ -230,6 +254,10 @@ main(int argc, char **argv) show_version(); exit(EXIT_SUCCESS);
+ case 'c': + cmdstr = optarg; + break; + case '?': default: usage(); @@ -265,7 +293,7 @@ main(int argc, char **argv) if (virLoginShellAllowedUser(conf, name, groups) < 0) goto cleanup;
- if (!(shargv = virLoginShellGetShellArgv(conf))) + if (virLoginShellGetShellArgv(conf, &shargv, &shargvlen) < 0) goto cleanup;
conn = virConnectOpen("lxc:///"); @@ -318,6 +346,16 @@ main(int argc, char **argv) goto cleanup; }
+ if (cmdstr) { + if (VIR_REALLOC_N(shargv, shargvlen + 3) < 0) + goto cleanup; + if (VIR_STRDUP(shargv[shargvlen++], "-c") < 0) + goto cleanup; + if (VIR_STRDUP(shargv[shargvlen++], cmdstr) < 0) + goto cleanup; + shargv[shargvlen] = NULL; + } + /* A fork is required to create new process in correct pid namespace. */ if ((cpid = virFork()) < 0) goto cleanup;

On Wed, Apr 27, 2016 at 02:28:33PM -0400, John Ferlan wrote:
On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The virt-login-shell program is supposed to look like a regular shell to clients. Login services like sshd expect the shell to accept a '-c cmdstring' argument to specify a command to launch instead of presenting an interactive prompt.
We can implement this by simply passing the '-c cmdstring' data straight through to the real shell we use. This does not open any security holes, since the command is not run until we're inside the container namespaces. This allows scp to work for users with virt-login-shell.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 70 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 16 deletions(-)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index ec759dc..34a8836 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -100,20 +100,19 @@ static int virLoginShellAllowedUser(virConfPtr conf, return ret; }
-static char **virLoginShellGetShellArgv(virConfPtr conf) +static int virLoginShellGetShellArgv(virConfPtr conf, + char ***retshargv, + size_t *retshargvlen) { size_t i; + size_t len; char **shargv = NULL; - virConfValuePtr p; + virConfValuePtr p, pp;
p = virConfGetValue(conf, "shell"); - if (!p) - return virStringSplit("/bin/sh -l", " ", 3); - - if (p->type == VIR_CONF_LIST) { - size_t len; - virConfValuePtr pp; - + if (!p) { + len = 2; /* /bin/sh -l */ + } else if (p->type == VIR_CONF_LIST) { /* Calc length and check items */ for (len = 0, pp = p->list; pp; len++, pp = pp->next) { if (pp->type != VIR_CONF_STRING) { @@ -122,18 +121,41 @@ static char **virLoginShellGetShellArgv(virConfPtr conf) goto error; } } + } else { + virReportSystemError(EINVAL, "%s", + _("shell must be a list of strings")); + goto error; + }
- if (VIR_ALLOC_N(shargv, len + 1) < 0) + len++; /* NULL terminator */ + + if (VIR_ALLOC_N(shargv, len) < 0) + goto error; + + i = 0; + if (!p) { + if (VIR_STRDUP(shargv[i++], "/bin/sh") < 0) goto error; - for (i = 0, pp = p->list; pp; i++, pp = pp->next) { - if (VIR_STRDUP(shargv[i], pp->str) < 0) + if (VIR_STRDUP(shargv[i++], "-l") < 0) + goto error; + } else if (p->type == VIR_CONF_LIST) { + for (pp = p->list; pp; pp = pp->next) { + if (VIR_STRDUP(shargv[i++], pp->str) < 0) goto error; } } - return shargv; + + shargv[i] = NULL; + + *retshargvlen = i; + *retshargv = shargv; + + return 0; error: + *retshargv = NULL; + *retshargvlen = 0; virStringFreeList(shargv); - return NULL; + return -1; }
static char *progname;
Right in here somewhere there's some 'usage()' that should probably be updated.
Yep.
struct option opt[] = { {"help", no_argument, NULL, 'h'},
Should this add a "-c" w/ required_argument?
I also see the "V" lists "optional_argument", but that's not part of the "hV" below, so shouldn't it be no_argument?
The struct option entry is only required if we need to support a --long argument alternative. These two only need short args so are omitted here.
ACK with the changes -
Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Currently we request a login shell by passing the -l argument to the shell. This is either hardcoded, or required to be specified by the user in the virt-login-shell.conf file. The standard way for login programs to request a shell run as a login shell is to modify the argv passed to execve() so that argv[0] contains the relative shell filename prefixed with a zero. eg instead of doing const char **shellargs = ["/bin/bash", "-l", NULL]; execve(shellargs[0], shellargs, env); We should be doing const char **shellargs = ["-bash", NULL]; execve("/bin/bash", shellargs, env); Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 27 ++++++++++++++++++++++----- tools/virt-login-shell.conf | 6 +++++- tools/virt-login-shell.pod | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 34a8836..1ca58ee 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -111,7 +111,7 @@ static int virLoginShellGetShellArgv(virConfPtr conf, p = virConfGetValue(conf, "shell"); if (!p) { - len = 2; /* /bin/sh -l */ + len = 1; /* /bin/sh */ } else if (p->type == VIR_CONF_LIST) { /* Calc length and check items */ for (len = 0, pp = p->list; pp; len++, pp = pp->next) { @@ -136,8 +136,6 @@ static int virLoginShellGetShellArgv(virConfPtr conf, if (!p) { if (VIR_STRDUP(shargv[i++], "/bin/sh") < 0) goto error; - if (VIR_STRDUP(shargv[i++], "-l") < 0) - goto error; } else if (p->type == VIR_CONF_LIST) { for (pp = p->list; pp; pp = pp->next) { if (VIR_STRDUP(shargv[i++], pp->str) < 0) @@ -200,6 +198,7 @@ main(int argc, char **argv) char *name = NULL; char **shargv = NULL; size_t shargvlen = 0; + char *shcmd = NULL; virSecurityModelPtr secmodel = NULL; virSecurityLabelPtr seclabel = NULL; virDomainPtr dom = NULL; @@ -214,6 +213,7 @@ main(int argc, char **argv) int openmax; size_t i; const char *cmdstr = NULL; + char *tmp; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -356,6 +356,22 @@ main(int argc, char **argv) shargv[shargvlen] = NULL; } + /* We need to modify the first elementin shargv + * so that it has the relative filename and has + * a leading '-' to indicate it is a login shell + */ + shcmd = shargv[0]; + if (shcmd[0] != '/') { + virReportSystemError(errno, + _("Shell '%s' should have absolute path"), + shcmd); + goto cleanup; + } + tmp = strrchr(shcmd, '/'); + if (VIR_STRDUP(shargv[0], tmp) < 0) + goto cleanup; + shargv[0][0] = '-'; + /* A fork is required to create new process in correct pid namespace. */ if ((cpid = virFork()) < 0) goto cleanup; @@ -367,9 +383,9 @@ main(int argc, char **argv) tmpfd = i; VIR_MASS_CLOSE(tmpfd); } - if (execv(shargv[0], (char *const*) shargv) < 0) { + if (execv(shcmd, (char *const*) shargv) < 0) { virReportSystemError(errno, _("Unable to exec shell %s"), - shargv[0]); + shcmd); virDispatchError(NULL); return errno == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE; } @@ -388,6 +404,7 @@ main(int argc, char **argv) if (conn) virConnectClose(conn); virStringFreeList(shargv); + VIR_FREE(shcmd); VIR_FREE(name); VIR_FREE(homedir); VIR_FREE(seclabel); diff --git a/tools/virt-login-shell.conf b/tools/virt-login-shell.conf index 835fd3f..67ca1cc 100644 --- a/tools/virt-login-shell.conf +++ b/tools/virt-login-shell.conf @@ -8,7 +8,11 @@ # container. Shell commands must be a list of commands/options separated by # comma and delimited by square brackets. Defaults to: /bin/sh -l. # Modify and uncomment the following to modify the login shell. -# shell = [ "/bin/sh", "-l" ] +# +# shell = [ "/bin/bash" ] +# +# Note there is no need to pass a '--login' / '-l' argument since +# virt-login-shell will always request a login shell # allowed_users specifies the user names of all users that are allowed to # execute virt-login-shell. You can specify the users as a comma diff --git a/tools/virt-login-shell.pod b/tools/virt-login-shell.pod index 56861f7..99eeed8 100644 --- a/tools/virt-login-shell.pod +++ b/tools/virt-login-shell.pod @@ -39,7 +39,7 @@ By default, virt-login-shell will execute the /bin/sh program for the user. You can modify this behaviour by defining the shell variable in /etc/libvirt/virt-login-shell.conf. -eg. shell = [ "/bin/ksh", "--login"] +eg. shell = [ "/bin/bash" ] By default no users are allowed to use virt-login-shell, if you want to allow certain users to use virt-login-shell, you need to modify the allowed_users -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Currently we request a login shell by passing the -l argument to the shell. This is either hardcoded, or required to be specified by the user in the virt-login-shell.conf file.
The standard way for login programs to request a shell run as a login shell is to modify the argv passed to execve() so that argv[0] contains the relative shell filename prefixed with a zero. eg instead of doing
const char **shellargs = ["/bin/bash", "-l", NULL]; execve(shellargs[0], shellargs, env);
We should be doing
const char **shellargs = ["-bash", NULL]; execve("/bin/bash", shellargs, env);
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 27 ++++++++++++++++++++++----- tools/virt-login-shell.conf | 6 +++++- tools/virt-login-shell.pod | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 34a8836..1ca58ee 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -111,7 +111,7 @@ static int virLoginShellGetShellArgv(virConfPtr conf,
p = virConfGetValue(conf, "shell"); if (!p) { - len = 2; /* /bin/sh -l */ + len = 1; /* /bin/sh */ } else if (p->type == VIR_CONF_LIST) { /* Calc length and check items */ for (len = 0, pp = p->list; pp; len++, pp = pp->next) { @@ -136,8 +136,6 @@ static int virLoginShellGetShellArgv(virConfPtr conf, if (!p) { if (VIR_STRDUP(shargv[i++], "/bin/sh") < 0) goto error; - if (VIR_STRDUP(shargv[i++], "-l") < 0) - goto error; } else if (p->type == VIR_CONF_LIST) { for (pp = p->list; pp; pp = pp->next) { if (VIR_STRDUP(shargv[i++], pp->str) < 0) @@ -200,6 +198,7 @@ main(int argc, char **argv) char *name = NULL; char **shargv = NULL; size_t shargvlen = 0; + char *shcmd = NULL; virSecurityModelPtr secmodel = NULL; virSecurityLabelPtr seclabel = NULL; virDomainPtr dom = NULL; @@ -214,6 +213,7 @@ main(int argc, char **argv) int openmax; size_t i; const char *cmdstr = NULL; + char *tmp;
struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -356,6 +356,22 @@ main(int argc, char **argv) shargv[shargvlen] = NULL; }
+ /* We need to modify the first elementin shargv + * so that it has the relative filename and has + * a leading '-' to indicate it is a login shell + */ + shcmd = shargv[0]; + if (shcmd[0] != '/') { + virReportSystemError(errno, + _("Shell '%s' should have absolute path"), + shcmd); + goto cleanup; + } + tmp = strrchr(shcmd, '/'); + if (VIR_STRDUP(shargv[0], tmp) < 0) + goto cleanup; + shargv[0][0] = '-'; + /* A fork is required to create new process in correct pid namespace. */ if ((cpid = virFork()) < 0) goto cleanup; @@ -367,9 +383,9 @@ main(int argc, char **argv) tmpfd = i; VIR_MASS_CLOSE(tmpfd); } - if (execv(shargv[0], (char *const*) shargv) < 0) { + if (execv(shcmd, (char *const*) shargv) < 0) { virReportSystemError(errno, _("Unable to exec shell %s"), - shargv[0]); + shcmd); virDispatchError(NULL); return errno == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE; } @@ -388,6 +404,7 @@ main(int argc, char **argv) if (conn) virConnectClose(conn); virStringFreeList(shargv); + VIR_FREE(shcmd); VIR_FREE(name); VIR_FREE(homedir); VIR_FREE(seclabel); diff --git a/tools/virt-login-shell.conf b/tools/virt-login-shell.conf index 835fd3f..67ca1cc 100644 --- a/tools/virt-login-shell.conf +++ b/tools/virt-login-shell.conf @@ -8,7 +8,11 @@ # container. Shell commands must be a list of commands/options separated by # comma and delimited by square brackets. Defaults to: /bin/sh -l.
Need to adjust the "Defaults to:", right? ACK w/ that. John
# Modify and uncomment the following to modify the login shell. -# shell = [ "/bin/sh", "-l" ] +# +# shell = [ "/bin/bash" ] +# +# Note there is no need to pass a '--login' / '-l' argument since +# virt-login-shell will always request a login shell
# allowed_users specifies the user names of all users that are allowed to # execute virt-login-shell. You can specify the users as a comma diff --git a/tools/virt-login-shell.pod b/tools/virt-login-shell.pod index 56861f7..99eeed8 100644 --- a/tools/virt-login-shell.pod +++ b/tools/virt-login-shell.pod @@ -39,7 +39,7 @@ By default, virt-login-shell will execute the /bin/sh program for the user. You can modify this behaviour by defining the shell variable in /etc/libvirt/virt-login-shell.conf.
-eg. shell = [ "/bin/ksh", "--login"] +eg. shell = [ "/bin/bash" ]
By default no users are allowed to use virt-login-shell, if you want to allow certain users to use virt-login-shell, you need to modify the allowed_users

Currently the shell config file parameter must be a list giving the shell path and args. Allow it to be a plain string argument as well. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 5 +++++ tools/virt-login-shell.conf | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 1ca58ee..ed89ecf 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -121,6 +121,8 @@ static int virLoginShellGetShellArgv(virConfPtr conf, goto error; } } + } else if (p->type == VIR_CONF_STRING) { + len = 1; /* /path/to/shell */ } else { virReportSystemError(EINVAL, "%s", _("shell must be a list of strings")); @@ -141,6 +143,9 @@ static int virLoginShellGetShellArgv(virConfPtr conf, if (VIR_STRDUP(shargv[i++], pp->str) < 0) goto error; } + } else if (p->type == VIR_CONF_STRING) { + if (VIR_STRDUP(shargv[i++], p->str) < 0) + goto error; } shargv[i] = NULL; diff --git a/tools/virt-login-shell.conf b/tools/virt-login-shell.conf index 67ca1cc..e29d222 100644 --- a/tools/virt-login-shell.conf +++ b/tools/virt-login-shell.conf @@ -5,11 +5,15 @@ # By default, virt-login-shell will connect you to a container running # with the /bin/sh program. Modify the shell variable if you want your # users to run a different shell or a setup container when joining a -# container. Shell commands must be a list of commands/options separated by -# comma and delimited by square brackets. Defaults to: /bin/sh -l. -# Modify and uncomment the following to modify the login shell. +# container. # -# shell = [ "/bin/bash" ] +# This can either be just the path to a shell binary: +# +# shell = "/bin/bash" +# +# Or can be the path and extra arguments +# +# shell = [ "/bin/bash", "--posix" ] # # Note there is no need to pass a '--login' / '-l' argument since # virt-login-shell will always request a login shell -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Currently the shell config file parameter must be a list giving the shell path and args. Allow it to be a plain string argument as well.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 5 +++++ tools/virt-login-shell.conf | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-)
I should just read ahead more often ;-) My comment in the previous patch is moot now! Since "defaults to" goes away. ACK, John

The virDomainFree / virConnectClose methods will reset the last error handle, so we must save the error during cleanup Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index ed89ecf..3f2e3d0 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -219,6 +219,7 @@ main(int argc, char **argv) size_t i; const char *cmdstr = NULL; char *tmp; + virErrorPtr saved_err = NULL; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -399,6 +400,8 @@ main(int argc, char **argv) /* At this point, the parent is now waiting for the child to exit, * but as that may take a long time, we release resources now. */ cleanup: + saved_err = virSaveLastError(); + if (nfdlist > 0) for (i = 0; i < nfdlist; i++) VIR_FORCE_CLOSE(fdlist[i]); @@ -419,7 +422,9 @@ main(int argc, char **argv) if (virProcessWait(cpid, &status, true) == 0) virProcessExitWithStatus(status); - if (virGetLastError()) + if (saved_err) { + virSetError(saved_err); virDispatchError(NULL); + } return ret; } -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The virDomainFree / virConnectClose methods will reset the last error handle, so we must save the error during cleanup
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
ACK John

The virt-login-shell environment will be initialized with an arbitrary number of environment variables determined by the SSH daemon and PAM configuration. Most of these are not relevant inside the container, and at best they are noise and at worst they'll break apps. For example if XDG_RUNTIME_DIR is leaked to the container, it'll break any apps using it, since the directory it points to is only visible to the host OS filesystem, not the container FS. Use clearenv() to blank out everything and then set known good values for PATH, SHELL, USER, LOGNAME and TERM. Everything else is left up to the login shell to initialize. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 3f2e3d0..6e8056d 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -219,6 +219,7 @@ main(int argc, char **argv) size_t i; const char *cmdstr = NULL; char *tmp; + char *term = NULL; virErrorPtr saved_err = NULL; struct option opt[] = { @@ -231,8 +232,6 @@ main(int argc, char **argv) return EXIT_CANCELED; } - setenv("PATH", "/bin:/usr/bin", 1); - virSetErrorFunc(NULL, NULL); virSetErrorLogPriorityFunc(NULL); @@ -378,6 +377,9 @@ main(int argc, char **argv) goto cleanup; shargv[0][0] = '-'; + if (VIR_STRDUP(term, getenv("TERM")) < 0) + goto cleanup; + /* A fork is required to create new process in correct pid namespace. */ if ((cpid = virFork()) < 0) goto cleanup; @@ -389,6 +391,15 @@ main(int argc, char **argv) tmpfd = i; VIR_MASS_CLOSE(tmpfd); } + + clearenv(); + setenv("PATH", "/bin:/usr/bin", 1); + setenv("SHELL", shcmd, 1); + setenv("USER", name, 1); + setenv("LOGNAME", name, 1); + if (term) + setenv("TERM", term, 1); + if (execv(shcmd, (char *const*) shargv) < 0) { virReportSystemError(errno, _("Unable to exec shell %s"), shcmd); @@ -413,6 +424,7 @@ main(int argc, char **argv) virConnectClose(conn); virStringFreeList(shargv); VIR_FREE(shcmd); + VIR_FREE(term); VIR_FREE(name); VIR_FREE(homedir); VIR_FREE(seclabel); -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
The virt-login-shell environment will be initialized with an arbitrary number of environment variables determined by the SSH daemon and PAM configuration. Most of these are not relevant inside the container, and at best they are noise and at worst they'll break apps. For example if XDG_RUNTIME_DIR is leaked to the container, it'll break any apps using it, since the directory it points to is only visible to the host OS filesystem, not the container FS.
Use clearenv() to blank out everything and then set known good values for PATH, SHELL, USER, LOGNAME and TERM. Everything else is left up to the login shell to initialize.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
ACK John

Currently the shell must be looked up from the config setting in /etc/libvirt/virt-login-shell.conf. This is inflexible if there are containers where different users need different shells. Add add a new 'auto-shell' config parameter which instructs us to query the containers' /etc/passwd for the shell to be exec'd. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 33 +++++++++++++++++++++++++++++++++ tools/virt-login-shell.conf | 14 ++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 6e8056d..7680266 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -100,6 +100,24 @@ static int virLoginShellAllowedUser(virConfPtr conf, return ret; } +static int virLoginShellGetAutoShell(virConfPtr conf, bool *autoshell) +{ + virConfValuePtr p; + + p = virConfGetValue(conf, "auto_shell"); + if (!p) { + autoshell = false; + } else if (p->type == VIR_CONF_LONG || + p->type == VIR_CONF_ULONG) { + *autoshell = (p->l != 0); + } else { + virReportSystemError(EINVAL, "%s", + _("auto-shell must be a boolean value")); + return -1; + } + return 0; +} + static int virLoginShellGetShellArgv(virConfPtr conf, char ***retshargv, size_t *retshargvlen) @@ -221,6 +239,7 @@ main(int argc, char **argv) char *tmp; char *term = NULL; virErrorPtr saved_err = NULL; + bool autoshell = false; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -300,6 +319,8 @@ main(int argc, char **argv) if (virLoginShellGetShellArgv(conf, &shargv, &shargvlen) < 0) goto cleanup; + if (virLoginShellGetAutoShell(conf, &autoshell) < 0) + goto cleanup; conn = virConnectOpen("lxc:///"); if (!conn) @@ -351,6 +372,18 @@ main(int argc, char **argv) goto cleanup; } + if (autoshell) { + tmp = virGetUserShell(uid); + if (tmp) { + virStringFreeList(shargv); + shargvlen = 1; + if (VIR_ALLOC_N(shargv[0], shargvlen + 1) < 0) + goto cleanup; + shargv[0] = tmp; + shargv[1] = NULL; + } + } + if (cmdstr) { if (VIR_REALLOC_N(shargv, shargvlen + 3) < 0) goto cleanup; diff --git a/tools/virt-login-shell.conf b/tools/virt-login-shell.conf index e29d222..4a504b3 100644 --- a/tools/virt-login-shell.conf +++ b/tools/virt-login-shell.conf @@ -18,6 +18,20 @@ # Note there is no need to pass a '--login' / '-l' argument since # virt-login-shell will always request a login shell +# Normally virt-login-shell will always use the shell identified +# by the 'shell' configuration setting above. If the container +# is running a full OS, it might be desirable to allow the choice +# of shell to be delegated to the owner of the shell, by querying +# the /etc/passwd file inside the container +# +# To allow for that, uncomment the following: +# auto_shell = 1 +# +# NB, this should /not/ be used if any container is sharing the +# host filesystem /etc, as this would cause virt-login-shell to +# look at the host's /etc/passwd finding itself as the listed +# shell. Hilarious recursion would then ensue. + # allowed_users specifies the user names of all users that are allowed to # execute virt-login-shell. You can specify the users as a comma # separated list of usernames or user groups. -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Currently the shell must be looked up from the config setting in /etc/libvirt/virt-login-shell.conf. This is inflexible if there are containers where different users need different shells. Add add a new 'auto-shell' config parameter which instructs us to query the containers' /etc/passwd for the shell to be exec'd.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tools/virt-login-shell.c | 33 +++++++++++++++++++++++++++++++++ tools/virt-login-shell.conf | 14 ++++++++++++++ 2 files changed, 47 insertions(+)
Should there be a virt-login-shell.pod change too in the CONFIG section? Hmmm.. it just dawned on me, should there be virt-login-shell.pod change for the -c addition?
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 6e8056d..7680266 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -100,6 +100,24 @@ static int virLoginShellAllowedUser(virConfPtr conf, return ret; }
+static int virLoginShellGetAutoShell(virConfPtr conf, bool *autoshell)
I see virLoginShellAllowedUser goes w/ multiple lies for each argument...
+{ + virConfValuePtr p; + + p = virConfGetValue(conf, "auto_shell"); + if (!p) { + autoshell = false;
*autoshell
+ } else if (p->type == VIR_CONF_LONG || + p->type == VIR_CONF_ULONG) { + *autoshell = (p->l != 0); + } else { + virReportSystemError(EINVAL, "%s", + _("auto-shell must be a boolean value"));
s/-/_/
+ return -1; + } + return 0; +} + static int virLoginShellGetShellArgv(virConfPtr conf, char ***retshargv, size_t *retshargvlen) @@ -221,6 +239,7 @@ main(int argc, char **argv) char *tmp; char *term = NULL; virErrorPtr saved_err = NULL; + bool autoshell = false;
struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -300,6 +319,8 @@ main(int argc, char **argv)
if (virLoginShellGetShellArgv(conf, &shargv, &shargvlen) < 0) goto cleanup;
Extra line between to follow existing...
+ if (virLoginShellGetAutoShell(conf, &autoshell) < 0) + goto cleanup;
conn = virConnectOpen("lxc:///"); if (!conn) @@ -351,6 +372,18 @@ main(int argc, char **argv) goto cleanup; }
+ if (autoshell) { + tmp = virGetUserShell(uid); + if (tmp) { + virStringFreeList(shargv); + shargvlen = 1; + if (VIR_ALLOC_N(shargv[0], shargvlen + 1) < 0)
tmp will be leaked. It's 'overloaded' with the subsequent strrchr ACK - with the obvious adjustments... John
+ goto cleanup; + shargv[0] = tmp; + shargv[1] = NULL; + } + } + if (cmdstr) { if (VIR_REALLOC_N(shargv, shargvlen + 3) < 0) goto cleanup; diff --git a/tools/virt-login-shell.conf b/tools/virt-login-shell.conf index e29d222..4a504b3 100644 --- a/tools/virt-login-shell.conf +++ b/tools/virt-login-shell.conf @@ -18,6 +18,20 @@ # Note there is no need to pass a '--login' / '-l' argument since # virt-login-shell will always request a login shell
+# Normally virt-login-shell will always use the shell identified +# by the 'shell' configuration setting above. If the container +# is running a full OS, it might be desirable to allow the choice +# of shell to be delegated to the owner of the shell, by querying +# the /etc/passwd file inside the container +# +# To allow for that, uncomment the following: +# auto_shell = 1 +# +# NB, this should /not/ be used if any container is sharing the +# host filesystem /etc, as this would cause virt-login-shell to +# look at the host's /etc/passwd finding itself as the listed +# shell. Hilarious recursion would then ensue. + # allowed_users specifies the user names of all users that are allowed to # execute virt-login-shell. You can specify the users as a comma # separated list of usernames or user groups.

Prior to joining the namespaces of the container, move the process into the containers' cgroups, so that the shell that is subsequently launched is under the container resource constraints. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- config-post.h | 2 ++ src/Makefile.am | 4 ++++ tools/virt-login-shell.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/config-post.h b/config-post.h index 2398d3d..f43521b 100644 --- a/config-post.h +++ b/config-post.h @@ -32,6 +32,7 @@ # undef HAVE_LIBSASL2 # undef WITH_CAPNG # undef WITH_CURL +# undef WITH_DBUS # undef WITH_DTRACE_PROBES # undef WITH_GNUTLS # undef WITH_GNUTLS_GCRYPT @@ -39,6 +40,7 @@ # undef WITH_NUMACTL # undef WITH_SASL # undef WITH_SSH2 +# undef WITH_SYSTEMD_DAEMON # undef WITH_VIRTUALPORT # undef WITH_YAJL # undef WITH_YAJL2 diff --git a/src/Makefile.am b/src/Makefile.am index 8b6ff15..ca0350e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2325,14 +2325,17 @@ libvirt_setuid_rpc_client_la_SOURCES = \ util/viratomic.h \ util/virbitmap.c \ util/virbuffer.c \ + util/vircgroup.c \ util/vircommand.c \ util/virconf.c \ + util/virdbus.c \ util/virerror.c \ util/virevent.c \ util/vireventpoll.c \ util/virfile.c \ util/virhash.c \ util/virhashcode.c \ + util/virhostcpu.c \ util/virjson.c \ util/virlog.c \ util/virobject.c \ @@ -2341,6 +2344,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \ util/virrandom.c \ util/virsocketaddr.c \ util/virstring.c \ + util/virsystemd.c \ util/virtime.c \ util/virthread.c \ util/virthreadjob.c \ diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 7680266..9d916f2 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -362,6 +362,8 @@ main(int argc, char **argv) goto cleanup; if (virDomainLxcEnterSecurityLabel(secmodel, seclabel, NULL, 0) < 0) goto cleanup; + if (virDomainLxcEnterCGroup(dom, 0) < 0) + goto cleanup; if (nfdlist > 0 && virDomainLxcEnterNamespace(dom, nfdlist, fdlist, NULL, NULL, 0) < 0) goto cleanup; -- 2.5.5

On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
Prior to joining the namespaces of the container, move the process into the containers' cgroups, so that the shell that is subsequently launched is under the container resource constraints.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- config-post.h | 2 ++ src/Makefile.am | 4 ++++ tools/virt-login-shell.c | 2 ++ 3 files changed, 8 insertions(+)
Couldn't git am -3 this one either (Makefile.am changes), but otherwise looks reasonable to me. ACK - although now that I'm done, I think we should wait for 1.3.4 to be out just to give everything enough "exposure" time... John

Move all APIs with a virHostCPU name prefix out into new util/virhostcpu.h & util/virhostcpu.c files Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- cfg.mk | 6 +- po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/libvirt_linux.syms | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 1 + src/nodeinfo.c | 1171 +----------------- src/nodeinfo.h | 13 - src/openvz/openvz_driver.c | 1 + src/qemu/qemu_driver.c | 1 + src/qemu/qemu_process.c | 2 +- src/uml/uml_driver.c | 1 + src/util/vircgroup.c | 3 +- src/util/virhostcpu.c | 1299 ++++++++++++++++++++ src/util/virhostcpu.h | 54 + src/{nodeinfopriv.h => util/virhostcpupriv.h} | 12 +- [...snipped countless more test data renames....] rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test7.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.expected (100%) rename tests/{nodeinfomock.c => virhostcpumock.c} (95%) rename tests/{nodeinfotest.c => virhostcputest.c} (89%) diff --git a/cfg.mk b/cfg.mk index cd3b515..b1b8bdc 100644 --- a/cfg.mk +++ b/cfg.mk @@ -1161,7 +1161,7 @@ exclude_file_name_regexp--sc_prohibit_close = \ (\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/vir.+mock\.c)$$) exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \ - (^tests/(qemuhelp|nodeinfo|virpcitest)data/|\.diff$$) + (^tests/(qemuhelp|virhostcpu|virpcitest)data/|\.diff$$) _src2=src/(util/vircommand|libvirt|lxc/lxc_controller|locking/lock_daemon|logging/log_daemon) exclude_file_name_regexp--sc_prohibit_fork_wrappers = \ @@ -1208,7 +1208,7 @@ exclude_file_name_regexp--sc_require_config_h_first = \ ^(examples/|tools/virsh-edit\.c$$) exclude_file_name_regexp--sc_trailing_blank = \ - /qemuhelpdata/|/sysinfodata/.*\.data|/nodeinfodata/.*\.cpuinfo$$ + /qemuhelpdata/|/sysinfodata/.*\.data|/virhostcpudata/.*\.cpuinfo$$ exclude_file_name_regexp--sc_unmarked_diagnostics = \ ^(docs/apibuild.py|tests/virt-aa-helper-test)$$ @@ -1239,7 +1239,7 @@ exclude_file_name_regexp--sc_prohibit_mixed_case_abbreviations = \ ^src/(vbox/vbox_CAPI.*.h|esx/esx_vi.(c|h)|esx/esx_storage_backend_iscsi.c)$$ exclude_file_name_regexp--sc_prohibit_empty_first_line = \ - ^(README|daemon/THREADS\.txt|src/esx/README|docs/library.xen|tests/(vmwarever|nodeinfo)data/.*)$$ + ^(README|daemon/THREADS\.txt|src/esx/README|docs/library.xen|tests/(vmwarever|virhostcpu)data/.*)$$ exclude_file_name_regexp--sc_prohibit_useless_translation = \ ^tests/virpolkittest.c diff --git a/po/POTFILES.in b/po/POTFILES.in index ca23526..b0cd8cf 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -195,6 +195,7 @@ src/util/virfile.c src/util/virfirewall.c src/util/virhash.c src/util/virhook.c +src/util/virhostcpu.c src/util/virhostdev.c src/util/viridentity.c src/util/virinitctl.c diff --git a/src/Makefile.am b/src/Makefile.am index f5e57c0..8d2a8e0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -118,6 +118,7 @@ UTIL_SOURCES = \ util/virhash.c util/virhash.h \ util/virhashcode.c util/virhashcode.h \ util/virhook.c util/virhook.h \ + util/virhostcpu.c util/virhostcpu.h util/virhostcpupriv.h \ util/virhostdev.c util/virhostdev.h \ util/viridentity.c util/viridentity.h \ util/virinitctl.c util/virinitctl.h \ @@ -190,7 +191,7 @@ util/virkeymaps.h: $(srcdir)/util/keymaps.csv \ <$(srcdir)/util/keymaps.csv >util/virkeymaps.h # Internal generic driver infrastructure -NODE_INFO_SOURCES = nodeinfo.h nodeinfo.c nodeinfopriv.h +NODE_INFO_SOURCES = nodeinfo.h nodeinfo.c DATATYPES_SOURCES = datatypes.h datatypes.c DRIVER_SOURCES = \ driver.c driver.h \ diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms index a2fc076..a864b78 100644 --- a/src/libvirt_linux.syms +++ b/src/libvirt_linux.syms @@ -2,7 +2,7 @@ # Linux-specific private symbols. # -# nodeinfo.h +# util/virhostcpu.h virHostCPUGetInfoPopulateLinux; virHostCPUGetStatsLinux; virHostCPUSetSysFSSystemPathLinux; diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index 45ad25e..d59192d 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -59,7 +59,7 @@ #include "virfile.h" #include "virpidfile.h" #include "vircommand.h" -#include "nodeinfo.h" +#include "virhostcpu.h" #include "virrandom.h" #include "virprocess.h" #include "virnuma.h" diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index c5e9a5f..2cecabc 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -51,6 +51,7 @@ #include "virnetdevveth.h" #include "virnetdevopenvswitch.h" #include "nodeinfo.h" +#include "virhostcpu.h" #include "viruuid.h" #include "virstats.h" #include "virhook.h" diff --git a/src/nodeinfo.c b/src/nodeinfo.c index a3d0024..8bf495f 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -46,10 +46,9 @@ # include <sys/resource.h> #endif -#include "c-ctype.h" #include "viralloc.h" -#include "nodeinfopriv.h" #include "nodeinfo.h" +#include "virhostcpu.h" #include "physmem.h" #include "virerror.h" #include "count-one-bits.h" @@ -66,126 +65,9 @@ VIR_LOG_INIT("nodeinfo"); -#if defined(__FreeBSD__) || defined(__APPLE__) -static int -virHostCPUGetCountAppleFreeBSD(void) -{ - int ncpu_mib[2] = { CTL_HW, HW_NCPU }; - unsigned long ncpu; - size_t ncpu_len = sizeof(ncpu); - - if (sysctl(ncpu_mib, 2, &ncpu, &ncpu_len, NULL, 0) == -1) { - virReportSystemError(errno, "%s", _("Cannot obtain CPU count")); - return -1; - } - - return ncpu; -} -#endif /* defined(__FreeBSD__) || defined(__APPLE__) */ - #ifdef __FreeBSD__ -# define BSD_CPU_STATS_ALL 4 # define BSD_MEMORY_STATS_ALL 4 -# define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / (stathz ? stathz : hz)) - -static int -virHostCPUGetStatsFreebsd(int cpuNum, - virNodeCPUStatsPtr params, - int *nparams) -{ - const char *sysctl_name; - long *cpu_times; - struct clockinfo clkinfo; - size_t i, j, cpu_times_size, clkinfo_size; - int cpu_times_num, offset, hz, stathz, ret = -1; - struct field_cpu_map { - const char *field; - int idx[CPUSTATES]; - } cpu_map[] = { - {VIR_NODE_CPU_STATS_KERNEL, {CP_SYS}}, - {VIR_NODE_CPU_STATS_USER, {CP_USER, CP_NICE}}, - {VIR_NODE_CPU_STATS_IDLE, {CP_IDLE}}, - {VIR_NODE_CPU_STATS_INTR, {CP_INTR}}, - {NULL, {0}} - }; - - if ((*nparams) == 0) { - *nparams = BSD_CPU_STATS_ALL; - return 0; - } - - if ((*nparams) != BSD_CPU_STATS_ALL) { - virReportInvalidArg(*nparams, - _("nparams in %s must be equal to %d"), - __FUNCTION__, BSD_CPU_STATS_ALL); - return -1; - } - - clkinfo_size = sizeof(clkinfo); - if (sysctlbyname("kern.clockrate", &clkinfo, &clkinfo_size, NULL, 0) < 0) { - virReportSystemError(errno, - _("sysctl failed for '%s'"), - "kern.clockrate"); - return -1; - } - - stathz = clkinfo.stathz; - hz = clkinfo.hz; - - if (cpuNum == VIR_NODE_CPU_STATS_ALL_CPUS) { - sysctl_name = "kern.cp_time"; - cpu_times_num = 1; - offset = 0; - } else { - sysctl_name = "kern.cp_times"; - cpu_times_num = virHostCPUGetCountAppleFreeBSD(); - - if (cpuNum >= cpu_times_num) { - virReportInvalidArg(cpuNum, - _("Invalid cpuNum in %s"), - __FUNCTION__); - return -1; - } - - offset = cpu_times_num * CPUSTATES; - } - - cpu_times_size = sizeof(long) * cpu_times_num * CPUSTATES; - - if (VIR_ALLOC_N(cpu_times, cpu_times_num * CPUSTATES) < 0) - goto cleanup; - - if (sysctlbyname(sysctl_name, cpu_times, &cpu_times_size, NULL, 0) < 0) { - virReportSystemError(errno, - _("sysctl failed for '%s'"), - sysctl_name); - goto cleanup; - } - - for (i = 0; cpu_map[i].field != NULL; i++) { - virNodeCPUStatsPtr param = ¶ms[i]; - - if (virStrcpyStatic(param->field, cpu_map[i].field) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Field '%s' too long for destination"), - cpu_map[i].field); - goto cleanup; - } - - param->value = 0; - for (j = 0; j < ARRAY_CARDINALITY(cpu_map[i].idx); j++) - param->value += cpu_times[offset + cpu_map[i].idx[j]] * TICK_TO_NSEC; - } - - ret = 0; - - cleanup: - VIR_FREE(cpu_times); - - return ret; -} - static int virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, int *nparams) @@ -263,26 +145,13 @@ virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params, #ifdef __linux__ # define SYSFS_SYSTEM_PATH "/sys/devices/system" -# define CPUINFO_PATH "/proc/cpuinfo" -# define PROCSTAT_PATH "/proc/stat" # define MEMINFO_PATH "/proc/meminfo" # define SYSFS_MEMORY_SHARED_PATH "/sys/kernel/mm/ksm" # define SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX 8192 -# define LINUX_NB_CPU_STATS 4 # define LINUX_NB_MEMORY_STATS_ALL 4 # define LINUX_NB_MEMORY_STATS_CELL 2 -static const char *sysfs_system_path = SYSFS_SYSTEM_PATH; - -void virHostCPUSetSysFSSystemPathLinux(const char *path) -{ - if (path) - sysfs_system_path = path; - else - sysfs_system_path = SYSFS_SYSTEM_PATH; -} - /* Return the positive decimal contents of the given * DIR/cpu%u/FILE, or -1 on error. If DEFAULT_VALUE is non-negative * and the file could not be found, return that instead of an error; @@ -329,635 +198,6 @@ virNodeGetCpuValue(const char *dir, unsigned int cpu, const char *file, return value; } -static unsigned long -virHostCPUCountThreadSiblings(const char *dir, unsigned int cpu) -{ - unsigned long ret = 0; - char *path; - char *str = NULL; - size_t i; - - if (virAsprintf(&path, "%s/cpu%u/topology/thread_siblings", - dir, cpu) < 0) - return 0; - - if (!virFileExists(path)) { - /* If file doesn't exist, then pretend our only - * sibling is ourself */ - ret = 1; - goto cleanup; - } - - if (virFileReadAll(path, SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX, &str) < 0) - goto cleanup; - - for (i = 0; str[i] != '\0'; i++) { - if (c_isxdigit(str[i])) - ret += count_one_bits(virHexToBin(str[i])); - } - - cleanup: - VIR_FREE(str); - VIR_FREE(path); - return ret; -} - -static int -virHostCPUParseSocket(const char *dir, - virArch arch, - unsigned int cpu) -{ - int ret = virNodeGetCpuValue(dir, cpu, "topology/physical_package_id", 0); - - if (ARCH_IS_ARM(arch) || ARCH_IS_PPC(arch) || ARCH_IS_S390(arch)) { - /* arm, ppc and s390(x) has -1 */ - if (ret < 0) - ret = 0; - } - - return ret; -} - -/* parses a node entry, returning number of processors in the node and - * filling arguments */ -static int -ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) -ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(6) -ATTRIBUTE_NONNULL(7) ATTRIBUTE_NONNULL(8) -ATTRIBUTE_NONNULL(9) -virHostCPUParseNode(const char *node, - virArch arch, - virBitmapPtr present_cpus_map, - virBitmapPtr online_cpus_map, - int threads_per_subcore, - int *sockets, - int *cores, - int *threads, - int *offline) -{ - /* Biggest value we can expect to be used as either socket id - * or core id. Bitmaps will need to be sized accordingly */ - const int ID_MAX = 4095; - int ret = -1; - int processors = 0; - DIR *cpudir = NULL; - struct dirent *cpudirent = NULL; - virBitmapPtr node_cpus_map = NULL; - virBitmapPtr sockets_map = NULL; - virBitmapPtr *cores_maps = NULL; - int npresent_cpus = virBitmapSize(present_cpus_map); - int sock_max = 0; - int sock; - int core; - size_t i; - int siblings; - unsigned int cpu; - int direrr; - - *threads = 0; - *cores = 0; - *sockets = 0; - - if (!(cpudir = opendir(node))) { - virReportSystemError(errno, _("cannot opendir %s"), node); - goto cleanup; - } - - /* Keep track of the CPUs that belong to the current node */ - if (!(node_cpus_map = virBitmapNew(npresent_cpus))) - goto cleanup; - - /* enumerate sockets in the node */ - if (!(sockets_map = virBitmapNew(ID_MAX + 1))) - goto cleanup; - - while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) { - if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) - continue; - - if (!virBitmapIsBitSet(present_cpus_map, cpu)) - continue; - - /* Mark this CPU as part of the current node */ - if (virBitmapSetBit(node_cpus_map, cpu) < 0) - goto cleanup; - - if (!virBitmapIsBitSet(online_cpus_map, cpu)) - continue; - - /* Parse socket */ - if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) - goto cleanup; - if (sock > ID_MAX) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Socket %d can't be handled (max socket is %d)"), - sock, ID_MAX); - goto cleanup; - } - - if (virBitmapSetBit(sockets_map, sock) < 0) - goto cleanup; - - if (sock > sock_max) - sock_max = sock; - } - - if (direrr < 0) - goto cleanup; - - sock_max++; - - /* allocate cores maps for each socket */ - if (VIR_ALLOC_N(cores_maps, sock_max) < 0) - goto cleanup; - - for (i = 0; i < sock_max; i++) - if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1))) - goto cleanup; - - /* Iterate over all CPUs in the node, in ascending order */ - for (cpu = 0; cpu < npresent_cpus; cpu++) { - - /* Skip CPUs that are not part of the current node */ - if (!virBitmapIsBitSet(node_cpus_map, cpu)) - continue; - - if (!virBitmapIsBitSet(online_cpus_map, cpu)) { - if (threads_per_subcore > 0 && - cpu % threads_per_subcore != 0 && - virBitmapIsBitSet(online_cpus_map, - cpu - (cpu % threads_per_subcore))) { - /* Secondary offline threads are counted as online when - * subcores are in use and the corresponding primary - * thread is online */ - processors++; - } else { - /* But they are counted as offline otherwise */ - (*offline)++; - } - continue; - } - - processors++; - - /* Parse socket */ - if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) - goto cleanup; - if (!virBitmapIsBitSet(sockets_map, sock)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("CPU socket topology has changed")); - goto cleanup; - } - - /* Parse core */ - if (ARCH_IS_S390(arch)) { - /* logical cpu is equivalent to a core on s390 */ - core = cpu; - } else { - if ((core = virNodeGetCpuValue(node, cpu, - "topology/core_id", 0)) < 0) - goto cleanup; - } - if (core > ID_MAX) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Core %d can't be handled (max core is %d)"), - core, ID_MAX); - goto cleanup; - } - - if (virBitmapSetBit(cores_maps[sock], core) < 0) - goto cleanup; - - if (!(siblings = virHostCPUCountThreadSiblings(node, cpu))) - goto cleanup; - - if (siblings > *threads) - *threads = siblings; - } - - /* finalize the returned data */ - *sockets = virBitmapCountBits(sockets_map); - - for (i = 0; i < sock_max; i++) { - if (!virBitmapIsBitSet(sockets_map, i)) - continue; - - core = virBitmapCountBits(cores_maps[i]); - if (core > *cores) - *cores = core; - } - - if (threads_per_subcore > 0) { - /* The thread count ignores offline threads, which means that only - * only primary threads have been considered so far. If subcores - * are in use, we need to also account for secondary threads */ - *threads *= threads_per_subcore; - } - ret = processors; - - cleanup: - /* don't shadow a more serious error */ - if (cpudir && closedir(cpudir) < 0 && ret >= 0) { - virReportSystemError(errno, _("problem closing %s"), node); - ret = -1; - } - if (cores_maps) - for (i = 0; i < sock_max; i++) - virBitmapFree(cores_maps[i]); - VIR_FREE(cores_maps); - virBitmapFree(sockets_map); - virBitmapFree(node_cpus_map); - - return ret; -} - -/* Check whether the host subcore configuration is valid. - * - * A valid configuration is one where no secondary thread is online; - * the primary thread in a subcore is always the first one */ -static bool -virHostCPUHasValidSubcoreConfiguration(int threads_per_subcore) -{ - virBitmapPtr online_cpus = NULL; - int cpu = -1; - bool ret = false; - - /* No point in checking if subcores are not in use */ - if (threads_per_subcore <= 0) - goto cleanup; - - if (!(online_cpus = virHostCPUGetOnlineBitmap())) - goto cleanup; - - while ((cpu = virBitmapNextSetBit(online_cpus, cpu)) >= 0) { - - /* A single online secondary thread is enough to - * make the configuration invalid */ - if (cpu % threads_per_subcore != 0) - goto cleanup; - } - - ret = true; - - cleanup: - virBitmapFree(online_cpus); - - return ret; -} - -int -virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, - virArch arch, - unsigned int *cpus, - unsigned int *mhz, - unsigned int *nodes, - unsigned int *sockets, - unsigned int *cores, - unsigned int *threads) -{ - virBitmapPtr present_cpus_map = NULL; - virBitmapPtr online_cpus_map = NULL; - char line[1024]; - DIR *nodedir = NULL; - struct dirent *nodedirent = NULL; - int nodecpus, nodecores, nodesockets, nodethreads, offline = 0; - int threads_per_subcore = 0; - unsigned int node; - int ret = -1; - char *sysfs_nodedir = NULL; - char *sysfs_cpudir = NULL; - int direrr; - - *mhz = 0; - *cpus = *nodes = *sockets = *cores = *threads = 0; - - /* Start with parsing CPU clock speed from /proc/cpuinfo */ - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - if (ARCH_IS_X86(arch)) { - char *buf = line; - if (STRPREFIX(buf, "cpu MHz")) { - char *p; - unsigned int ui; - - buf += 7; - while (*buf && c_isspace(*buf)) - buf++; - - if (*buf != ':' || !buf[1]) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("parsing cpu MHz from cpuinfo")); - goto cleanup; - } - - if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && - /* Accept trailing fractional part. */ - (*p == '\0' || *p == '.' || c_isspace(*p))) - *mhz = ui; - } - } else if (ARCH_IS_PPC(arch)) { - char *buf = line; - if (STRPREFIX(buf, "clock")) { - char *p; - unsigned int ui; - - buf += 5; - while (*buf && c_isspace(*buf)) - buf++; - - if (*buf != ':' || !buf[1]) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("parsing cpu MHz from cpuinfo")); - goto cleanup; - } - - if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && - /* Accept trailing fractional part. */ - (*p == '\0' || *p == '.' || c_isspace(*p))) - *mhz = ui; - /* No other interesting infos are available in /proc/cpuinfo. - * However, there is a line identifying processor's version, - * identification and machine, but we don't want it to be caught - * and parsed in next iteration, because it is not in expected - * format and thus lead to error. */ - } - } else if (ARCH_IS_ARM(arch)) { - char *buf = line; - if (STRPREFIX(buf, "BogoMIPS")) { - char *p; - unsigned int ui; - - buf += 8; - while (*buf && c_isspace(*buf)) - buf++; - - if (*buf != ':' || !buf[1]) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("parsing cpu MHz from cpuinfo")); - goto cleanup; - } - - if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 - /* Accept trailing fractional part. */ - && (*p == '\0' || *p == '.' || c_isspace(*p))) - *mhz = ui; - } - } else if (ARCH_IS_S390(arch)) { - /* s390x has no realistic value for CPU speed, - * assign a value of zero to signify this */ - *mhz = 0; - } else { - VIR_WARN("Parser for /proc/cpuinfo needs to be adapted for your architecture"); - break; - } - } - - /* Get information about what CPUs are present in the host and what - * CPUs are online, so that we don't have to so for each node */ - present_cpus_map = virHostCPUGetPresentBitmap(); - if (!present_cpus_map) - goto cleanup; - online_cpus_map = virHostCPUGetOnlineBitmap(); - if (!online_cpus_map) - goto cleanup; - - /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the - * core, node, socket, thread and topology information from /sys - */ - if (virAsprintf(&sysfs_nodedir, "%s/node", sysfs_system_path) < 0) - goto cleanup; - - if (!(nodedir = opendir(sysfs_nodedir))) { - /* the host isn't probably running a NUMA architecture */ - goto fallback; - } - - /* PPC-KVM needs the secondary threads of a core to be offline on the - * host. The kvm scheduler brings the secondary threads online in the - * guest context. Moreover, P8 processor has split-core capability - * where, there can be 1,2 or 4 subcores per core. The primaries of the - * subcores alone will be online on the host for a subcore in the - * host. Even though the actual threads per core for P8 processor is 8, - * depending on the subcores_per_core = 1, 2 or 4, the threads per - * subcore will vary accordingly to 8, 4 and 2 repectively. - * So, On host threads_per_core what is arrived at from sysfs in the - * current logic is actually the subcores_per_core. Threads per subcore - * can only be obtained from the kvm device. For example, on P8 wih 1 - * core having 8 threads, sub_cores_percore=4, the threads 0,2,4 & 6 - * will be online. The sysfs reflects this and in the current logic - * variable 'threads' will be 4 which is nothing but subcores_per_core. - * If the user tampers the cpu online/offline states using chcpu or other - * means, then it is an unsupported configuration for kvm. - * The code below tries to keep in mind - * - when the libvirtd is run inside a KVM guest or Phyp based guest. - * - Or on the kvm host where user manually tampers the cpu states to - * offline/online randomly. - * On hosts other than POWER this will be 0, in which case a simpler - * thread-counting logic will be used */ - if ((threads_per_subcore = virHostCPUGetThreadsPerSubcore(arch)) < 0) - goto cleanup; - - /* If the subcore configuration is not valid, just pretend subcores - * are not in use and count threads one by one */ - if (!virHostCPUHasValidSubcoreConfiguration(threads_per_subcore)) - threads_per_subcore = 0; - - while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) { - if (sscanf(nodedirent->d_name, "node%u", &node) != 1) - continue; - - (*nodes)++; - - if (virAsprintf(&sysfs_cpudir, "%s/node/%s", - sysfs_system_path, nodedirent->d_name) < 0) - goto cleanup; - - if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &nodesockets, &nodecores, - &nodethreads, &offline)) < 0) - goto cleanup; - - VIR_FREE(sysfs_cpudir); - - *cpus += nodecpus; - - if (nodesockets > *sockets) - *sockets = nodesockets; - - if (nodecores > *cores) - *cores = nodecores; - - if (nodethreads > *threads) - *threads = nodethreads; - } - - if (direrr < 0) - goto cleanup; - - if (*cpus && *nodes) - goto done; - - fallback: - VIR_FREE(sysfs_cpudir); - - if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_system_path) < 0) - goto cleanup; - - if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, - present_cpus_map, - online_cpus_map, - threads_per_subcore, - &nodesockets, &nodecores, - &nodethreads, &offline)) < 0) - goto cleanup; - - *nodes = 1; - *cpus = nodecpus; - *sockets = nodesockets; - *cores = nodecores; - *threads = nodethreads; - - done: - /* There should always be at least one cpu, socket, node, and thread. */ - if (*cpus == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no CPUs found")); - goto cleanup; - } - - if (*sockets == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no sockets found")); - goto cleanup; - } - - if (*threads == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no threads found")); - goto cleanup; - } - - /* Now check if the topology makes sense. There are machines that don't - * expose their real number of nodes or for example the AMD Bulldozer - * architecture that exposes their Clustered integer core modules as both - * threads and cores. This approach throws off our detection. Unfortunately - * the nodeinfo structure isn't designed to carry the full topology so - * we're going to lie about the detected topology to notify the user - * to check the host capabilities for the actual topology. */ - if ((*nodes * - *sockets * - *cores * - *threads) != (*cpus + offline)) { - *nodes = 1; - *sockets = 1; - *cores = *cpus + offline; - *threads = 1; - } - - ret = 0; - - cleanup: - /* don't shadow a more serious error */ - if (nodedir && closedir(nodedir) < 0 && ret >= 0) { - virReportSystemError(errno, _("problem closing %s"), sysfs_nodedir); - ret = -1; - } - - virBitmapFree(present_cpus_map); - virBitmapFree(online_cpus_map); - VIR_FREE(sysfs_nodedir); - VIR_FREE(sysfs_cpudir); - return ret; -} - -static int -virHostCPUStatsAssign(virNodeCPUStatsPtr param, - const char *name, - unsigned long long value) -{ - if (virStrcpyStatic(param->field, name) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("kernel cpu time field is too long" - " for the destination")); - return -1; - } - param->value = value; - return 0; -} - -# define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / sysconf(_SC_CLK_TCK)) - -int -virHostCPUGetStatsLinux(FILE *procstat, - int cpuNum, - virNodeCPUStatsPtr params, - int *nparams) -{ - int ret = -1; - char line[1024]; - unsigned long long usr, ni, sys, idle, iowait; - unsigned long long irq, softirq, steal, guest, guest_nice; - char cpu_header[4 + INT_BUFSIZE_BOUND(cpuNum)]; - - if ((*nparams) == 0) { - /* Current number of cpu stats supported by linux */ - *nparams = LINUX_NB_CPU_STATS; - ret = 0; - goto cleanup; - } - - if ((*nparams) != LINUX_NB_CPU_STATS) { - virReportInvalidArg(*nparams, - _("nparams in %s must be equal to %d"), - __FUNCTION__, LINUX_NB_CPU_STATS); - goto cleanup; - } - - if (cpuNum == VIR_NODE_CPU_STATS_ALL_CPUS) { - strcpy(cpu_header, "cpu "); - } else { - snprintf(cpu_header, sizeof(cpu_header), "cpu%d ", cpuNum); - } - - while (fgets(line, sizeof(line), procstat) != NULL) { - char *buf = line; - - if (STRPREFIX(buf, cpu_header)) { /* aka logical CPU time */ - if (sscanf(buf, - "%*s %llu %llu %llu %llu %llu" // user ~ iowait - "%llu %llu %llu %llu %llu", // irq ~ guest_nice - &usr, &ni, &sys, &idle, &iowait, - &irq, &softirq, &steal, &guest, &guest_nice) < 4) { - continue; - } - - if (virHostCPUStatsAssign(¶ms[0], VIR_NODE_CPU_STATS_KERNEL, - (sys + irq + softirq) * TICK_TO_NSEC) < 0) - goto cleanup; - - if (virHostCPUStatsAssign(¶ms[1], VIR_NODE_CPU_STATS_USER, - (usr + ni) * TICK_TO_NSEC) < 0) - goto cleanup; - - if (virHostCPUStatsAssign(¶ms[2], VIR_NODE_CPU_STATS_IDLE, - idle * TICK_TO_NSEC) < 0) - goto cleanup; - - if (virHostCPUStatsAssign(¶ms[3], VIR_NODE_CPU_STATS_IOWAIT, - iowait * TICK_TO_NSEC) < 0) - goto cleanup; - - ret = 0; - goto cleanup; - } - } - - virReportInvalidArg(cpuNum, - _("Invalid cpuNum in %s"), - __FUNCTION__); - - cleanup: - return ret; -} static int virHostMemGetStatsLinux(FILE *meminfo, @@ -1065,84 +305,6 @@ virHostMemGetStatsLinux(FILE *meminfo, return ret; } -static char * -virHostCPUGetGlobalPathLinux(const char *file) -{ - char *path = NULL; - - if (virAsprintf(&path, "%s/cpu/%s", sysfs_system_path, file) < 0) - return NULL; - - return path; -} - -static char * -virHostCPUGetPresentPathLinux(void) -{ - return virHostCPUGetGlobalPathLinux("present"); -} - -static char * -virHostCPUGetOnlinePathLinux(void) -{ - return virHostCPUGetGlobalPathLinux("online"); -} - -/* Determine the number of CPUs (maximum CPU id + 1) from a file containing - * a list of CPU ids, like the Linux sysfs cpu/present file */ -static int -virHostCPUParseCountLinux(const char *path) -{ - char *str = NULL; - char *tmp; - int ret = -1; - - if (virFileReadAll(path, 5 * VIR_DOMAIN_CPUMASK_LEN, &str) < 0) - goto cleanup; - - tmp = str; - do { - if (virStrToLong_i(tmp, &tmp, 10, &ret) < 0 || - !strchr(",-\n", *tmp)) { - virReportError(VIR_ERR_NO_SUPPORT, - _("failed to parse %s"), path); - ret = -1; - goto cleanup; - } - } while (*tmp++ != '\n'); - ret++; - - cleanup: - VIR_FREE(str); - return ret; -} - -/* - * Linux maintains cpu bit map under cpu/online. For example, if - * cpuid=5's flag is not set and max cpu is 7, the map file shows - * 0-4,6-7. This function parses it and returns cpumap. - */ -static virBitmapPtr -virHostCPUParseMapLinux(int max_cpuid, const char *path) -{ - virBitmapPtr map = NULL; - char *str = NULL; - - if (virFileReadAll(path, 5 * VIR_DOMAIN_CPUMASK_LEN, &str) < 0) - goto error; - - if (virBitmapParse(str, 0, &map, max_cpuid) < 0) - goto error; - - VIR_FREE(str); - return map; - - error: - VIR_FREE(str); - virBitmapFree(map); - return NULL; -} - static virBitmapPtr virNodeGetSiblingsListLinux(const char *dir, int cpu_id) @@ -1169,73 +331,6 @@ virNodeGetSiblingsListLinux(const char *dir, int cpu_id) #endif -static int -virHostCPUGetInfo(virArch hostarch, - unsigned int *cpus, - unsigned int *mhz, - unsigned int *nodes, - unsigned int *sockets, - unsigned int *cores, - unsigned int *threads) -{ -#ifdef __linux__ - int ret = -1; - FILE *cpuinfo = fopen(CPUINFO_PATH, "r"); - - if (!cpuinfo) { - virReportSystemError(errno, - _("cannot open %s"), CPUINFO_PATH); - return -1; - } - - ret = virHostCPUGetInfoPopulateLinux(cpuinfo, hostarch, - cpus, mhz, nodes, - sockets, cores, threads); - if (ret < 0) - goto cleanup; - - cleanup: - VIR_FORCE_FCLOSE(cpuinfo); - return ret; -#elif defined(__FreeBSD__) || defined(__APPLE__) - unsigned long cpu_freq; - size_t cpu_freq_len = sizeof(cpu_freq); - - *cpus = virHostCPUGetCountAppleFreeBSD(); - if (*cpus == -1) - return -1; - - *nodes = 1; - *sockets = 1; - *cores = *cpus; - *threads = 1; - -# ifdef __FreeBSD__ - if (sysctlbyname("dev.cpu.0.freq", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { - virReportSystemError(errno, "%s", _("cannot obtain CPU freq")); - return -1; - } - - *mhz = cpu_freq; -# else - if (sysctlbyname("hw.cpufrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { - virReportSystemError(errno, "%s", _("cannot obtain CPU freq")); - return -1; - } - - *mhz = cpu_freq / 1000000; -# endif - - return 0; -#else - /* XXX Solaris will need an impl later if they port QEMU driver */ - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node info not implemented on this platform")); - return -1; -#endif -} - - int nodeGetInfo(virNodeInfoPtr nodeinfo) { @@ -1260,36 +355,6 @@ nodeGetInfo(virNodeInfoPtr nodeinfo) return 0; } -int -virHostCPUGetStats(int cpuNum ATTRIBUTE_UNUSED, - virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, - int *nparams ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(0, -1); - -#ifdef __linux__ - { - int ret; - FILE *procstat = fopen(PROCSTAT_PATH, "r"); - if (!procstat) { - virReportSystemError(errno, - _("cannot open %s"), PROCSTAT_PATH); - return -1; - } - ret = virHostCPUGetStatsLinux(procstat, cpuNum, params, nparams); - VIR_FORCE_FCLOSE(procstat); - - return ret; - } -#elif defined(__FreeBSD__) - return virHostCPUGetStatsFreeBSD(cpuNum, params, nparams); -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node CPU stats not implemented on this platform")); - return -1; -#endif -} int virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, @@ -1348,146 +413,6 @@ virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, #endif } -int -virHostCPUGetCount(void) -{ -#if defined(__linux__) - /* To support older kernels that lack cpu/present, such as 2.6.18 - * in RHEL5, we fall back to count cpu/cpuNN entries; this assumes - * that such kernels also lack hotplug, and therefore cpu/cpuNN - * will be consecutive. - */ - char *present_path = NULL; - char *cpupath = NULL; - int ncpu = -1; - - if (!(present_path = virHostCPUGetPresentPathLinux())) - return -1; - - if (virFileExists(present_path)) { - ncpu = virHostCPUParseCountLinux(present_path); - goto cleanup; - } - - if (virAsprintf(&cpupath, "%s/cpu/cpu0", sysfs_system_path) < 0) - goto cleanup; - if (virFileExists(cpupath)) { - ncpu = 0; - do { - ncpu++; - VIR_FREE(cpupath); - if (virAsprintf(&cpupath, "%s/cpu/cpu%d", - sysfs_system_path, ncpu) < 0) { - ncpu = -1; - goto cleanup; - } - } while (virFileExists(cpupath)); - } else { - /* no cpu/cpu0: we give up */ - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("host cpu counting not supported on this node")); - } - - cleanup: - VIR_FREE(present_path); - VIR_FREE(cpupath); - return ncpu; -#elif defined(__FreeBSD__) || defined(__APPLE__) - return virHostCPUGetCountAppleFreeBSD(); -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("host cpu counting not implemented on this platform")); - return -1; -#endif -} - -virBitmapPtr -virHostCPUGetPresentBitmap(void) -{ -#ifdef __linux__ - virBitmapPtr present_cpus = NULL; - char *present_path = NULL; - int npresent_cpus; - - if ((npresent_cpus = virHostCPUGetCount()) < 0) - goto cleanup; - - if (!(present_path = virHostCPUGetPresentPathLinux())) - goto cleanup; - - /* If the cpu/present file is available, parse it and exit */ - if (virFileExists(present_path)) { - present_cpus = virHostCPUParseMapLinux(npresent_cpus, present_path); - goto cleanup; - } - - /* If the file is not available, we can assume that the kernel is - * too old to support non-consecutive CPU ids and just mark all - * possible CPUs as present */ - if (!(present_cpus = virBitmapNew(npresent_cpus))) - goto cleanup; - - virBitmapSetAll(present_cpus); - - cleanup: - VIR_FREE(present_path); - - return present_cpus; -#endif - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node present CPU map not implemented on this platform")); - return NULL; -} - -virBitmapPtr -virHostCPUGetOnlineBitmap(void) -{ -#ifdef __linux__ - char *online_path = NULL; - char *cpudir = NULL; - virBitmapPtr cpumap; - int present; - - present = virHostCPUGetCount(); - if (present < 0) - return NULL; - - if (!(online_path = virHostCPUGetOnlinePathLinux())) - return NULL; - if (virFileExists(online_path)) { - cpumap = virHostCPUParseMapLinux(present, online_path); - } else { - size_t i; - - cpumap = virBitmapNew(present); - if (!cpumap) - goto cleanup; - - if (virAsprintf(&cpudir, "%s/cpu", sysfs_system_path) < 0) - goto cleanup; - - for (i = 0; i < present; i++) { - int online = virNodeGetCpuValue(cpudir, i, "online", 1); - if (online < 0) { - virBitmapFree(cpumap); - cpumap = NULL; - goto cleanup; - } - if (online) - ignore_value(virBitmapSetBit(cpumap, i)); - } - } - - cleanup: - VIR_FREE(online_path); - VIR_FREE(cpudir); - return cpumap; -#else - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("node online CPU map not implemented on this platform")); - return NULL; -#endif -} #ifdef __linux__ static int @@ -1791,36 +716,6 @@ virHostMemGetParameters(virTypedParameterPtr params ATTRIBUTE_UNUSED, #endif } -int -virHostCPUGetMap(unsigned char **cpumap, - unsigned int *online, - unsigned int flags) -{ - virBitmapPtr cpus = NULL; - int ret = -1; - int dummy; - - virCheckFlags(0, -1); - - if (!cpumap && !online) - return virHostCPUGetCount(); - - if (!(cpus = virHostCPUGetOnlineBitmap())) - goto cleanup; - - if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) - goto cleanup; - if (online) - *online = virBitmapCountBits(cpus); - - ret = virBitmapSize(cpus); - - cleanup: - if (ret < 0 && cpumap) - VIR_FREE(*cpumap); - virBitmapFree(cpus); - return ret; -} static int nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED, @@ -2329,67 +1224,3 @@ virHostMemAllocPages(unsigned int npages, cleanup: return ret; } - -#if HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) - -/* Get the number of threads per subcore. - * - * This will be 2, 4 or 8 on POWER hosts, depending on the current - * micro-threading configuration, and 0 everywhere else. - * - * Returns the number of threads per subcore if subcores are in use, zero - * if subcores are not in use, and a negative value on error */ -int -virHostCPUGetThreadsPerSubcore(virArch arch) -{ - int threads_per_subcore = 0; - const char *kvmpath = "/dev/kvm"; - int kvmfd; - - if (ARCH_IS_PPC64(arch)) { - - /* It's okay if /dev/kvm doesn't exist, because - * a. we might be running in a guest - * b. the kvm module might not be installed or enabled - * In either case, falling back to the subcore-unaware thread - * counting logic is the right thing to do */ - if (!virFileExists(kvmpath)) - goto out; - - if ((kvmfd = open(kvmpath, O_RDONLY)) < 0) { - /* This can happen when running as a regular user if - * permissions are tight enough, in which case erroring out - * is better than silently falling back and reporting - * different nodeinfo depending on the user */ - virReportSystemError(errno, - _("Failed to open '%s'"), - kvmpath); - threads_per_subcore = -1; - goto out; - } - - /* For Phyp and KVM based guests the ioctl for KVM_CAP_PPC_SMT - * returns zero and both primary and secondary threads will be - * online */ - threads_per_subcore = ioctl(kvmfd, - KVM_CHECK_EXTENSION, - KVM_CAP_PPC_SMT); - - VIR_FORCE_CLOSE(kvmfd); - } - - out: - return threads_per_subcore; -} - -#else - -/* Fallback for nodeGetThreadsPerSubcore() used when KVM headers - * are not available on the system */ -int -virHostCPUGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED) -{ - return 0; -} - -#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */ diff --git a/src/nodeinfo.h b/src/nodeinfo.h index 08b9f9d..918fcb5 100644 --- a/src/nodeinfo.h +++ b/src/nodeinfo.h @@ -29,10 +29,6 @@ int nodeGetInfo(virNodeInfoPtr nodeinfo); int nodeCapsInitNUMA(virCapsPtr caps); -int virHostCPUGetStats(int cpuNum, - virNodeCPUStatsPtr params, - int *nparams, - unsigned int flags); int virHostMemGetStats(int cellNum, virNodeMemoryStatsPtr params, int *nparams, @@ -43,11 +39,6 @@ int virHostMemGetCellsFree(unsigned long long *freeMems, int virHostMemGetInfo(unsigned long long *mem, unsigned long long *freeMem); -virBitmapPtr virHostCPUGetPresentBitmap(void); -virBitmapPtr virHostCPUGetOnlineBitmap(void); -int virHostCPUGetCount(void); -int virHostCPUGetThreadsPerSubcore(virArch arch); - int virHostMemGetParameters(virTypedParameterPtr params, int *nparams, unsigned int flags); @@ -56,10 +47,6 @@ int virHostMemSetParameters(virTypedParameterPtr params, int nparams, unsigned int flags); -int virHostCPUGetMap(unsigned char **cpumap, - unsigned int *online, - unsigned int flags); - int virHostMemGetFreePages(unsigned int npages, unsigned int *pages, int startCell, diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index ef11745..910ccfe 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -49,6 +49,7 @@ #include "virbuffer.h" #include "openvz_conf.h" #include "nodeinfo.h" +#include "virhostcpu.h" #include "viralloc.h" #include "virfile.h" #include "virtypedparam.h" diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 38aab15..ec04fb7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -63,6 +63,7 @@ #include "datatypes.h" #include "virbuffer.h" #include "nodeinfo.h" +#include "virhostcpu.h" #include "virstats.h" #include "capabilities.h" #include "viralloc.h" diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 7d01e38..5ae38bf 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -54,7 +54,7 @@ #include "virhook.h" #include "virfile.h" #include "virpidfile.h" -#include "nodeinfo.h" +#include "virhostcpu.h" #include "domain_audit.h" #include "domain_nwfilter.h" #include "locking/domain_lock.h" diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 19ba901..4048b11 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -46,6 +46,7 @@ #include "uml_conf.h" #include "virbuffer.h" #include "nodeinfo.h" +#include "virhostcpu.h" #include "virstats.h" #include "capabilities.h" #include "viralloc.h" diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 05097f8..0124dbe 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -52,8 +52,7 @@ #include "virstring.h" #include "virsystemd.h" #include "virtypedparam.h" - -#include "nodeinfo.h" +#include "virhostcpu.h" VIR_LOG_INIT("util.cgroup"); diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c new file mode 100644 index 0000000..72ea943 --- /dev/null +++ b/src/util/virhostcpu.c @@ -0,0 +1,1299 @@ +/* + * virhostcpu.c: helper APIs for host CPU info + * + * Copyright (C) 2006-2016 Red Hat, Inc. + * Copyright (C) 2006 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdint.h> +#include <errno.h> +#include <dirent.h> +#include <sys/utsname.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <unistd.h> + +#if HAVE_LINUX_KVM_H +# include <linux/kvm.h> +#endif + +#if defined(__FreeBSD__) || defined(__APPLE__) +# include <sys/time.h> +# include <sys/types.h> +# include <sys/sysctl.h> +# include <sys/resource.h> +#endif + +#include "c-ctype.h" +#include "viralloc.h" +#include "virhostcpupriv.h" +#include "physmem.h" +#include "virerror.h" +#include "count-one-bits.h" +#include "intprops.h" +#include "virarch.h" +#include "virfile.h" +#include "virtypedparam.h" +#include "virstring.h" +#include "virnuma.h" +#include "virlog.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("util.hostcpu"); + + +#if defined(__FreeBSD__) || defined(__APPLE__) +static int +virHostCPUGetCountAppleFreeBSD(void) +{ + int ncpu_mib[2] = { CTL_HW, HW_NCPU }; + unsigned long ncpu; + size_t ncpu_len = sizeof(ncpu); + + if (sysctl(ncpu_mib, 2, &ncpu, &ncpu_len, NULL, 0) == -1) { + virReportSystemError(errno, "%s", _("Cannot obtain CPU count")); + return -1; + } + + return ncpu; +} +#endif /* defined(__FreeBSD__) || defined(__APPLE__) */ + +#ifdef __FreeBSD__ +# define BSD_CPU_STATS_ALL 4 +# define BSD_MEMORY_STATS_ALL 4 + +# define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / (stathz ? stathz : hz)) + +static int +virHostCPUGetStatsFreebsd(int cpuNum, + virNodeCPUStatsPtr params, + int *nparams) +{ + const char *sysctl_name; + long *cpu_times; + struct clockinfo clkinfo; + size_t i, j, cpu_times_size, clkinfo_size; + int cpu_times_num, offset, hz, stathz, ret = -1; + struct field_cpu_map { + const char *field; + int idx[CPUSTATES]; + } cpu_map[] = { + {VIR_NODE_CPU_STATS_KERNEL, {CP_SYS}}, + {VIR_NODE_CPU_STATS_USER, {CP_USER, CP_NICE}}, + {VIR_NODE_CPU_STATS_IDLE, {CP_IDLE}}, + {VIR_NODE_CPU_STATS_INTR, {CP_INTR}}, + {NULL, {0}} + }; + + if ((*nparams) == 0) { + *nparams = BSD_CPU_STATS_ALL; + return 0; + } + + if ((*nparams) != BSD_CPU_STATS_ALL) { + virReportInvalidArg(*nparams, + _("nparams in %s must be equal to %d"), + __FUNCTION__, BSD_CPU_STATS_ALL); + return -1; + } + + clkinfo_size = sizeof(clkinfo); + if (sysctlbyname("kern.clockrate", &clkinfo, &clkinfo_size, NULL, 0) < 0) { + virReportSystemError(errno, + _("sysctl failed for '%s'"), + "kern.clockrate"); + return -1; + } + + stathz = clkinfo.stathz; + hz = clkinfo.hz; + + if (cpuNum == VIR_NODE_CPU_STATS_ALL_CPUS) { + sysctl_name = "kern.cp_time"; + cpu_times_num = 1; + offset = 0; + } else { + sysctl_name = "kern.cp_times"; + cpu_times_num = virHostCPUGetCountAppleFreeBSD(); + + if (cpuNum >= cpu_times_num) { + virReportInvalidArg(cpuNum, + _("Invalid cpuNum in %s"), + __FUNCTION__); + return -1; + } + + offset = cpu_times_num * CPUSTATES; + } + + cpu_times_size = sizeof(long) * cpu_times_num * CPUSTATES; + + if (VIR_ALLOC_N(cpu_times, cpu_times_num * CPUSTATES) < 0) + goto cleanup; + + if (sysctlbyname(sysctl_name, cpu_times, &cpu_times_size, NULL, 0) < 0) { + virReportSystemError(errno, + _("sysctl failed for '%s'"), + sysctl_name); + goto cleanup; + } + + for (i = 0; cpu_map[i].field != NULL; i++) { + virNodeCPUStatsPtr param = ¶ms[i]; + + if (virStrcpyStatic(param->field, cpu_map[i].field) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Field '%s' too long for destination"), + cpu_map[i].field); + goto cleanup; + } + + param->value = 0; + for (j = 0; j < ARRAY_CARDINALITY(cpu_map[i].idx); j++) + param->value += cpu_times[offset + cpu_map[i].idx[j]] * TICK_TO_NSEC; + } + + ret = 0; + + cleanup: + VIR_FREE(cpu_times); + + return ret; +} + +#endif /* __FreeBSD__ */ + +#ifdef __linux__ +# define SYSFS_SYSTEM_PATH "/sys/devices/system" +# define CPUINFO_PATH "/proc/cpuinfo" +# define PROCSTAT_PATH "/proc/stat" +# define SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX 8192 + +# define LINUX_NB_CPU_STATS 4 + +static const char *sysfs_system_path = SYSFS_SYSTEM_PATH; + +void virHostCPUSetSysFSSystemPathLinux(const char *path) +{ + if (path) + sysfs_system_path = path; + else + sysfs_system_path = SYSFS_SYSTEM_PATH; +} + +/* Return the positive decimal contents of the given + * DIR/cpu%u/FILE, or -1 on error. If DEFAULT_VALUE is non-negative + * and the file could not be found, return that instead of an error; + * this is useful for machines that cannot hot-unplug cpu0, or where + * hot-unplugging is disabled, or where the kernel is too old + * to support NUMA cells, etc. */ +static int +virHostCPUGetValue(const char *dir, unsigned int cpu, const char *file, + int default_value) +{ + char *path; + FILE *pathfp; + int value = -1; + char value_str[INT_BUFSIZE_BOUND(value)]; + char *tmp; + + if (virAsprintf(&path, "%s/cpu%u/%s", dir, cpu, file) < 0) + return -1; + + pathfp = fopen(path, "r"); + if (pathfp == NULL) { + if (default_value >= 0 && errno == ENOENT) + value = default_value; + else + virReportSystemError(errno, _("cannot open %s"), path); + goto cleanup; + } + + if (fgets(value_str, sizeof(value_str), pathfp) == NULL) { + virReportSystemError(errno, _("cannot read from %s"), path); + goto cleanup; + } + if (virStrToLong_i(value_str, &tmp, 10, &value) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("could not convert '%s' to an integer"), + value_str); + goto cleanup; + } + + cleanup: + VIR_FORCE_FCLOSE(pathfp); + VIR_FREE(path); + + return value; +} + +static unsigned long +virHostCPUCountThreadSiblings(const char *dir, unsigned int cpu) +{ + unsigned long ret = 0; + char *path; + char *str = NULL; + size_t i; + + if (virAsprintf(&path, "%s/cpu%u/topology/thread_siblings", + dir, cpu) < 0) + return 0; + + if (!virFileExists(path)) { + /* If file doesn't exist, then pretend our only + * sibling is ourself */ + ret = 1; + goto cleanup; + } + + if (virFileReadAll(path, SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX, &str) < 0) + goto cleanup; + + for (i = 0; str[i] != '\0'; i++) { + if (c_isxdigit(str[i])) + ret += count_one_bits(virHexToBin(str[i])); + } + + cleanup: + VIR_FREE(str); + VIR_FREE(path); + return ret; +} + +static int +virHostCPUParseSocket(const char *dir, + virArch arch, + unsigned int cpu) +{ + int ret = virHostCPUGetValue(dir, cpu, "topology/physical_package_id", 0); + + if (ARCH_IS_ARM(arch) || ARCH_IS_PPC(arch) || ARCH_IS_S390(arch)) { + /* arm, ppc and s390(x) has -1 */ + if (ret < 0) + ret = 0; + } + + return ret; +} + +/* parses a node entry, returning number of processors in the node and + * filling arguments */ +static int +ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) +ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(6) +ATTRIBUTE_NONNULL(7) ATTRIBUTE_NONNULL(8) +ATTRIBUTE_NONNULL(9) +virHostCPUParseNode(const char *node, + virArch arch, + virBitmapPtr present_cpus_map, + virBitmapPtr online_cpus_map, + int threads_per_subcore, + int *sockets, + int *cores, + int *threads, + int *offline) +{ + /* Biggest value we can expect to be used as either socket id + * or core id. Bitmaps will need to be sized accordingly */ + const int ID_MAX = 4095; + int ret = -1; + int processors = 0; + DIR *cpudir = NULL; + struct dirent *cpudirent = NULL; + virBitmapPtr node_cpus_map = NULL; + virBitmapPtr sockets_map = NULL; + virBitmapPtr *cores_maps = NULL; + int npresent_cpus = virBitmapSize(present_cpus_map); + int sock_max = 0; + int sock; + int core; + size_t i; + int siblings; + unsigned int cpu; + int direrr; + + *threads = 0; + *cores = 0; + *sockets = 0; + + if (!(cpudir = opendir(node))) { + virReportSystemError(errno, _("cannot opendir %s"), node); + goto cleanup; + } + + /* Keep track of the CPUs that belong to the current node */ + if (!(node_cpus_map = virBitmapNew(npresent_cpus))) + goto cleanup; + + /* enumerate sockets in the node */ + if (!(sockets_map = virBitmapNew(ID_MAX + 1))) + goto cleanup; + + while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) { + if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) + continue; + + if (!virBitmapIsBitSet(present_cpus_map, cpu)) + continue; + + /* Mark this CPU as part of the current node */ + if (virBitmapSetBit(node_cpus_map, cpu) < 0) + goto cleanup; + + if (!virBitmapIsBitSet(online_cpus_map, cpu)) + continue; + + /* Parse socket */ + if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) + goto cleanup; + if (sock > ID_MAX) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Socket %d can't be handled (max socket is %d)"), + sock, ID_MAX); + goto cleanup; + } + + if (virBitmapSetBit(sockets_map, sock) < 0) + goto cleanup; + + if (sock > sock_max) + sock_max = sock; + } + + if (direrr < 0) + goto cleanup; + + sock_max++; + + /* allocate cores maps for each socket */ + if (VIR_ALLOC_N(cores_maps, sock_max) < 0) + goto cleanup; + + for (i = 0; i < sock_max; i++) + if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1))) + goto cleanup; + + /* Iterate over all CPUs in the node, in ascending order */ + for (cpu = 0; cpu < npresent_cpus; cpu++) { + + /* Skip CPUs that are not part of the current node */ + if (!virBitmapIsBitSet(node_cpus_map, cpu)) + continue; + + if (!virBitmapIsBitSet(online_cpus_map, cpu)) { + if (threads_per_subcore > 0 && + cpu % threads_per_subcore != 0 && + virBitmapIsBitSet(online_cpus_map, + cpu - (cpu % threads_per_subcore))) { + /* Secondary offline threads are counted as online when + * subcores are in use and the corresponding primary + * thread is online */ + processors++; + } else { + /* But they are counted as offline otherwise */ + (*offline)++; + } + continue; + } + + processors++; + + /* Parse socket */ + if ((sock = virHostCPUParseSocket(node, arch, cpu)) < 0) + goto cleanup; + if (!virBitmapIsBitSet(sockets_map, sock)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("CPU socket topology has changed")); + goto cleanup; + } + + /* Parse core */ + if (ARCH_IS_S390(arch)) { + /* logical cpu is equivalent to a core on s390 */ + core = cpu; + } else { + if ((core = virHostCPUGetValue(node, cpu, + "topology/core_id", 0)) < 0) + goto cleanup; + } + if (core > ID_MAX) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Core %d can't be handled (max core is %d)"), + core, ID_MAX); + goto cleanup; + } + + if (virBitmapSetBit(cores_maps[sock], core) < 0) + goto cleanup; + + if (!(siblings = virHostCPUCountThreadSiblings(node, cpu))) + goto cleanup; + + if (siblings > *threads) + *threads = siblings; + } + + /* finalize the returned data */ + *sockets = virBitmapCountBits(sockets_map); + + for (i = 0; i < sock_max; i++) { + if (!virBitmapIsBitSet(sockets_map, i)) + continue; + + core = virBitmapCountBits(cores_maps[i]); + if (core > *cores) + *cores = core; + } + + if (threads_per_subcore > 0) { + /* The thread count ignores offline threads, which means that only + * only primary threads have been considered so far. If subcores + * are in use, we need to also account for secondary threads */ + *threads *= threads_per_subcore; + } + ret = processors; + + cleanup: + /* don't shadow a more serious error */ + if (cpudir && closedir(cpudir) < 0 && ret >= 0) { + virReportSystemError(errno, _("problem closing %s"), node); + ret = -1; + } + if (cores_maps) + for (i = 0; i < sock_max; i++) + virBitmapFree(cores_maps[i]); + VIR_FREE(cores_maps); + virBitmapFree(sockets_map); + virBitmapFree(node_cpus_map); + + return ret; +} + +/* Check whether the host subcore configuration is valid. + * + * A valid configuration is one where no secondary thread is online; + * the primary thread in a subcore is always the first one */ +static bool +virHostCPUHasValidSubcoreConfiguration(int threads_per_subcore) +{ + virBitmapPtr online_cpus = NULL; + int cpu = -1; + bool ret = false; + + /* No point in checking if subcores are not in use */ + if (threads_per_subcore <= 0) + goto cleanup; + + if (!(online_cpus = virHostCPUGetOnlineBitmap())) + goto cleanup; + + while ((cpu = virBitmapNextSetBit(online_cpus, cpu)) >= 0) { + + /* A single online secondary thread is enough to + * make the configuration invalid */ + if (cpu % threads_per_subcore != 0) + goto cleanup; + } + + ret = true; + + cleanup: + virBitmapFree(online_cpus); + + return ret; +} + +int +virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, + virArch arch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) +{ + virBitmapPtr present_cpus_map = NULL; + virBitmapPtr online_cpus_map = NULL; + char line[1024]; + DIR *nodedir = NULL; + struct dirent *nodedirent = NULL; + int nodecpus, nodecores, nodesockets, nodethreads, offline = 0; + int threads_per_subcore = 0; + unsigned int node; + int ret = -1; + char *sysfs_nodedir = NULL; + char *sysfs_cpudir = NULL; + int direrr; + + *mhz = 0; + *cpus = *nodes = *sockets = *cores = *threads = 0; + + /* Start with parsing CPU clock speed from /proc/cpuinfo */ + while (fgets(line, sizeof(line), cpuinfo) != NULL) { + if (ARCH_IS_X86(arch)) { + char *buf = line; + if (STRPREFIX(buf, "cpu MHz")) { + char *p; + unsigned int ui; + + buf += 7; + while (*buf && c_isspace(*buf)) + buf++; + + if (*buf != ':' || !buf[1]) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("parsing cpu MHz from cpuinfo")); + goto cleanup; + } + + if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && + /* Accept trailing fractional part. */ + (*p == '\0' || *p == '.' || c_isspace(*p))) + *mhz = ui; + } + } else if (ARCH_IS_PPC(arch)) { + char *buf = line; + if (STRPREFIX(buf, "clock")) { + char *p; + unsigned int ui; + + buf += 5; + while (*buf && c_isspace(*buf)) + buf++; + + if (*buf != ':' || !buf[1]) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("parsing cpu MHz from cpuinfo")); + goto cleanup; + } + + if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 && + /* Accept trailing fractional part. */ + (*p == '\0' || *p == '.' || c_isspace(*p))) + *mhz = ui; + /* No other interesting infos are available in /proc/cpuinfo. + * However, there is a line identifying processor's version, + * identification and machine, but we don't want it to be caught + * and parsed in next iteration, because it is not in expected + * format and thus lead to error. */ + } + } else if (ARCH_IS_ARM(arch)) { + char *buf = line; + if (STRPREFIX(buf, "BogoMIPS")) { + char *p; + unsigned int ui; + + buf += 8; + while (*buf && c_isspace(*buf)) + buf++; + + if (*buf != ':' || !buf[1]) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("parsing cpu MHz from cpuinfo")); + goto cleanup; + } + + if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 + /* Accept trailing fractional part. */ + && (*p == '\0' || *p == '.' || c_isspace(*p))) + *mhz = ui; + } + } else if (ARCH_IS_S390(arch)) { + /* s390x has no realistic value for CPU speed, + * assign a value of zero to signify this */ + *mhz = 0; + } else { + VIR_WARN("Parser for /proc/cpuinfo needs to be adapted for your architecture"); + break; + } + } + + /* Get information about what CPUs are present in the host and what + * CPUs are online, so that we don't have to so for each node */ + present_cpus_map = virHostCPUGetPresentBitmap(); + if (!present_cpus_map) + goto cleanup; + online_cpus_map = virHostCPUGetOnlineBitmap(); + if (!online_cpus_map) + goto cleanup; + + /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the + * core, node, socket, thread and topology information from /sys + */ + if (virAsprintf(&sysfs_nodedir, "%s/node", sysfs_system_path) < 0) + goto cleanup; + + if (!(nodedir = opendir(sysfs_nodedir))) { + /* the host isn't probably running a NUMA architecture */ + goto fallback; + } + + /* PPC-KVM needs the secondary threads of a core to be offline on the + * host. The kvm scheduler brings the secondary threads online in the + * guest context. Moreover, P8 processor has split-core capability + * where, there can be 1,2 or 4 subcores per core. The primaries of the + * subcores alone will be online on the host for a subcore in the + * host. Even though the actual threads per core for P8 processor is 8, + * depending on the subcores_per_core = 1, 2 or 4, the threads per + * subcore will vary accordingly to 8, 4 and 2 repectively. + * So, On host threads_per_core what is arrived at from sysfs in the + * current logic is actually the subcores_per_core. Threads per subcore + * can only be obtained from the kvm device. For example, on P8 wih 1 + * core having 8 threads, sub_cores_percore=4, the threads 0,2,4 & 6 + * will be online. The sysfs reflects this and in the current logic + * variable 'threads' will be 4 which is nothing but subcores_per_core. + * If the user tampers the cpu online/offline states using chcpu or other + * means, then it is an unsupported configuration for kvm. + * The code below tries to keep in mind + * - when the libvirtd is run inside a KVM guest or Phyp based guest. + * - Or on the kvm host where user manually tampers the cpu states to + * offline/online randomly. + * On hosts other than POWER this will be 0, in which case a simpler + * thread-counting logic will be used */ + if ((threads_per_subcore = virHostCPUGetThreadsPerSubcore(arch)) < 0) + goto cleanup; + + /* If the subcore configuration is not valid, just pretend subcores + * are not in use and count threads one by one */ + if (!virHostCPUHasValidSubcoreConfiguration(threads_per_subcore)) + threads_per_subcore = 0; + + while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) { + if (sscanf(nodedirent->d_name, "node%u", &node) != 1) + continue; + + (*nodes)++; + + if (virAsprintf(&sysfs_cpudir, "%s/node/%s", + sysfs_system_path, nodedirent->d_name) < 0) + goto cleanup; + + if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) + goto cleanup; + + VIR_FREE(sysfs_cpudir); + + *cpus += nodecpus; + + if (nodesockets > *sockets) + *sockets = nodesockets; + + if (nodecores > *cores) + *cores = nodecores; + + if (nodethreads > *threads) + *threads = nodethreads; + } + + if (direrr < 0) + goto cleanup; + + if (*cpus && *nodes) + goto done; + + fallback: + VIR_FREE(sysfs_cpudir); + + if (virAsprintf(&sysfs_cpudir, "%s/cpu", sysfs_system_path) < 0) + goto cleanup; + + if ((nodecpus = virHostCPUParseNode(sysfs_cpudir, arch, + present_cpus_map, + online_cpus_map, + threads_per_subcore, + &nodesockets, &nodecores, + &nodethreads, &offline)) < 0) + goto cleanup; + + *nodes = 1; + *cpus = nodecpus; + *sockets = nodesockets; + *cores = nodecores; + *threads = nodethreads; + + done: + /* There should always be at least one cpu, socket, node, and thread. */ + if (*cpus == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no CPUs found")); + goto cleanup; + } + + if (*sockets == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no sockets found")); + goto cleanup; + } + + if (*threads == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no threads found")); + goto cleanup; + } + + /* Now check if the topology makes sense. There are machines that don't + * expose their real number of nodes or for example the AMD Bulldozer + * architecture that exposes their Clustered integer core modules as both + * threads and cores. This approach throws off our detection. Unfortunately + * the nodeinfo structure isn't designed to carry the full topology so + * we're going to lie about the detected topology to notify the user + * to check the host capabilities for the actual topology. */ + if ((*nodes * + *sockets * + *cores * + *threads) != (*cpus + offline)) { + *nodes = 1; + *sockets = 1; + *cores = *cpus + offline; + *threads = 1; + } + + ret = 0; + + cleanup: + /* don't shadow a more serious error */ + if (nodedir && closedir(nodedir) < 0 && ret >= 0) { + virReportSystemError(errno, _("problem closing %s"), sysfs_nodedir); + ret = -1; + } + + virBitmapFree(present_cpus_map); + virBitmapFree(online_cpus_map); + VIR_FREE(sysfs_nodedir); + VIR_FREE(sysfs_cpudir); + return ret; +} + +static int +virHostCPUStatsAssign(virNodeCPUStatsPtr param, + const char *name, + unsigned long long value) +{ + if (virStrcpyStatic(param->field, name) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("kernel cpu time field is too long" + " for the destination")); + return -1; + } + param->value = value; + return 0; +} + +# define TICK_TO_NSEC (1000ull * 1000ull * 1000ull / sysconf(_SC_CLK_TCK)) + +int +virHostCPUGetStatsLinux(FILE *procstat, + int cpuNum, + virNodeCPUStatsPtr params, + int *nparams) +{ + int ret = -1; + char line[1024]; + unsigned long long usr, ni, sys, idle, iowait; + unsigned long long irq, softirq, steal, guest, guest_nice; + char cpu_header[4 + INT_BUFSIZE_BOUND(cpuNum)]; + + if ((*nparams) == 0) { + /* Current number of cpu stats supported by linux */ + *nparams = LINUX_NB_CPU_STATS; + ret = 0; + goto cleanup; + } + + if ((*nparams) != LINUX_NB_CPU_STATS) { + virReportInvalidArg(*nparams, + _("nparams in %s must be equal to %d"), + __FUNCTION__, LINUX_NB_CPU_STATS); + goto cleanup; + } + + if (cpuNum == VIR_NODE_CPU_STATS_ALL_CPUS) { + strcpy(cpu_header, "cpu "); + } else { + snprintf(cpu_header, sizeof(cpu_header), "cpu%d ", cpuNum); + } + + while (fgets(line, sizeof(line), procstat) != NULL) { + char *buf = line; + + if (STRPREFIX(buf, cpu_header)) { /* aka logical CPU time */ + if (sscanf(buf, + "%*s %llu %llu %llu %llu %llu" // user ~ iowait + "%llu %llu %llu %llu %llu", // irq ~ guest_nice + &usr, &ni, &sys, &idle, &iowait, + &irq, &softirq, &steal, &guest, &guest_nice) < 4) { + continue; + } + + if (virHostCPUStatsAssign(¶ms[0], VIR_NODE_CPU_STATS_KERNEL, + (sys + irq + softirq) * TICK_TO_NSEC) < 0) + goto cleanup; + + if (virHostCPUStatsAssign(¶ms[1], VIR_NODE_CPU_STATS_USER, + (usr + ni) * TICK_TO_NSEC) < 0) + goto cleanup; + + if (virHostCPUStatsAssign(¶ms[2], VIR_NODE_CPU_STATS_IDLE, + idle * TICK_TO_NSEC) < 0) + goto cleanup; + + if (virHostCPUStatsAssign(¶ms[3], VIR_NODE_CPU_STATS_IOWAIT, + iowait * TICK_TO_NSEC) < 0) + goto cleanup; + + ret = 0; + goto cleanup; + } + } + + virReportInvalidArg(cpuNum, + _("Invalid cpuNum in %s"), + __FUNCTION__); + + cleanup: + return ret; +} + + +static char * +virHostCPUGetGlobalPathLinux(const char *file) +{ + char *path = NULL; + + if (virAsprintf(&path, "%s/cpu/%s", sysfs_system_path, file) < 0) + return NULL; + + return path; +} + +static char * +virHostCPUGetPresentPathLinux(void) +{ + return virHostCPUGetGlobalPathLinux("present"); +} + +static char * +virHostCPUGetOnlinePathLinux(void) +{ + return virHostCPUGetGlobalPathLinux("online"); +} + +/* Determine the number of CPUs (maximum CPU id + 1) from a file containing + * a list of CPU ids, like the Linux sysfs cpu/present file */ +static int +virHostCPUParseCountLinux(const char *path) +{ + char *str = NULL; + char *tmp; + int ret = -1; + + if (virFileReadAll(path, 5 * VIR_HOST_CPU_MASK_LEN, &str) < 0) + goto cleanup; + + tmp = str; + do { + if (virStrToLong_i(tmp, &tmp, 10, &ret) < 0 || + !strchr(",-\n", *tmp)) { + virReportError(VIR_ERR_NO_SUPPORT, + _("failed to parse %s"), path); + ret = -1; + goto cleanup; + } + } while (*tmp++ != '\n'); + ret++; + + cleanup: + VIR_FREE(str); + return ret; +} + +/* + * Linux maintains cpu bit map under cpu/online. For example, if + * cpuid=5's flag is not set and max cpu is 7, the map file shows + * 0-4,6-7. This function parses it and returns cpumap. + */ +static virBitmapPtr +virHostCPUParseMapLinux(int max_cpuid, const char *path) +{ + virBitmapPtr map = NULL; + char *str = NULL; + + if (virFileReadAll(path, 5 * VIR_HOST_CPU_MASK_LEN, &str) < 0) + goto error; + + if (virBitmapParse(str, 0, &map, max_cpuid) < 0) + goto error; + + VIR_FREE(str); + return map; + + error: + VIR_FREE(str); + virBitmapFree(map); + return NULL; +} +#endif + + +int +virHostCPUGetInfo(virArch hostarch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads) +{ +#ifdef __linux__ + int ret = -1; + FILE *cpuinfo = fopen(CPUINFO_PATH, "r"); + + if (!cpuinfo) { + virReportSystemError(errno, + _("cannot open %s"), CPUINFO_PATH); + return -1; + } + + ret = virHostCPUGetInfoPopulateLinux(cpuinfo, hostarch, + cpus, mhz, nodes, + sockets, cores, threads); + if (ret < 0) + goto cleanup; + + cleanup: + VIR_FORCE_FCLOSE(cpuinfo); + return ret; +#elif defined(__FreeBSD__) || defined(__APPLE__) + unsigned long cpu_freq; + size_t cpu_freq_len = sizeof(cpu_freq); + + *cpus = virHostCPUGetCountAppleFreeBSD(); + if (*cpus == -1) + return -1; + + *nodes = 1; + *sockets = 1; + *cores = *cpus; + *threads = 1; + +# ifdef __FreeBSD__ + if (sysctlbyname("dev.cpu.0.freq", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { + virReportSystemError(errno, "%s", _("cannot obtain CPU freq")); + return -1; + } + + *mhz = cpu_freq; +# else + if (sysctlbyname("hw.cpufrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) { + virReportSystemError(errno, "%s", _("cannot obtain CPU freq")); + return -1; + } + + *mhz = cpu_freq / 1000000; +# endif + + return 0; +#else + /* XXX Solaris will need an impl later if they port QEMU driver */ + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node info not implemented on this platform")); + return -1; +#endif +} + + +int +virHostCPUGetStats(int cpuNum ATTRIBUTE_UNUSED, + virNodeCPUStatsPtr params ATTRIBUTE_UNUSED, + int *nparams ATTRIBUTE_UNUSED, + unsigned int flags) +{ + virCheckFlags(0, -1); + +#ifdef __linux__ + { + int ret; + FILE *procstat = fopen(PROCSTAT_PATH, "r"); + if (!procstat) { + virReportSystemError(errno, + _("cannot open %s"), PROCSTAT_PATH); + return -1; + } + ret = virHostCPUGetStatsLinux(procstat, cpuNum, params, nparams); + VIR_FORCE_FCLOSE(procstat); + + return ret; + } +#elif defined(__FreeBSD__) + return virHostCPUGetStatsFreeBSD(cpuNum, params, nparams); +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node CPU stats not implemented on this platform")); + return -1; +#endif +} + + +int +virHostCPUGetCount(void) +{ +#if defined(__linux__) + /* To support older kernels that lack cpu/present, such as 2.6.18 + * in RHEL5, we fall back to count cpu/cpuNN entries; this assumes + * that such kernels also lack hotplug, and therefore cpu/cpuNN + * will be consecutive. + */ + char *present_path = NULL; + char *cpupath = NULL; + int ncpu = -1; + + if (!(present_path = virHostCPUGetPresentPathLinux())) + return -1; + + if (virFileExists(present_path)) { + ncpu = virHostCPUParseCountLinux(present_path); + goto cleanup; + } + + if (virAsprintf(&cpupath, "%s/cpu/cpu0", sysfs_system_path) < 0) + goto cleanup; + if (virFileExists(cpupath)) { + ncpu = 0; + do { + ncpu++; + VIR_FREE(cpupath); + if (virAsprintf(&cpupath, "%s/cpu/cpu%d", + sysfs_system_path, ncpu) < 0) { + ncpu = -1; + goto cleanup; + } + } while (virFileExists(cpupath)); + } else { + /* no cpu/cpu0: we give up */ + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("host cpu counting not supported on this node")); + } + + cleanup: + VIR_FREE(present_path); + VIR_FREE(cpupath); + return ncpu; +#elif defined(__FreeBSD__) || defined(__APPLE__) + return virHostCPUGetCountAppleFreeBSD(); +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("host cpu counting not implemented on this platform")); + return -1; +#endif +} + +virBitmapPtr +virHostCPUGetPresentBitmap(void) +{ +#ifdef __linux__ + virBitmapPtr present_cpus = NULL; + char *present_path = NULL; + int npresent_cpus; + + if ((npresent_cpus = virHostCPUGetCount()) < 0) + goto cleanup; + + if (!(present_path = virHostCPUGetPresentPathLinux())) + goto cleanup; + + /* If the cpu/present file is available, parse it and exit */ + if (virFileExists(present_path)) { + present_cpus = virHostCPUParseMapLinux(npresent_cpus, present_path); + goto cleanup; + } + + /* If the file is not available, we can assume that the kernel is + * too old to support non-consecutive CPU ids and just mark all + * possible CPUs as present */ + if (!(present_cpus = virBitmapNew(npresent_cpus))) + goto cleanup; + + virBitmapSetAll(present_cpus); + + cleanup: + VIR_FREE(present_path); + + return present_cpus; +#endif + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node present CPU map not implemented on this platform")); + return NULL; +} + +virBitmapPtr +virHostCPUGetOnlineBitmap(void) +{ +#ifdef __linux__ + char *online_path = NULL; + char *cpudir = NULL; + virBitmapPtr cpumap; + int present; + + present = virHostCPUGetCount(); + if (present < 0) + return NULL; + + if (!(online_path = virHostCPUGetOnlinePathLinux())) + return NULL; + if (virFileExists(online_path)) { + cpumap = virHostCPUParseMapLinux(present, online_path); + } else { + size_t i; + + cpumap = virBitmapNew(present); + if (!cpumap) + goto cleanup; + + if (virAsprintf(&cpudir, "%s/cpu", sysfs_system_path) < 0) + goto cleanup; + + for (i = 0; i < present; i++) { + int online = virHostCPUGetValue(cpudir, i, "online", 1); + if (online < 0) { + virBitmapFree(cpumap); + cpumap = NULL; + goto cleanup; + } + if (online) + ignore_value(virBitmapSetBit(cpumap, i)); + } + } + + cleanup: + VIR_FREE(online_path); + VIR_FREE(cpudir); + return cpumap; +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("node online CPU map not implemented on this platform")); + return NULL; +#endif +} + + +int +virHostCPUGetMap(unsigned char **cpumap, + unsigned int *online, + unsigned int flags) +{ + virBitmapPtr cpus = NULL; + int ret = -1; + int dummy; + + virCheckFlags(0, -1); + + if (!cpumap && !online) + return virHostCPUGetCount(); + + if (!(cpus = virHostCPUGetOnlineBitmap())) + goto cleanup; + + if (cpumap && virBitmapToData(cpus, cpumap, &dummy) < 0) + goto cleanup; + if (online) + *online = virBitmapCountBits(cpus); + + ret = virBitmapSize(cpus); + + cleanup: + if (ret < 0 && cpumap) + VIR_FREE(*cpumap); + virBitmapFree(cpus); + return ret; +} + + +#if HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) + +/* Get the number of threads per subcore. + * + * This will be 2, 4 or 8 on POWER hosts, depending on the current + * micro-threading configuration, and 0 everywhere else. + * + * Returns the number of threads per subcore if subcores are in use, zero + * if subcores are not in use, and a negative value on error */ +int +virHostCPUGetThreadsPerSubcore(virArch arch) +{ + int threads_per_subcore = 0; + const char *kvmpath = "/dev/kvm"; + int kvmfd; + + if (ARCH_IS_PPC64(arch)) { + + /* It's okay if /dev/kvm doesn't exist, because + * a. we might be running in a guest + * b. the kvm module might not be installed or enabled + * In either case, falling back to the subcore-unaware thread + * counting logic is the right thing to do */ + if (!virFileExists(kvmpath)) + goto out; + + if ((kvmfd = open(kvmpath, O_RDONLY)) < 0) { + /* This can happen when running as a regular user if + * permissions are tight enough, in which case erroring out + * is better than silently falling back and reporting + * different nodeinfo depending on the user */ + virReportSystemError(errno, + _("Failed to open '%s'"), + kvmpath); + threads_per_subcore = -1; + goto out; + } + + /* For Phyp and KVM based guests the ioctl for KVM_CAP_PPC_SMT + * returns zero and both primary and secondary threads will be + * online */ + threads_per_subcore = ioctl(kvmfd, + KVM_CHECK_EXTENSION, + KVM_CAP_PPC_SMT); + + VIR_FORCE_CLOSE(kvmfd); + } + + out: + return threads_per_subcore; +} + +#else + +/* Fallback for nodeGetThreadsPerSubcore() used when KVM headers + * are not available on the system */ +int +virHostCPUGetThreadsPerSubcore(virArch arch ATTRIBUTE_UNUSED) +{ + return 0; +} + +#endif /* HAVE_LINUX_KVM_H && defined(KVM_CAP_PPC_SMT) */ diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h new file mode 100644 index 0000000..e5ffc70 --- /dev/null +++ b/src/util/virhostcpu.h @@ -0,0 +1,54 @@ +/* + * virhostcpu.h: helper APIs for host CPU info + * + * Copyright (C) 2006-2016 Red Hat, Inc. + * Copyright (C) 2006 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#ifndef __VIR_HOSTCPU_H__ +# define __VIR_HOSTCPU_H__ + +# include "internal.h" +# include "virarch.h" +# include "virbitmap.h" + +# define VIR_HOST_CPU_MASK_LEN 1024 + +int virHostCPUGetStats(int cpuNum, + virNodeCPUStatsPtr params, + int *nparams, + unsigned int flags); + +virBitmapPtr virHostCPUGetPresentBitmap(void); +virBitmapPtr virHostCPUGetOnlineBitmap(void); +int virHostCPUGetCount(void); +int virHostCPUGetThreadsPerSubcore(virArch arch); + +int virHostCPUGetMap(unsigned char **cpumap, + unsigned int *online, + unsigned int flags); +int virHostCPUGetInfo(virArch hostarch, + unsigned int *cpus, + unsigned int *mhz, + unsigned int *nodes, + unsigned int *sockets, + unsigned int *cores, + unsigned int *threads); + +#endif /* __VIR_HOSTCPU_H__*/ diff --git a/src/nodeinfopriv.h b/src/util/virhostcpupriv.h similarity index 86% rename from src/nodeinfopriv.h rename to src/util/virhostcpupriv.h index 0fd4391..de30983 100644 --- a/src/nodeinfopriv.h +++ b/src/util/virhostcpupriv.h @@ -1,7 +1,7 @@ /* - * nodeinfopriv.h: internal APIs for testing nodeinfo code + * virhostcpupriv.h: helper APIs for host CPU info * - * Copyright (C) 2014 Red Hat, Inc. + * Copyright (C) 2014-2016 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,10 +19,10 @@ * */ -#ifndef __NODEINFO_PRIV_H__ -# define __NODEINFO_PRIV_H__ +#ifndef __VIR_HOSTCPU_PRIV_H__ +# define __VIR_HOSTCPU_PRIV_H__ -# include "nodeinfo.h" +# include "virhostcpu.h" # ifdef __linux__ void virHostCPUSetSysFSSystemPathLinux(const char *path); @@ -42,4 +42,4 @@ int virHostCPUGetStatsLinux(FILE *procstat, int *nparams); # endif -#endif /* __NODEINFO_PRIV_H__ */ +#endif /* __VIR_HOSTCPU_PRIV_H__ */ diff --git a/tests/Makefile.am b/tests/Makefile.am index db4f88b..16677cb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -107,7 +107,7 @@ EXTRA_DIST = \ networkxml2xmlupdateout \ nodedevschemadata \ nodedevschematest \ - nodeinfodata \ + virhostcpudata \ nssdata \ nwfilterschematest \ nwfilterxml2firewalldata \ @@ -160,7 +160,7 @@ EXTRA_DIST = \ test_helpers = commandhelper ssh test_conf test_programs = virshtest sockettest \ - nodeinfotest virbuftest \ + virhostcputest virbuftest \ commandtest seclabeltest \ virhashtest \ viratomictest \ @@ -426,7 +426,7 @@ test_libraries = libshunload.la \ vircgroupmock.la \ virpcimock.la \ virnetdevmock.la \ - nodeinfomock.la \ + virhostcpumock.la \ nssmock.la \ $(NULL) if WITH_QEMU @@ -875,9 +875,9 @@ test_conf_SOURCES = \ test_conf.c test_conf_LDADD = $(LDADDS) -nodeinfotest_SOURCES = \ - nodeinfotest.c testutils.h testutils.c -nodeinfotest_LDADD = $(LDADDS) +virhostcputest_SOURCES = \ + virhostcputest.c testutils.h testutils.c +virhostcputest_LDADD = $(LDADDS) commandtest_SOURCES = \ commandtest.c testutils.h testutils.c @@ -1068,11 +1068,11 @@ virpcimock_la_CFLAGS = $(AM_CFLAGS) virpcimock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) virpcimock_la_LIBADD = $(MOCKLIBS_LIBS) -nodeinfomock_la_SOURCES = \ - nodeinfomock.c -nodeinfomock_la_CFLAGS = $(AM_CFLAGS) -nodeinfomock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) -nodeinfomock_la_LIBADD = $(MOCKLIBS_LIBS) +virhostcpumock_la_SOURCES = \ + virhostcpumock.c +virhostcpumock_la_CFLAGS = $(AM_CFLAGS) +virhostcpumock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) +virhostcpumock_la_LIBADD = $(MOCKLIBS_LIBS) nsstest_SOURCES = \ nsstest.c testutils.h testutils.c diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 148721d..566ffa8 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -34,7 +34,7 @@ # include "virfile.h" # include "virbuffer.h" # include "testutilslxc.h" -# include "nodeinfo.h" +# include "virhostcpu.h" # define VIR_FROM_THIS VIR_FROM_NONE diff --git a/tests/nodeinfodata/linux-aarch64-f21-mustang.cpuinfo b/tests/virhostcpudata/linux-aarch64-f21-mustang.cpuinfo similarity index 100% rename from tests/nodeinfodata/linux-aarch64-f21-mustang.cpuinfo rename to tests/virhostcpudata/linux-aarch64-f21-mustang.cpuinfo diff --git a/tests/nodeinfodata/linux-aarch64-f21-mustang.expected b/tests/virhostcpudata/linux-aarch64-f21-mustang.expected similarity index 100% rename from tests/nodeinfodata/linux-aarch64-f21-mustang.expected rename to tests/virhostcpudata/linux-aarch64-f21-mustang.expected diff --git a/tests/nodeinfodata/linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo b/tests/virhostcpudata/linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo similarity index 100% rename from tests/nodeinfodata/linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo rename to tests/virhostcpudata/linux-aarch64-rhelsa-3.19.0-mustang.cpuinfo [...snipped countless more renames...] diff --git a/tests/nodeinfomock.c b/tests/virhostcpumock.c similarity index 95% rename from tests/nodeinfomock.c rename to tests/virhostcpumock.c index ac12b5e..00d10f1 100644 --- a/tests/nodeinfomock.c +++ b/tests/virhostcpumock.c @@ -19,8 +19,7 @@ #include <config.h> -#include "internal.h" -#include "nodeinfo.h" +#include "virhostcpu.h" int virHostCPUGetThreadsPerSubcore(virArch arch) diff --git a/tests/nodeinfotest.c b/tests/virhostcputest.c similarity index 89% rename from tests/nodeinfotest.c rename to tests/virhostcputest.c index 50b1c82..0643876 100644 --- a/tests/nodeinfotest.c +++ b/tests/virhostcputest.c @@ -7,7 +7,7 @@ #include "testutils.h" #include "internal.h" -#include "nodeinfopriv.h" +#include "virhostcpupriv.h" #include "virfile.h" #include "virstring.h" @@ -155,26 +155,26 @@ linuxCPUStatsCompareFiles(const char *cpustatfile, } -struct linuxTestNodeInfoData { +struct linuxTestHostCPUData { const char *testName; virArch arch; }; static int -linuxTestNodeInfo(const void *opaque) +linuxTestHostCPU(const void *opaque) { int result = -1; char *cpuinfo = NULL; char *sysfs_prefix = NULL; char *output = NULL; - struct linuxTestNodeInfoData *data = (struct linuxTestNodeInfoData *) opaque; + struct linuxTestHostCPUData *data = (struct linuxTestHostCPUData *) opaque; const char *archStr = virArchToString(data->arch); - if (virAsprintf(&sysfs_prefix, "%s/nodeinfodata/linux-%s", + if (virAsprintf(&sysfs_prefix, "%s/virhostcpudata/linux-%s", abs_srcdir, data->testName) < 0 || - virAsprintf(&cpuinfo, "%s/nodeinfodata/linux-%s-%s.cpuinfo", + virAsprintf(&cpuinfo, "%s/virhostcpudata/linux-%s-%s.cpuinfo", abs_srcdir, archStr, data->testName) < 0 || - virAsprintf(&output, "%s/nodeinfodata/linux-%s-%s.expected", + virAsprintf(&output, "%s/virhostcpudata/linux-%s-%s.expected", abs_srcdir, archStr, data->testName) < 0) { goto cleanup; } @@ -204,9 +204,9 @@ linuxTestNodeCPUStats(const void *data) char *cpustatfile = NULL; char *outfile = NULL; - if (virAsprintf(&cpustatfile, "%s/nodeinfodata/linux-cpustat-%s.stat", + if (virAsprintf(&cpustatfile, "%s/virhostcpudata/linux-cpustat-%s.stat", abs_srcdir, testData->name) < 0 || - virAsprintf(&outfile, "%s/nodeinfodata/linux-cpustat-%s.out", + virAsprintf(&outfile, "%s/virhostcpudata/linux-cpustat-%s.out", abs_srcdir, testData->name) < 0) goto fail; @@ -225,7 +225,7 @@ mymain(void) { int ret = 0; size_t i; - const struct linuxTestNodeInfoData nodeData[] = { + const struct linuxTestHostCPUData nodeData[] = { {"test1", VIR_ARCH_X86_64}, {"test1", VIR_ARCH_PPC}, {"test2", VIR_ARCH_X86_64}, @@ -251,7 +251,7 @@ mymain(void) return EXIT_FAILURE; for (i = 0; i < ARRAY_CARDINALITY(nodeData); i++) - if (virtTestRun(nodeData[i].testName, linuxTestNodeInfo, &nodeData[i]) != 0) + if (virtTestRun(nodeData[i].testName, linuxTestHostCPU, &nodeData[i]) != 0) ret = -1; # define DO_TEST_CPU_STATS(name, ncpus) \ @@ -266,6 +266,6 @@ mymain(void) return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } -VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/nodeinfomock.so") +VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virhostcpumock.so") #endif /* __linux__ */ -- 2.5.5

On 04/14/2016 11:30 AM, Daniel P. Berrange wrote:
Move all APIs with a virHostCPU name prefix out into new util/virhostcpu.h & util/virhostcpu.c files
looks like nodeinfopriv. turns into virhostcpupriv.h
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- cfg.mk | 6 +- po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/libvirt_linux.syms | 2 +- src/lxc/lxc_controller.c | 2 +- src/lxc/lxc_driver.c | 1 + src/nodeinfo.c | 1171 +----------------- src/nodeinfo.h | 13 - src/openvz/openvz_driver.c | 1 + src/qemu/qemu_driver.c | 1 + src/qemu/qemu_process.c | 2 +- src/uml/uml_driver.c | 1 + src/util/vircgroup.c | 3 +- src/util/virhostcpu.c | 1299 ++++++++++++++++++++ src/util/virhostcpu.h | 54 + src/{nodeinfopriv.h => util/virhostcpupriv.h} | 12 +- [...snipped countless more test data renames....] rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test7.expected (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.cpuinfo (100%) rename tests/{nodeinfodata => virhostcpudata}/linux-x86_64-test8.expected (100%) rename tests/{nodeinfomock.c => virhostcpumock.c} (95%) rename tests/{nodeinfotest.c => virhostcputest.c} (89%)
Due to many recent changes - this one didn't git am -3 for me (naturally), but it looks like things were moved properly and I have to assume it compiles and passes check, syntax-check... Especially since the .po file was adjusted (the one I usually forget). ACK John

On Thu, Apr 14, 2016 at 04:22:03PM +0100, Daniel P. Berrange wrote:
The virt-login-shell is a program intended to be run as the login shell for a user in the host OS. When invoked it will connect to libvirtd and run a shell inside the container whose name matches the login user.
The current impl of virt-login-shell has a number of limitations with it that make it painful to use in practice
- It leaks env variables set by the host PAM stack into the containerized shell. eg things like XDG_RUNTIME_DIR get left set pointing to directories only visible on the host.
- You can't use scp to copy things directly into the container, because it doesn't support the '-c' arg that openssh expects shells to have
- The choice of user shell is hardcoded on the host side and so won't honour /etc/passwd settings inside the container
- It doesn't join the new shell into the containers cgroups, so resources limits are not correctly applied
- It throws away most error messages making diagnosis of problems (such as missing homedir in the container) impossible.
This series of patches fixes all these problems making virt-login-shell a much more pleasant thing to use in the real world.
The series is bigger than I would have liked because it turns out nodeinfo.c is a big mess of code. Because virt-login-shell is setuid we need to be selective about what we link it, and nodeinfo.c pulled in a huge chain of dependant code. So the first half ot he series is all about refactoring nodeinfo.c to isolate it into smaller pieces.
Completely forgot to push this series after John's reviews, due to waiting for the 1.3.4 freeze to finish. I've changed the version number for the new API to 1.3.6 and pushed now. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (2)
-
Daniel P. Berrange
-
John Ferlan