On Tue 18-07-17 10:12:14, Wei Wang wrote: [...]> Probably I should have included the introduction of the usages in > the log. Hope it is not too later to explain here:Yes this should have been described in the cover.> Live migration needs to transfer the VM's memory from the source > machine to the destination round by round. For the 1st round, all the VM's > memory is transferred. From the 2nd round, only the pieces of memory > that were written by the guest (after the 1st round) are transferred. One > method that is popularly used by the hypervisor to track which part of > memory is written is to write-protect all the guest memory. > > This patch enables the optimization of the 1st round memory transfer - > the hypervisor can skip the transfer of guest unused pages in the 1st round.All you should need is the check for the page reference count, no? I assume you do some sort of pfn walk and so you should be able to get an access to the struct page. -- Michal Hocko SUSE Labs
On 07/19/2017 04:13 PM, Michal Hocko wrote:> On Tue 18-07-17 10:12:14, Wei Wang wrote: > [...] >> Probably I should have included the introduction of the usages in >> the log. Hope it is not too later to explain here: > Yes this should have been described in the cover.OK, I will do it in the next version.> >> Live migration needs to transfer the VM's memory from the source >> machine to the destination round by round. For the 1st round, all the VM's >> memory is transferred. From the 2nd round, only the pieces of memory >> that were written by the guest (after the 1st round) are transferred. One >> method that is popularly used by the hypervisor to track which part of >> memory is written is to write-protect all the guest memory. >> >> This patch enables the optimization of the 1st round memory transfer - >> the hypervisor can skip the transfer of guest unused pages in the 1st round. > All you should need is the check for the page reference count, no? I > assume you do some sort of pfn walk and so you should be able to get an > access to the struct page.Not necessarily - the guest struct page is not seen by the hypervisor. The hypervisor only gets those guest pfns which are hinted as unused. From the hypervisor (host) point of view, a guest physical address corresponds to a virtual address of a host process. So, once the hypervisor knows a guest physical page is unsued, it knows that the corresponding virtual memory of the process doesn't need to be transferred in the 1st round. Best, Wei
On Wed 19-07-17 20:01:18, Wei Wang wrote:> On 07/19/2017 04:13 PM, Michal Hocko wrote:[...> >All you should need is the check for the page reference count, no? I > >assume you do some sort of pfn walk and so you should be able to get an > >access to the struct page. > > Not necessarily - the guest struct page is not seen by the hypervisor. The > hypervisor only gets those guest pfns which are hinted as unused. From the > hypervisor (host) point of view, a guest physical address corresponds to a > virtual address of a host process. So, once the hypervisor knows a guest > physical page is unsued, it knows that the corresponding virtual memory of > the process doesn't need to be transferred in the 1st round.I am sorry, but I do not understand. Why cannot _guest_ simply check the struct page ref count and send them to the hypervisor? Is there any documentation which describes the workflow or code which would use your new API? -- Michal Hocko SUSE Labs
Possibly Parallel Threads
- [PATCH v12 6/8] mm: support reporting free page blocks
- [PATCH v12 6/8] mm: support reporting free page blocks
- [PATCH v12 6/8] mm: support reporting free page blocks
- [PATCH v12 6/8] mm: support reporting free page blocks
- [PATCH v12 6/8] mm: support reporting free page blocks