pyvmomi icon indicating copy to clipboard operation
pyvmomi copied to clipboard

multithreaded access to properties is slower than serial access

Open veber-alex opened this issue 7 months ago • 4 comments

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

  1. set NUM_THREADS, HOST, PASSWORD
  2. run the repro script

Expected behavior

I expect multithreaded performance to be better or equal to serial performance.

Additional context

No response

veber-alex avatar Jul 20 '24 08:07 veber-alex