pyvmomi
pyvmomi copied to clipboard
multithreaded access to properties is slower than serial access
Describe the bug
I noticed that accessing host properties from multiple threads is slower than doing so serialy. I wrote a script to reproduce the issue:
# ruff: noqa
import ssl
from threading import Thread
import time
from pyVim.connect import SmartConnect
from pyVmomi import vim
NUM_THREADS = 8
HOST = ""
PASSWORD = ""
context = ssl._create_unverified_context()
con = SmartConnect(host=HOST, pwd=PASSWORD, sslContext=context)
host = con.content.viewManager.CreateContainerView(con.content.rootFolder, [vim.HostSystem], True).view[0]
threads = []
for i in range(NUM_THREADS):
def print_driver(i):
print(host.config.network.pnic[i].driver)
t = Thread(target=print_driver, args=(i,))
threads.append(t)
start = time.time()
for t in threads:
t.start()
for t in threads:
t.join()
end = time.time()
print(f"multi threaded: {end - start}")
start = time.time()
for i in range(NUM_THREADS):
print(host.config.network.pnic[i].driver)
end = time.time()
print(f"single threaded: {end - start}")
On my host with 8 vmnics I get:
multi threaded: 11.908450603485107
single threaded: 3.76969313621521
The single threaded performance is stable around 4 seconds but the multithreaded performance jumps around between 6-12 seconds each run.
The script can be changed to always access pnic[0]
with the same result.
The more threads run at the same time, the slower it gets.
Reproduction steps
- set NUM_THREADS, HOST, PASSWORD
- run the repro script
Expected behavior
I expect multithreaded performance to be better or equal to serial performance.
Additional context
No response