From mboxrd@z Thu Jan 1 00:00:00 1970 From: sepanta s Subject: Re: monitor access to pages with a specific p2m_type_t Date: Tue, 2 Aug 2016 10:49:04 +0430 Message-ID: References: <5f69be9a-9747-2103-3d4e-62518a7969b8@bitdefender.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3909370114524433192==" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Tamas K Lengyel Cc: George Dunlap , Razvan Cojocaru , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org --===============3909370114524433192== Content-Type: multipart/related; boundary=94eb2c191b32967548053910b1fc --94eb2c191b32967548053910b1fc Content-Type: multipart/alternative; boundary=94eb2c191b32967546053910b1fb --94eb2c191b32967546053910b1fb Content-Type: text/plain; charset=UTF-8 On Sat, Jul 23, 2016 at 3:49 PM, sepanta s wrote: > >>> Hi, >>> Is there any sample code which I can undestand how to capture the events >>> on the gfns which have p2m_ram_shared enabled ? >>> I couldn't find any ... . >>> I would be grateful if any help , as there is not any documents through >>> net to use :( >>> >>> >> Should I just set the ring_page as the pages which are shared and mark >>> them read-only, then capture the write events? >>> >> >> Not sure what ring_page you are talking about, but if you mark the pages >> read-only with mem_access you will get notifications for events that lead >> to unsharing with p2m_ram_shared type pages as well. >> > > There was a function in mem-sharing.c which is intended to announce the > failed unshared pages. It is "mem_sharing_notify_enomem" . > I added "mem_sharing_notify_unshare" as a new function and call it in > also XEN_DOMCTL_VM_EVENT_OP_UNSHARING and "HVM_PARAM_USHARING_RING_PFN". > I also added the required codes in /xen/common/vm_event.c and > /tools/libxc/xc_vm_event so as > I have added a new event for the unsharing actions of a page. > Then, I wrote a sample code line xen-access and create a ring for the > pages of a domain and listen to unshared events of it. > >> >>> BTW, I added a function called mem_sharing_notify_unshare to >>> mem_sharing.c and added it to __mem_sharing_unshare_page at this part: >>> >>> *if ( p2m_change_type_one(d, gfn, p2m_ram_shared, p2m_ram_rw) )* >>> *{* >>> *gdprintk(XENLOG_ERR, "Could not change p2m type d %hu gfn %lx.\n", * >>> *d->domain_id, gfn);* >>> *BUG();* >>> *}else {* >>> >>> >>> * mem_sharing_notify_unshare(d,gfn.0);* >>> *}* >>> >>> >> IMHO this duplicates a lot of what mem_access does already, I don't think >> there is a need for a separate notification on another ring. >> >> > You are right, xen-access should work but I couldn't change its code and > couldn't get the mem-access events. > I just added the above function to be sure that unsharing a page happens > and works fine. Because I couldn't get the access requests on shared-pages > of a vm. > In xen-access, Instead of setting all the pages' default access to rx , I > just call xc_set_mem_access for the pages with p2m_ram_shared and assign rx > as the default access but there is no requests on this ring. > >> > > So by having a vm event channel listening to unsharing event, I can see >>> the notification in xen-access . To do so, I >>> have used vm_event_enable which uses HVM_PARAM_SHARING_RING_PFN . >>> But, when I used memshrtool to share all the pages of two vms - my vm1 >>> and its clone vm2 . >>> About 900 MB of the ram is shared but there are a lot of unshared events >>> happening. >>> >> >> Yes, I would say that's expected. >> > >> >>> When I do the sharing one more time, there is not any pages unshared as >>> the total number of shared pages stay the same. >>> >> >> Well, if you let the domain run for a while after sharing, then you do >> the sharing like that again you are likely going to crash the VM. >> >> >>> Seems no unsharing is done as the number of shared pages are the same. >>> Does any page fault triggers when a write operation is done on a shared >>> page among two vms ? >>> >> >> I would guess the the VM crashed and that's why you don't see any more >> unsharing at that point. >> > Yes it was crashed as I checked it. > The scenario of sharing is I use: > I pause the origin VM and then run memshrtool on origin VM and clone VM. > After sharing all the pages between these two VMs,Clone VM seems to be > inaccessible. The clone seems to work as the attached photo shows, its cpu > time increases and it exceeds the dom0 cpu time but when I use gvncviewer > to see the GUI of the Clone VM, the mouse or keyboard don't work. (origin > VM is ubunut-64-1 and clone VM is ubuntu-64-clone-1). Is there anything I > have missed in sharing between two VMs? > > [image: Inline image 2] > Can someone help please ? still have problem with the machine . is it because sharing is not based on content? --94eb2c191b32967546053910b1fb Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
There was a function in mem-sharing.c which is inte= nded to announce the failed unshared pages. It is "mem_s= haring_notify_enomem" .
I added "mem_sharing_notify_unshare" as a new func= tion and call it in also=C2=A0XEN_DOMCTL_VM_EVENT_OP_UNSHARING = and "HVM_PARAM_USHARING_RING_PFN". I also adde= d the required codes in /xen/common/vm_event.c and /tools/libxc/xc_vm_event= so as
I have added a new event for the unsharing actions= of a page.=C2=A0
Then, I wrote a sample code line xen-access and= create a ring for the pages of a domain and listen to unshared events of i= t.=C2=A0
<= br>
BTW, I added a functi= on called=C2=A0mem_sharing_notify_unshare to mem_sharing.c and added= it to __mem_sharing_unshare_page at this part:

if=C2=A0(=C2=A0p2m_change_type_on= e(d, gfn, p2m_ram_shared, p2m_ram_rw) )
{
=
gdprintk(XENLOG_ERR,=C2=A0"Could not change p2m type d=C2=A0%hu=C2=A0gfn=C2= =A0%lx.\n",=C2=A0
d->domain_id, g= fn);
B= UG();
}else {

=C2=A0mem_sharing_notify_unshare(d,gfn.0);
}


IMHO this duplicates a lot of what mem_access does= already, I don't think there is a need for a separate notification on = another ring.
=C2=A0
You are right, xen-access should work but I couldn't c= hange its code and couldn't get the mem-access events.
=C2=A0= I just added the above function to be sure that unsharing a page happens an= d works fine. Because I couldn't get the access requests on shared-page= s of a vm.
In xen-access, Instead of setting all the pages' d= efault access to rx , I just call xc_set_mem_access for the pages with p2m_= ram_shared and assign rx as the default access but there is no requests on = this ring.=C2=A0


<= div>So by having a vm event channel listening to unsharing event, I can see= the notification in xen-access . To do so, I=C2=A0
have used vm_= event_enable which uses HVM_PARAM_SHARING_RING_PFN .
But, when I = used memshrtool to share all the pages of two vms - my vm1 and its clone vm= 2 .
About 900 MB of the ram is shared but there are a lot of unsh= ared events happening.

=
Yes, I would say that's expected.
=C2=A0
<= div class=3D"gmail_extra">
When I do the sharing one more time, there i= s not any pages unshared as the total number of shared pages stay the same.=

Well, if you let = the domain run for a while after sharing, then you do the sharing like that= again you are likely going to crash the VM.
=C2=A0
Seems no un= sharing is done as the number of shared pages are the same.
Does = any page fault triggers when a write operation is done on a shared page amo= ng two vms ?

I wou= ld guess the the VM crashed and that's why you don't see any more u= nsharing at that point.
Yes= it was crashed as I checked it.=C2=A0
The scenario of sharing is= I use:=C2=A0
I pause the origin VM and then run memshrtool on or= igin VM and clone VM. After sharing all the pages between these two VMs,Clo= ne VM seems to be inaccessible. The clone seems to work as the attached pho= to shows, its cpu time increases and it exceeds the dom0 cpu time but when = I use gvncviewer to see the GUI of the Clone VM, the mouse or keyboard don&= #39;t work. (origin VM is ubunut-64-1 and clone VM is ubuntu-64-clone-1). I= s there anything I have missed in sharing between two VMs?
3D"Inline
Can someone help please ? still have problem with the machine .=
is it because sharing is not based on content?

--94eb2c191b32967546053910b1fb-- --94eb2c191b32967548053910b1fc Content-Type: image/png; name="Screenshot from 2016-07-23 15_19_05.png" Content-Disposition: inline; filename="Screenshot from 2016-07-23 15_19_05.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_15617746e9541a17 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 --94eb2c191b32967548053910b1fc-- --===============3909370114524433192== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg== --===============3909370114524433192==--