[libvirt] [PATCH go-xml] 1, add memoryBacking for domain. 2, add hugepages, nosharepages, locked, source, access and allocation for memoryBacking. 3, add test case for memoryBacking.

Zhenwei.Pi zhenwei.pi at youruncloud.com
Wed Sep 27 00:54:19 UTC 2017


Signed-off-by: zhenwei.pi <zhenwei.pi at youruncloud.com>

---
  domain.go      | 76 +++++++++++++++++++++++++++++++++++++++++++---------------
  domain_test.go | 38 +++++++++++++++++++++++++++++
  2 files changed, 95 insertions(+), 19 deletions(-)

diff --git a/domain.go b/domain.go
index d81ac2a..773a83e 100644
--- a/domain.go
+++ b/domain.go
@@ -459,6 +459,43 @@ type DomainMaxMemory struct {
  	Slots uint   `xml:"slots,attr,omitempty"`
  }
  
+type DomainMemoryHugepage struct {
+	Size    uint   `xml:"size,attr"`
+	Unit    string `xml:"unit,attr,omitempty"`
+	Nodeset string `xml:"nodeset,attr,omitempty"`
+}
+
+type DomainMemoryHugepages struct {
+	Hugepages []DomainMemoryHugepage `xml:"page"`
+}
+
+type DomainMemoryNosharepages struct {
+}
+
+type DomainMemoryLocked struct {
+}
+
+type DomainMemorySource struct {
+	Type string `xml:"type,attr,omitempty"`
+}
+
+type DomainMemoryAccess struct {
+	Mode string `xml:"mode,attr,omitempty"`
+}
+
+type DomainMemoryAllocation struct {
+	Mode string `xml:"mode,attr,omitempty"`
+}
+
+type DomainMemoryBacking struct {
+	MemoryHugePages    *DomainMemoryHugepages    `xml:"hugepages"`
+	MemoryNosharepages *DomainMemoryNosharepages `xml:"nosharepages"`
+	MemoryLocked       *DomainMemoryLocked       `xml:"locked"`
+	MemorySource       *DomainMemorySource       `xml:"source"`
+	MemoryAccess       *DomainMemoryAccess       `xml:"access"`
+	MemoryAllocation   *DomainMemoryAllocation   `xml:"allocation"`
+}
+
  type DomainOSType struct {
  	Arch    string `xml:"arch,attr,omitempty"`
  	Machine string `xml:"machine,attr,omitempty"`
@@ -681,25 +718,26 @@ type DomainQEMUCommandline struct {
  // matching the order of XML elements that libvirt
  // will generate when dumping XML.
  type Domain struct {
-	XMLName         xml.Name           `xml:"domain"`
-	Type            string             `xml:"type,attr,omitempty"`
-	Name            string             `xml:"name"`
-	UUID            string             `xml:"uuid,omitempty"`
-	Memory          *DomainMemory      `xml:"memory"`
-	CurrentMemory   *DomainMemory      `xml:"currentMemory"`
-	MaximumMemory   *DomainMaxMemory   `xml:"maxMemory"`
-	VCPU            *DomainVCPU        `xml:"vcpu"`
-	VCPUs           *DomainVCPUs       `xml:"vcpus"`
-	Resource        *DomainResource    `xml:"resource"`
-	SysInfo         *DomainSysInfo     `xml:"sysinfo"`
-	OS              *DomainOS          `xml:"os"`
-	Features        *DomainFeatureList `xml:"features"`
-	CPU             *DomainCPU         `xml:"cpu"`
-	Clock           *DomainClock       `xml:"clock,omitempty"`
-	OnPoweroff      string             `xml:"on_poweroff,omitempty"`
-	OnReboot        string             `xml:"on_reboot,omitempty"`
-	OnCrash         string             `xml:"on_crash,omitempty"`
-	Devices         *DomainDeviceList  `xml:"devices"`
+	XMLName         xml.Name             `xml:"domain"`
+	Type            string               `xml:"type,attr,omitempty"`
+	Name            string               `xml:"name"`
+	UUID            string               `xml:"uuid,omitempty"`
+	Memory          *DomainMemory        `xml:"memory"`
+	CurrentMemory   *DomainMemory        `xml:"currentMemory"`
+	MaximumMemory   *DomainMaxMemory     `xml:"maxMemory"`
+	MemoryBacking   *DomainMemoryBacking `xml:"memoryBacking"`
+	VCPU            *DomainVCPU          `xml:"vcpu"`
+	VCPUs           *DomainVCPUs         `xml:"vcpus"`
+	Resource        *DomainResource      `xml:"resource"`
+	SysInfo         *DomainSysInfo       `xml:"sysinfo"`
+	OS              *DomainOS            `xml:"os"`
+	Features        *DomainFeatureList   `xml:"features"`
+	CPU             *DomainCPU           `xml:"cpu"`
+	Clock           *DomainClock         `xml:"clock,omitempty"`
+	OnPoweroff      string               `xml:"on_poweroff,omitempty"`
+	OnReboot        string               `xml:"on_reboot,omitempty"`
+	OnCrash         string               `xml:"on_crash,omitempty"`
+	Devices         *DomainDeviceList    `xml:"devices"`
  	QEMUCommandline *DomainQEMUCommandline
  }
  
diff --git a/domain_test.go b/domain_test.go
index 3ff1dc1..51d413b 100644
--- a/domain_test.go
+++ b/domain_test.go
@@ -435,6 +435,33 @@ var domainTestData = []struct {
  				Value: 16384,
  				Slots: 2,
  			},
+			MemoryBacking: &DomainMemoryBacking{
+				MemoryHugePages: &DomainMemoryHugepages{
+					Hugepages: []DomainMemoryHugepage{
+						{
+							Size:    1,
+							Unit:    "G",
+							Nodeset: "0-3,5",
+						},
+						{
+							Size:    2,
+							Unit:    "M",
+							Nodeset: "4",
+						},
+					},
+				},
+				MemoryNosharepages: &DomainMemoryNosharepages{},
+				MemoryLocked:       &DomainMemoryLocked{},
+				MemorySource: &DomainMemorySource{
+					Type: "file|anonymous",
+				},
+				MemoryAccess: &DomainMemoryAccess{
+					Mode: "shared|private",
+				},
+				MemoryAllocation: &DomainMemoryAllocation{
+					Mode: "immediate|ondemand",
+				},
+			},
  			OS: &DomainOS{
  				Type: &DomainOSType{
  					Arch:    "x86_64",
@@ -532,6 +559,17 @@ var domainTestData = []struct {
  			`  <memory unit="KiB">8192</memory>`,
  			`  <currentMemory unit="KiB">4096</currentMemory>`,
  			`  <maxMemory unit="KiB" slots="2">16384</maxMemory>`,
+			`  <memoryBacking>`,
+			`    <hugepages>`,
+			`      <page size="1" unit="G" nodeset="0-3,5"></page>`,
+			`      <page size="2" unit="M" nodeset="4"></page>`,
+			`    </hugepages>`,
+			`    <nosharepages></nosharepages>`,
+			`    <locked></locked>`,
+			`    <source type="file|anonymous"></source>`,
+			`    <access mode="shared|private"></access>`,
+			`    <allocation mode="immediate|ondemand"></allocation>`,
+			`  </memoryBacking>`,
  			`  <sysinfo type="smbios">`,
  			`    <system>`,
  			`      <entry name="manufacturer">manufacturer</entry>`,
-- 
2.7.4





More information about the libvir-list mailing list