> On 31 Jan 2024, at 11:17, Christian Lindig <[email protected]> wrote:
>
>
>
>> On 31 Jan 2024, at 10:52, Edwin Török <[email protected]> wrote:
>>
>> Now that we no longer have a hashtable inside we can make Quota.t pure,
>> and push the mutable update to its callers.
>> Store.t already had a mutable Quota.t field.
>>
>> No functional change.
>
> Acked-by: Christian Lindig <[email protected]>
>
> This is shifting copying working to GC work, at least potentially. I would
> agree that this is a good trade-off and the code looks correct to me. But I
> think we should see more testing and benchmarking before merging this unless
> we are fine merging speculative improvements.
>
> — C
>
>
I’ve written this [1] microbenchmark which creates ~300_000 entries in
xenstore, assigns quota to 1000 domains and then measure how long it takes to
list xenstore
(It doesn’t matter whether these domains exist or not).
It shows a measurable improvement with this patch, once I’ve run a more
realistic test on the original machine with 1000 real VMs I’ll post those
results too:
On an Intel Xeon Gold 6354 @ 3.0 Ghz:
* without my patch: 12.756 +- 0.152 seconds time elapsed ( +- 1.19% )
* with my patch: 5.6051 +- 0.0467 seconds time elapsed ( +- 0.83% )
[1]
# cat >create.py <<EOF
#!/usr/bin/env python3
from xen.lowlevel.xs import xs
xenstore = xs()
for i in range(1,1000):
txn = xenstore.transaction_start()
for j in range(1,10):
for k in range(1,30):
path=f"/quotatest/{i}/{j}/{k}/x"
xenstore.write(txn, path, "val")
# assign quota to domid i
xenstore.set_permissions(txn, path, [{"dom": i}])
xenstore.transaction_end(txn)
EOF
# python3 create.py
# perf stat -r 10 sh -c 'xenstore-ls $(for i in $(seq 1 100); do echo
"/quotatest/$i"; done) >/dev/null’
Best regards,
—Edwin