[pve-devel] [PATCH manager 2/3] close #5291: ui: qemu: memory edit: support disabling KSM for specific VMs

Fiona Ebner f.ebner at proxmox.com
Mon Feb 17 16:04:43 CET 2025


Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 www/manager6/qemu/HardwareView.js | 11 +++++++-
 www/manager6/qemu/MemoryEdit.js   | 43 ++++++++++++++++++++++++++-----
 2 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index c6d193fc..815dfcc2 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -73,7 +73,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		defaultValue: '512',
 		tdCls: 'pve-itype-icon-memory',
 		group: 2,
-		multiKey: ['memory', 'balloon', 'shares'],
+		multiKey: ['memory', 'balloon', 'shares', 'allow-ksm'],
 		renderer: function(value, metaData, record, ri, ci, store, pending) {
 		    var res = '';
 
@@ -92,6 +92,12 @@ Ext.define('PVE.qemu.HardwareView', {
 		    } else if (balloon === 0) {
 			res += ' [balloon=0]';
 		    }
+
+		    let allowKsm = me.getObjectValue('allow-ksm', undefined, pending);
+		    if (allowKsm !== undefined) {
+			res += ' [allow-ksm=' + allowKsm + ']';
+		    }
+
 		    return res;
 		},
 	    },
@@ -197,6 +203,9 @@ Ext.define('PVE.qemu.HardwareView', {
 	    numa: {
 		visible: false,
 	    },
+	    'allow-ksm': {
+		visible: false,
+	    },
 	    balloon: {
 		visible: false,
 	    },
diff --git a/www/manager6/qemu/MemoryEdit.js b/www/manager6/qemu/MemoryEdit.js
index 5e91dc9b..e7f1f688 100644
--- a/www/manager6/qemu/MemoryEdit.js
+++ b/www/manager6/qemu/MemoryEdit.js
@@ -32,23 +32,39 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let res = {};
 
-	var res = {};
+	let deleteSet = new Set([]);
+
+	// properties that can be passed as-is
+	let propagate = ['allow-ksm', 'memory'];
+
+	propagate.forEach(function(prop) {
+	    if (values.delete?.split(',').includes(prop)) {
+		deleteSet.add(prop);
+	    }
+	    if (prop in values) {
+		res[prop] = values[prop];
+	    }
+	});
 
-	res.memory = values.memory;
 	res.balloon = values.balloon;
 
 	if (!values.ballooning) {
 	    res.balloon = 0;
-	    res.delete = 'shares';
+	    deleteSet.add('shares');
 	} else if (values.memory === values.balloon) {
 	    delete res.balloon;
-	    res.delete = 'balloon,shares';
+	    deleteSet.add('balloon');
+	    deleteSet.add('shares');
 	} else if (Ext.isDefined(values.shares) && values.shares !== "") {
 	    res.shares = values.shares;
 	} else {
-	    res.delete = "shares";
+	    deleteSet.add('shares');
+	}
+
+	if (deleteSet.size > 0) {
+	    res.delete = deleteSet.keys().toArray().join(',');
 	}
 
 	return res;
@@ -132,6 +148,20 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
 		    },
 		},
 	    },
+	    {
+		xtype: 'proxmoxcheckbox',
+		name: 'allow-ksm',
+		labelWidth: labelWidth,
+		fieldLabel: gettext('Allow KSM'),
+		checked: true,
+		uncheckedValue: '0',
+		defaultValue: '1',
+		deleteDefaultValue: true,
+		autoEl: {
+		    tag: 'div',
+		    'data-qtip': gettext('Allow the Kernel Samepage Merging daemon to merge memory pages of this VM.'),
+		},
+	    },
 	];
 
 	if (me.insideWizard) {
@@ -183,6 +213,7 @@ Ext.define('PVE.qemu.MemoryEdit', {
 		    shares: data.shares,
 		    memory: data.memory || '512',
 		    balloon: data.balloon > 0 ? data.balloon : data.memory || '512',
+		    'allow-ksm': data['allow-ksm'] ?? true,
 		};
 
 		ipanel.setValues(values);
-- 
2.39.5





More information about the pve-devel mailing list