[pve-devel] [PATCH v4 qemu-server 15/16] memory: virtio-mem : implement redispatch retry.

Fiona Ebner f.ebner at proxmox.com
Fri Feb 24 08:12:59 CET 2023


Am 23.02.23 um 16:01 schrieb DERUMIER, Alexandre:
> 
>>> +    die "No more available blocks in virtiomem to balance all
>>> requested memory\n"
>>> +       if $target_total < 0;
>>
>> I fee like this message is a bit confusing. This can only happen on
>> unplug, right?
> yes,unplug only. (when guest os set memory block as unmovable).
> I don't see case where it doesn't work on hotplug.
> 
>>  And reading that "no more blocks are available" sounds
>> like a paradox then. It's rather that no more blocks can be
>> unplugged.
>>
>> If we really want to, if the $target_total is negative, we could set
>> it
>> to 0 (best to do it at the call-side already) and try to unplug
>> everything else? We won't reach the goal anymore, but we could still
>> get
>> closer to it in some cases.
> 
> yes, good idea
> 
>>  Would need a bit more adaptation to avoid an
>> endless loop: we also need to stop if all devices reached their
>> current
>> goal this round (and no new errors appeared), e.g.
>> balance_virtiomem()
>> could just have that info as its return value.
>>
> 
> I think we should still die with an error message in this case,(maybe
> at the end of balance_virtiomem). We still have some memory not removed
> in all cases if target_memory was < 0;
> 

Sure, we still should die at the end.

> something like:
> 
> 
> my sub balance_virtiomem {
>     my ($vmid, $virtiomems, $blocksize, $target_total) = @_;
> 
>     my $nb_virtiomem = scalar(grep { !$_->{error} } values $virtiomems-
>> %*);
> 
>     print"try to balance memory on $nb_virtiomem virtiomems\n";
> 
>     my $target_total_err = undef;
>     if($target_total < 0) {
>         $target_total = 0;
>         $target_total_err = 1;
>     }
> 
>     ...
>     while ($total_finished != $nb_virtiomem) {
>        ...
>      }
>     ...
> 
>     die "No more virtiomem devices left to try to balance the remaining
> memory\n"
>         if $target_total_err;
> }
> 
> 

Yes, like this we make one final round, which is good enough IMHO.





More information about the pve-devel mailing list