-
Notifications
You must be signed in to change notification settings - Fork 22
understand (and possibly improve) instance creation times #487
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
related: #471 |
My most recent attempts to create instances of 128 GB memory began to fail after the sleds on rack2 have had a lot of instances created and then deleted.
Of the above 9 instances, only the first two were created successfully. The subsequent ones all failed after about 1m 45s (the durations were simply |
Filed illumos#15844, which should cover at least some of the provisioning cost we're seeing. I have a patch in the works which should improve things there. |
15844 has landed in illumos-gate. Once that makes its way into stlouis, and onto test hardware, it'd be good to revisit the large instance provisioning tests. |
Will certainly do so. Currently provisioning large VMs (with 64/96/128 GB of memory) is still subject to the race with the 60 second client timeout. |
FWIW, I'm not (yet) convinced that the problem in oxidecomputer/omicron#3927 is specific to large instances, since in that issue Nexus timed out while waiting for sled agent to create the Propolis zone, and I don't have an intuition as to what mechanism would make that take longer for larger instances than it does for smaller ones. (That said I have no idea what made zone setup take so long, full stop, so pretty much any theory is on the table at this point.) |
Well, as a "controlled experiment", I have this one instance on rack2 that was successfully provisioned and started with 64 vcpus and 128 GB memory: https://oxide.sys.rack2.eng.oxide.computer/projects/try/instances/provision-time-64c-128m After yesterday's software update, it failed to start up after multiple tries, all due to the same client timeout error:
I stopped all VMs on the sled in question after multiple failed attempts and this was the only instance being started on the sled BRM44220010 (gc25). Next, I updated the memory setting of this instance to 96 GB in the |
Just for reference, 15844 was not merged into stlouis until this morning, so any impact it may have would be missing from what was installed yesterday. |
Prior to 15844, the end-to-end provisioning times were anywhere between 30-40 for a VM of 32 or 64 GB memory. VMs with larger memory size were close to 50-60 seconds (or failing with sled-agent client timeout error if the requests went beyond 60s). And I hadn't been able to provision instance with more than 128 GB. After 15844, the provisioning times fall in the 21-29s range consistently for VM of different sizes (sample size = 50, much of the time was spent on vnic and disk setup). I am also able to spin up 256 GB memory instances and run simple applications on them. |
Uh oh!
There was an error while loading. Please reload this page.
In recent experience with rack2, we have had a few discussions around the time it takes to create instances with a lot of memory. Some examples are: the as of not yet understood oxidecomputer/omicron#3417, data from @askfongjojo that indicates large instances often reliably take around 40 seconds to create and start, and observations that creation of large instances often times out.
Recently we landed support in omicron for using the VMM reservoir, which helped alleviate some of the pain around creating large instances, but it still takes on the order of 30+ seconds to create instances > 64GiB of memory, so I wanted to understand where that time was going.
I looked at a couple of larger instances this week on the dogfood cluster, and saw that there was about 20-25 seconds for a 64gb/96gb memory instance between the first propolis-server log line and the log line indicating a VNIC was being created for instance. (I intended to look at more, smaller instances, but was hamstrung by unrelated issues.) In between those two events, by code inspection I see that we would make OS call to allocate guest memory from the reservoir. @pfmooney did some testing of large VMs and found that the actual reservoir allocation was very small (order of microseconds), but it took around 15 seconds to map ~60GiB of memory into the guest address space. It thus seems plausible but that's where our time was spent, but we have little in the way of logging to show that.
It does not seem that improving instance creation times for large VMs is a big priority at the moment (though of course, no one is going to complain if instance creation is faster!). That said, from looking at this issue so far, it's clear that we could have better data here. At a minimum, I think we should:
The text was updated successfully, but these errors were encountered: