All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xenpaging: track number of paged pages in struct domain
@ 2011-09-15 12:26 Olaf Hering
  2011-09-16 11:24 ` Tim Deegan
  0 siblings, 1 reply; 7+ messages in thread
From: Olaf Hering @ 2011-09-15 12:26 UTC (permalink / raw)
  To: xen-devel

# HG changeset patch
# User Olaf Hering <olaf@aepfle.de>
# Date 1316089500 -7200
# Node ID 13b4be345ebac016abe26386417824a0c47d762d
# Parent  e90438f6e6d1585a71b18784a99c162b5d95f390
xenpaging: track number of paged pages in struct domain

The toolstack should know how many pages are paged-out at a given point
in time so it could make smarter decisions about how many pages should
be paged or ballooned.

Add a new member to xen_domctl_getdomaininfo and bump interface version.
Use the new member in xc_dominfo_t.
The SONAME of libxc should be changed if this patch gets applied.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

diff -r e90438f6e6d1 -r 13b4be345eba tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -235,6 +235,7 @@ int xc_domain_getinfo(xc_interface *xch,
         info->ssidref  = domctl.u.getdomaininfo.ssidref;
         info->nr_pages = domctl.u.getdomaininfo.tot_pages;
         info->nr_shared_pages = domctl.u.getdomaininfo.shr_pages;
+        info->nr_paged_pages = domctl.u.getdomaininfo.paged_pages;
         info->max_memkb = domctl.u.getdomaininfo.max_pages << (PAGE_SHIFT-10);
         info->shared_info_frame = domctl.u.getdomaininfo.shared_info_frame;
         info->cpu_time = domctl.u.getdomaininfo.cpu_time;
diff -r e90438f6e6d1 -r 13b4be345eba tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h
+++ b/tools/libxc/xenctrl.h
@@ -351,6 +351,7 @@ typedef struct xc_dominfo {
     unsigned int  shutdown_reason; /* only meaningful if shutdown==1 */
     unsigned long nr_pages; /* current number, not maximum */
     unsigned long nr_shared_pages;
+    unsigned long nr_paged_pages;
     unsigned long shared_info_frame;
     uint64_t      cpu_time;
     unsigned long max_memkb;
diff -r e90438f6e6d1 -r 13b4be345eba xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -746,6 +746,9 @@ int p2m_mem_paging_evict(struct domain *
     /* Put the page back so it gets freed */
     put_page(page);
 
+    /* Track number of paged gfns */
+    atomic_inc(&d->paged_pages);
+
     return 0;
 }
 
@@ -831,6 +834,8 @@ int p2m_mem_paging_prep(struct domain *d
     audit_p2m(p2m, 1);
     p2m_unlock(p2m);
 
+    atomic_dec(&d->paged_pages);
+
     return 0;
 }
 
diff -r e90438f6e6d1 -r 13b4be345eba xen/common/domctl.c
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -137,6 +137,7 @@ void getdomaininfo(struct domain *d, str
     info->tot_pages         = d->tot_pages;
     info->max_pages         = d->max_pages;
     info->shr_pages         = atomic_read(&d->shr_pages);
+    info->paged_pages       = atomic_read(&d->paged_pages);
     info->shared_info_frame = mfn_to_gmfn(d, __pa(d->shared_info)>>PAGE_SHIFT);
     BUG_ON(SHARED_M2P(info->shared_info_frame));
 
diff -r e90438f6e6d1 -r 13b4be345eba xen/include/public/domctl.h
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -35,7 +35,7 @@
 #include "xen.h"
 #include "grant_table.h"
 
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000007
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000008
 
 /*
  * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
@@ -95,6 +95,7 @@ struct xen_domctl_getdomaininfo {
     uint64_aligned_t tot_pages;
     uint64_aligned_t max_pages;
     uint64_aligned_t shr_pages;
+    uint64_aligned_t paged_pages;
     uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
     uint64_aligned_t cpu_time;
     uint32_t nr_online_vcpus;    /* Number of VCPUs currently online. */
diff -r e90438f6e6d1 -r 13b4be345eba xen/include/xen/sched.h
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -208,6 +208,7 @@ struct domain
     unsigned int     tot_pages;       /* number of pages currently possesed */
     unsigned int     max_pages;       /* maximum value for tot_pages        */
     atomic_t         shr_pages;       /* number of shared pages             */
+    atomic_t         paged_pages;     /* number of paged-out pages          */
     unsigned int     xenheap_pages;   /* # pages allocated from Xen heap    */
 
     unsigned int     max_vcpus;

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-09-27  7:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-15 12:26 [PATCH] xenpaging: track number of paged pages in struct domain Olaf Hering
2011-09-16 11:24 ` Tim Deegan
2011-09-16 11:32   ` Olaf Hering
2011-09-23 16:19     ` Olaf Hering
2011-09-26 21:23       ` Tim Deegan
2011-09-27  7:35         ` Olaf Hering
2011-09-21  9:26   ` Ian Campbell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.