[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen-blkfront: use old rinfo after enomem during migration

Hi Boris,

On 12/04/2018 12:07 AM, Boris Ostrovsky wrote:
> On 12/2/18 3:31 PM, Manjunath Patil wrote:
>> On 11/30/2018 2:33 PM, Boris Ostrovsky wrote:
>>> On 11/30/18 4:49 PM, Manjunath Patil wrote:
>>>> Thank you Boris for your comments. I removed faulty email of mine.
>>>> replies inline.
>>>> On 11/30/2018 12:42 PM, Boris Ostrovsky wrote:
>>>>> On 11/29/18 12:17 AM, Manjunath Patil wrote:
>>>>>> Hi,
>>>>>> Feel free to suggest/comment on this.
>>>>>> I am trying to do the following at dst during the migration now.
>>>>>> 1. Dont clear the old rinfo in blkif_free(). Instead just clean it.
>>>>>> 2. Store the old rinfo and nr_rings into temp variables in
>>>>>> negotiate_mq()
>>>>>> 3. let nr_rings get re-calculated based on backend data
>>>>>> 4. try allocating new memory based on new nr_rings
>>>>> Since I suspect number of rings will likely be the same why not reuse
>>>>> the rings in the common case?
>>>> I thought attaching devices will be more often than migration. Hence
>>>> did not want add to an extra check for
>>>>    - if I am inside migration code path and
>>>>    - if new nr_rings is equal to old nr_rings or not
>>>> Sure addition of such a thing would avoid the memory allocation
>>>> altogether in migration path,
>>>> but it would add a little overhead for normal device addition.
>>>> Do you think its worth adding that change?
>>> IMO a couple of extra checks are not going to make much difference.
>> I will add this change
>>> I wonder though --- have you actually seen the case where you did fail
>>> allocation and changes provided in this patch made things work? I am
>>> asking because right after negotiate_mq() we will call setup_blkring()
>>> and it will want to allocate bunch of memory. A failure there is fatal
>>> (to ring setup). So it seems to me that you will survive negotiate_mq()
>>> but then will likely fail soon after.
>> I have noticed the ENOMEM insise negotiate_mq() on ct machine. When I
>> included my patch, I manually triggered the ENOMEM using a debug flag.
>> The patch works for ENOMEM inside negotiate_mq().
>> As you mentioned, if we really hit the ENOMEM in negotiate_mq(), we
>> might hit it in setup_blkring() as well.
>> We should add the similar change to blkif_sring struct as well.
> Won't you have a similar issue with other frontends, say, netfront?

I think the kmalloc is failed not because of OOM.

In fact, the size of "blkfront_ring_info" is large. When domU have 4
queues/rings, the size of 4 blkfront_ring_info can be about 300+ KB.

There is chance that kmalloc() 300+ KB would fail.

About netfront, to kmalloc() 8 'struct netfront_queue' seems consumes <70 KB?

Dongli Zhang

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.