Commit 8127c4fd authored by Srikar Dronamraju's avatar Srikar Dronamraju Committed by Madhavan Srinivasan
Browse files

pseries/lparcfg: Add resource group monitoring



Systems can now be partitioned into resource groups. By default all
systems will be part of default resource group. Once a resource group is
created, and resources allocated to the resource group, those resources
will be removed from the default resource group. If a LPAR moved to a
resource group, then it can only use resources in the resource group.

So maximum processors that can be allocated to a LPAR can be equal or
smaller than the resources in the resource group.

lparcfg can now exposes the resource group id to which this LPAR belongs
to. It also exposes the number of processors in the current resource
group. The default resource group id happens to be 0. These would be
documented in the upcoming PAPR update.

Example of an LPAR in a default resource group
root@ltcp11-lp3 $ grep resource_group /proc/powerpc/lparcfg
resource_group_number=0
resource_group_active_processors=50
root@ltcp11-lp3 $

Example of an LPAR in a non-default resource group
root@ltcp11-lp5 $ grep resource_group /proc/powerpc/lparcfg
resource_group_number=1
resource_group_active_processors=30
root@ltcp11-lp5 $

Signed-off-by: default avatarSrikar Dronamraju <srikar@linux.ibm.com>
Tested-by: default avatarVenkat Rao Bagalkote <venkat88@linux.ibm.com>
Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20250716104600.59102-1-srikar@linux.ibm.com
parent e9a6fb0b
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -78,6 +78,8 @@ struct hvcall_ppp_data {
	u8	capped;
	u8	weight;
	u8	unallocated_weight;
	u8      resource_group_index;
	u16     active_procs_in_resource_group;
	u16	active_procs_in_pool;
	u16	active_system_procs;
	u16	phys_platform_procs;
@@ -86,7 +88,7 @@ struct hvcall_ppp_data {
};

/*
 * H_GET_PPP hcall returns info in 4 parms.
 * H_GET_PPP hcall returns info in 5 parms.
 *  entitled_capacity,unallocated_capacity,
 *  aggregation, resource_capability).
 *
@@ -94,11 +96,11 @@ struct hvcall_ppp_data {
 *  R5 = Unallocated Processor Capacity Percentage.
 *  R6 (AABBCCDDEEFFGGHH).
 *      XXXX - reserved (0)
 *          XXXX - reserved (0)
 *          XXXX - Active Cores in Resource Group
 *              XXXX - Group Number
 *                  XXXX - Pool Number.
 *  R7 (IIJJKKLLMMNNOOPP).
 *      XX - reserved. (0)
 *      XX - Resource group Number
 *        XX - bit 0-6 reserved (0).   bit 7 is Capped indicator.
 *          XX - variable processor Capacity Weight
 *            XX - Unallocated Variable Processor Capacity Weight.
@@ -120,9 +122,11 @@ static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data)
	ppp_data->entitlement = retbuf[0];
	ppp_data->unallocated_entitlement = retbuf[1];

	ppp_data->active_procs_in_resource_group = (retbuf[2] >> 4 * 8) & 0xffff;
	ppp_data->group_num = (retbuf[2] >> 2 * 8) & 0xffff;
	ppp_data->pool_num = retbuf[2] & 0xffff;

	ppp_data->resource_group_index = (retbuf[3] >> 7 *  8) & 0xff;
	ppp_data->capped = (retbuf[3] >> 6 * 8) & 0x01;
	ppp_data->weight = (retbuf[3] >> 5 * 8) & 0xff;
	ppp_data->unallocated_weight = (retbuf[3] >> 4 * 8) & 0xff;
@@ -236,6 +240,13 @@ static void parse_ppp_data(struct seq_file *m)
	seq_printf(m, "unallocated_capacity=%lld\n",
		   ppp_data.unallocated_entitlement);

	if (ppp_data.active_procs_in_resource_group)  {
		seq_printf(m, "resource_group_number=%d\n",
				ppp_data.resource_group_index);
		seq_printf(m, "resource_group_active_processors=%d\n",
				ppp_data.active_procs_in_resource_group);
	}

	/* The last bits of information returned from h_get_ppp are only
	 * valid if the ibm,partition-performance-parameters-level
	 * property is >= 1.