code drop for P7 support of energy management
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@5086 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
5d04211a85
commit
d0a6c27824
@ -10,6 +10,7 @@ use xCAT::NodeRange;
|
||||
|
||||
%::QUERY_ATTRS = (
|
||||
'savingstatus' => 1,
|
||||
'dsavingstatus' => 1,
|
||||
'cappingstatus' => 1,
|
||||
'cappingmaxmin' => 1,
|
||||
'cappingvalue' => 1,
|
||||
@ -18,10 +19,14 @@ use xCAT::NodeRange;
|
||||
'averageDC' => 1,
|
||||
'ambienttemp' => 1,
|
||||
'exhausttemp' => 1,
|
||||
'CPUspeed' => 1);
|
||||
'CPUspeed' => 1,
|
||||
'syssbpower' => 1,
|
||||
'sysIPLtime' => 1,
|
||||
);
|
||||
|
||||
%::SET_ATTRS = (
|
||||
'savingstatus' => 1,
|
||||
'dsavingstatus' => 1,
|
||||
'cappingstatus' => 1,
|
||||
'cappingwatt' => 1,
|
||||
'cappingperc' => 1,
|
||||
@ -47,7 +52,7 @@ sub parse_args {
|
||||
# set the usage subroutine
|
||||
local *usage = sub {
|
||||
my $usage_string = xCAT::Usage->getUsage($cmd);
|
||||
return( [ $_[0], $usage_string] );
|
||||
return( [ $_[0], $usage_string ] );
|
||||
};
|
||||
|
||||
if ($request->{arg}) {
|
||||
@ -71,7 +76,7 @@ sub parse_args {
|
||||
# Check the validity of the parameters of Query and Set
|
||||
foreach my $attr (@ARGV) {
|
||||
my ($set_attr, $set_value) = split (/=/, $attr);
|
||||
if ($set_value) {
|
||||
if (defined($set_value)) {
|
||||
if ($argv_flag) {
|
||||
return (&usage());
|
||||
}
|
||||
@ -82,6 +87,10 @@ sub parse_args {
|
||||
if ($set_attr eq "savingstatus"
|
||||
&& ($set_value ne "on" && $set_value ne "off")) {
|
||||
return (&usage());
|
||||
} elsif ($set_attr eq "dsavingstatus"
|
||||
&& ($set_value ne "off"
|
||||
&& $set_value ne "on-norm" && $set_value ne "on-maxp")) {
|
||||
return (&usage());
|
||||
} elsif ($set_attr eq "cappingstatus"
|
||||
&& ($set_value ne "on" && $set_value ne "off")) {
|
||||
return (&usage());
|
||||
@ -104,14 +113,14 @@ sub parse_args {
|
||||
|
||||
if (!$set_flag) {
|
||||
my @query_list = @ARGV;
|
||||
|
||||
|
||||
if ($query_list[0] eq "all" and $#query_list == 0) {
|
||||
$query_attrs = "savingstatus,cappingstatus,cappingmaxmin,cappingvalue,cappingsoftmin,averageAC,averageDC,ambienttemp,exhausttemp,CPUspeed";
|
||||
$query_attrs = "all";
|
||||
} else {
|
||||
my @no_dup_query_list = ();
|
||||
foreach my $q_attr (@query_list) {
|
||||
chomp($q_attr);
|
||||
|
||||
|
||||
if ($::QUERY_ATTRS{$q_attr} != 1) {
|
||||
return (&usage());
|
||||
}
|
||||
@ -122,7 +131,6 @@ sub parse_args {
|
||||
}
|
||||
$query_attrs = join (',', @no_dup_query_list);
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
# If has not nodes, the -h or -v option must be input
|
||||
@ -142,6 +150,10 @@ sub parse_args {
|
||||
my $version_string = xCAT::Usage->getVersion('renergy');
|
||||
return( [ $_[0], $version_string] );
|
||||
}
|
||||
|
||||
if (scalar(@ARGV)) {
|
||||
return (&usage());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (&usage());
|
||||
@ -150,7 +162,7 @@ sub parse_args {
|
||||
# Check whether the hardware type of nodes are fsp
|
||||
my $nodetype_tb = xCAT::Table->new('nodetype');
|
||||
unless ($nodetype_tb) {
|
||||
return (1, "Error: Cannot open the nodetype table");
|
||||
return ([undef, "Error: Cannot open the nodetype table"]);
|
||||
}
|
||||
|
||||
my $nodetype_v = $nodetype_tb->getNodesAttribs($nodes, ['nodetype']);
|
||||
@ -162,7 +174,7 @@ sub parse_args {
|
||||
$nodetype_tb->close();
|
||||
|
||||
if (@notfspnodes) {
|
||||
return (1, "Error: The hardware type of following nodes are not fsp: ".join(',', @notfspnodes));
|
||||
return ([undef, "Error: The hardware type of following nodes are not fsp: ".join(',', @notfspnodes)]);
|
||||
}
|
||||
|
||||
if ($query_attrs) {
|
||||
|
@ -164,10 +164,17 @@ my %usage = (
|
||||
lshwconn noderange [-V|--verbose]",
|
||||
"renergy" =>
|
||||
"Usage:
|
||||
renergy [-h | --help]
|
||||
renergy [-v | --version]
|
||||
renergy noderange [-V] {all | {[savingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed]}}
|
||||
renergy noderange [-V] {{savingstatus}={on | off} | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage}",
|
||||
renergy [-h | --help]
|
||||
renergy [-v | --version]
|
||||
|
||||
Power 6 server specific :
|
||||
renergy noderange [-V] { all | { [savingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }
|
||||
|
||||
Power 7 server specific :
|
||||
renergy noderange [-V] { all | { [savingstatus] [dsavingstatus] [cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed] [syssbpower] [sysIPLtime] } }
|
||||
renergy noderange [-V] { {savingstatus}={on | off} | {dsavingstatus}={on-norm | on-maxp | off} | {cappingstatus}={on | off} | {cappingwatt}=watt | {cappingperc}=percentage }",
|
||||
|
||||
);
|
||||
my $vers = xCAT::Utils->Version();
|
||||
my %version = (
|
||||
|
@ -9,50 +9,89 @@ B<renergy> [-h | --help]
|
||||
|
||||
B<renergy> [-v | --version]
|
||||
|
||||
B<renergy> noderange [-V] {all | {[savingstatus]
|
||||
[cappingstatus] [cappingmaxmin] [cappingvalue]
|
||||
[cappingsoftmin] [averageAC] [averageDC]
|
||||
[ambienttemp] [exhausttemp] [CPUspeed]}}
|
||||
|
||||
B<renergy> noderange [-V] {{savingstatus}={on | off}
|
||||
B<Power 6 server specific :>
|
||||
|
||||
B<renergy> noderange [-V] { all | { [savingstatus] [cappingstatus]
|
||||
[cappingmaxmin] [cappingvalue] [cappingsoftmin] [averageAC]
|
||||
[averageDC] [ambienttemp] [exhausttemp] [CPUspeed] } }
|
||||
|
||||
B<renergy> noderange [-V] { {savingstatus}={on | off}
|
||||
| {cappingstatus}={on | off} | {cappingwatt}=watt
|
||||
| {cappingperc}=percentage}
|
||||
| {cappingperc}=percentage }
|
||||
|
||||
|
||||
B<Power 7 server specific :>
|
||||
|
||||
B<renergy> noderange [-V] { all | { [savingstatus] [dsavingstatus]
|
||||
[cappingstatus] [cappingmaxmin] [cappingvalue] [cappingsoftmin]
|
||||
[averageAC] [averageDC] [ambienttemp] [exhausttemp] [CPUspeed]
|
||||
[syssbpower] [sysIPLtime] } }
|
||||
|
||||
B<renergy> noderange [-V] { {savingstatus}={on | off}
|
||||
| {dsavingstatus}={on-norm | on-maxp | off}
|
||||
| {cappingstatus}={on | off} | {cappingwatt}=watt
|
||||
| {cappingperc}=percentage }
|
||||
|
||||
|
||||
=head1 B<DESCRIPTION>
|
||||
|
||||
This renergy command can be used to manage the energy attributes of
|
||||
a machine. Presently, it only supports IBM POWER6 rack-mounted servers.
|
||||
Note: The keyword 'server' in this document is identical to
|
||||
'rack-mounted server'.
|
||||
This B<renergy> command can be used to manage the energy consumption of
|
||||
IBM servers which support IBM EnergyScale technology. Through this command,
|
||||
user can query and set the power saving and power capping status, also can
|
||||
query the average consumed energy, the ambient and exhaust temperature,
|
||||
the processor frequency for a server.
|
||||
|
||||
The parameter 'noderange' can be a list of node names (CEC's name).
|
||||
Note: Lpar name is not acceptable.
|
||||
B<renergy> command supports IBM POWER6 and POWER7 rack-mounted servers.
|
||||
Currently, following specific hardware types are supported:
|
||||
I<8203-E4A>, I<8204-E8A>, I<9125-F2A>, I<8233-E8B>.
|
||||
|
||||
B<renergy> command can accept multiple attributes to query. If only
|
||||
keywords list is specified, without the '=', it displays the current
|
||||
value.
|
||||
B<energy> command can only set one attribute once running.
|
||||
The parameter I<noderange> needs to be specified for B<renergy> command to
|
||||
get the target server. The I<noderange> should be a list of CEC names. Lpar name
|
||||
is not acceptable here.
|
||||
|
||||
For the attributes that are not supported by certain server, the return
|
||||
value will be 'na'.
|
||||
B<renergy> command can accept multiple of energy attributes to query or one of energy
|
||||
attribute to set. If only the attribute name is specified, without the '=', B<renergy>
|
||||
gets and displays the current value. Otherwise, if specifying the attribute with '=' like
|
||||
'savingstatus=on', B<renergy> will turn on the static power saving.
|
||||
|
||||
The attributes listed in the B<SYNOPSIS> section are which ones can be handled by
|
||||
B<renergy> command. But for each specific type of server, there are some attributes
|
||||
are not supported. If user specifies an attribute which does not be supported by certain
|
||||
server, the return value of this attribute will be 'na'.
|
||||
|
||||
The supported attributes for each specific hardware types are listed at following:
|
||||
|
||||
8203-E4A, 8204-E8A
|
||||
Supported attributes:
|
||||
B<Query>: savingstatus,cappingstatus,cappingmin,cappingmax,cappingvalue,
|
||||
cappingsoftmin,averageAC,averageDC,ambienttemp,exhausttemp,CPUspeed
|
||||
B<Set>: savingstatus,cappingstatus,cappingwatt,cappingperc
|
||||
|
||||
9125-F2A
|
||||
Supported attributes:
|
||||
B<Query>: savingstatus,averageAC,ambienttemp,exhausttemp,CPUspeed
|
||||
B<Set>: savingstatus
|
||||
|
||||
8233-E8B
|
||||
Supported attributes:
|
||||
B<Query>: savingstatus,dsavingstatus,cappingstatus,cappingmin,cappingmax,
|
||||
cappingvalue,cappingsoftmin,averageAC,averageDC,ambienttemp,exhausttemp,
|
||||
CPUspeed,syssbpower,sysIPLtime
|
||||
B<Set>: savingstatus,dsavingstatus,cappingstatus,cappingwatt,cappingperc
|
||||
|
||||
Prerequisite:
|
||||
Before running the B<energy> command, a prerequisite package
|
||||
B<xCAT-cimclient> needs to be downloaded from IBM web site and installed.
|
||||
Note:
|
||||
Each query operation for attribute CPUspeed, averageAC or averageDC
|
||||
costs about 30 seconds to complete. Query for the others attributes
|
||||
needs about 30 seconds to complete. The query for others attributes
|
||||
will get response immediately.
|
||||
|
||||
|
||||
Only following specific hardware types are supported by B<renergy> command:
|
||||
=head1 B<PREREQUISITE>
|
||||
|
||||
8203-E4A, 8204-E8A
|
||||
Supports attributes: all
|
||||
|
||||
9125-F2A
|
||||
Supports attributes: savingstatus,CPUspeed,ambienttemp,
|
||||
exhausttemp,averageAC
|
||||
B<renergy> command depends on a CIM client tool B<xCAT-cimclient> to
|
||||
communicate with server. Then, before running the B<renergy> command, please
|
||||
check whether the B<xCAT-cimclient> package has been installed.
|
||||
B<xCAT-cimclient> can be downloaded from IBM web site.
|
||||
|
||||
|
||||
=head1 B<OPTIONS>
|
||||
@ -67,55 +106,74 @@ Only following specific hardware types are supported by B<renergy> command:
|
||||
Verbose output.
|
||||
|
||||
|
||||
all
|
||||
Query all of the energy attributes.
|
||||
B<all>
|
||||
Query all energy attributes which supported by the specific
|
||||
type of hardware.
|
||||
|
||||
savingstatus
|
||||
Query the Power Saving status. The result should be
|
||||
'on' or 'off'.
|
||||
Note: To support the power saving attribute, POWER6
|
||||
processors should greater than or equal to 4.0 GHz.
|
||||
Query the static power saving status. The result should be
|
||||
'on' or 'off'. 'on' - enable; 'off' - disable.
|
||||
|
||||
savingstatus={on | off}
|
||||
Set the Power Saving status. The value must be 'on'
|
||||
or 'off'.
|
||||
Note: The setting value needs about 2 minutes to take
|
||||
effect.
|
||||
Set the static power saving. The value must be 'on' or 'off'.
|
||||
If turning on the static power saving, the processor frequency
|
||||
and voltage will be dropped to a fixed value to save energy.
|
||||
The savingstatus setting operation needs about 2 minutes to
|
||||
take effect. (The used time depends on the hardware type)
|
||||
|
||||
dsavingstatus
|
||||
Query the dynamic power saving status. The result should
|
||||
be 'on-norm', 'on-maxp' or 'off'.
|
||||
If turning on the dynamic power saving, the processor
|
||||
frequency and voltage will be dropped dynamically based on
|
||||
the core utilization. It supports two modes for turn on state:
|
||||
I<on-norm> - means normal, the processor frequency cannot
|
||||
exceed the nominal value;
|
||||
I<on-maxp> - means maximum performance, the processor
|
||||
frequency can exceed the nominal value.
|
||||
|
||||
dsavingstatus={on-norm | on-maxp | off}
|
||||
Set the dynamic power saving. The value must be 'on-norm',
|
||||
'on-maxp' or 'off'.
|
||||
The dsavingstatus setting operation needs about 2 minutes
|
||||
to take effect. (The used time depends on the hardware type)
|
||||
|
||||
cappingstatus
|
||||
Query the Power Capping status. The result should be
|
||||
'on' or 'off'.
|
||||
|
||||
cappingstatus={on | off}
|
||||
Set the Power Capping status. The value must be 'on'
|
||||
Query the power capping status. The result should be 'on'
|
||||
or 'off'.
|
||||
|
||||
cappingstatus={on | off}
|
||||
Set the power capping status. The value must be 'on'
|
||||
or 'off'. This is the switch to turn on or turn off the
|
||||
power capping function.
|
||||
|
||||
cappingwatt=watt
|
||||
Set the Power Capping value base on the watt unit.
|
||||
If the 'watt' > maximum of cappingmaxmin or 'watt'
|
||||
< minimum of cappingmaxmim, the setting operation
|
||||
will fail.
|
||||
Set the power capping value base on the watt unit.
|
||||
If the 'watt' > maximum of I<cappingmaxmin> or 'watt'
|
||||
< minimum of I<cappingmaxmim>, the setting operation
|
||||
will be failed.
|
||||
|
||||
cappingperc=percentage
|
||||
Set the Power Capping value base on the percentage of
|
||||
the max-min of capping value.
|
||||
Set the power capping value base on the percentage of
|
||||
the max-min of capping value which getting from
|
||||
I<cappingmaxmim> attribute. The valid value must be
|
||||
from 0 to 100.
|
||||
|
||||
cappingmaxmin
|
||||
Query the maximum and minimum of Power Capping value
|
||||
that can be set for a CEC. (Unit is watt)
|
||||
Query the maximum and minimum of power capping value
|
||||
which can be set for a CEC. (Unit is watt)
|
||||
|
||||
cappingvalue
|
||||
Query the current Power Capping value. (Unit is watt)
|
||||
Query the current power capping value. (Unit is watt)
|
||||
|
||||
cappingsoftmin
|
||||
Query the minimum value that can be assigned to Pcap
|
||||
without guaranteed enforceability. (Unit is watt)
|
||||
Query the minimum value that can be assigned to power
|
||||
capping without guaranteed enforceability. (Unit is watt)
|
||||
|
||||
averageAC
|
||||
Query the average power consumed (Input). (Unit is watt)
|
||||
Note: For 9125-F2A server, the value of attribute
|
||||
averageAC is the aggregate for all of the servers in the
|
||||
rack.
|
||||
averageAC is the aggregate for all of the servers in a rack.
|
||||
|
||||
averageDC
|
||||
Query the average power consumed (Output). (Unit is
|
||||
@ -128,7 +186,15 @@ exhausttemp
|
||||
Query the current exhaust temperature. (Unit is centigrade)
|
||||
|
||||
CPUspeed
|
||||
Query the effective CPU speed. (Unit is MHz)
|
||||
Query the effective processor frequency. (Unit is MHz)
|
||||
|
||||
syssbpower
|
||||
Query the system power consumed prior to power on.
|
||||
(Unit is MHz)
|
||||
|
||||
sysIPLtime
|
||||
Query the time used from FSP standby to OS standby.
|
||||
(Unit is Second)
|
||||
|
||||
|
||||
=head1 B<RETURN VALUE>
|
||||
@ -140,51 +206,54 @@ CPUspeed
|
||||
|
||||
=head1 B<EXAMPLES>
|
||||
|
||||
1. Query all the attributes which CEC1,CEC2 supported
|
||||
1. Query all the attributes which CEC1,CEC2 supported.
|
||||
B<renergy> CEC1,CEC2 all
|
||||
|
||||
The output of the query operation:
|
||||
CEC1: savingstatus: on
|
||||
CEC1: cappingstatus: on
|
||||
CEC1: cappingmin: 782 W
|
||||
CEC1: cappingmax: 850 W
|
||||
CEC1: cappingvalue: 816 W
|
||||
CEC1: cappingsoftmin: 200 W
|
||||
CEC1: averageAC: 430 W
|
||||
CEC1: averageDC: 364 W
|
||||
CEC1: ambienttemp: 25 C
|
||||
CEC1: exhausttemp: 32 C
|
||||
CEC1: CPUspeed: 3621 MHz
|
||||
CEC1: savingstatus: off
|
||||
CEC1: dsavingstatus: off
|
||||
CEC1: cappingstatus: off
|
||||
CEC1: cappingmin: 1953 W
|
||||
CEC1: cappingmax: 2358 W
|
||||
CEC1: cappingvalue: 2000 W
|
||||
CEC1: cappingsoftmin: 304 W
|
||||
CEC1: averageAC: na
|
||||
CEC1: averageDC: na
|
||||
CEC1: ambienttemp: na
|
||||
CEC1: exhausttemp: na
|
||||
CEC1: CPUspeed: na
|
||||
CEC1: syssbpower: 40 W
|
||||
CEC1: sysIPLtime: 900 S
|
||||
CEC2: savingstatus: off
|
||||
CEC2: cappingstatus: off
|
||||
CEC2: cappingmin: na
|
||||
CEC2: cappingmax: na
|
||||
CEC2: cappingvalue: na
|
||||
CEC2: cappingsoftmin: na
|
||||
CEC2: averageAC: na
|
||||
CEC2: averageDC: na
|
||||
CEC2: ambienttemp: na
|
||||
CEC2: exhausttemp: na
|
||||
CEC2: CPUspeed: na
|
||||
CEC2: cappingmin: 955 W
|
||||
CEC2: cappingmax: 1093 W
|
||||
CEC2: cappingvalue: 1000 W
|
||||
CEC2: cappingsoftmin: 226 W
|
||||
CEC2: averageAC: 627 W
|
||||
CEC2: averageDC: 531 W
|
||||
CEC2: ambienttemp: 25 C
|
||||
CEC2: exhausttemp: 40 C
|
||||
CEC2: CPUspeed: 4695 MHz
|
||||
|
||||
2. Query the attributes savingstatus, cappingstatus
|
||||
and CPUspeed of server CEC1
|
||||
B<renergy> CEC1 savingstatus,cappingstatus,CPUspeed
|
||||
and CPUspeed for server CEC1.
|
||||
B<renergy> CEC1 savingstatus cappingstatus CPUspeed
|
||||
|
||||
The output of the query operation:
|
||||
CEC1: savingstatus: off
|
||||
CEC1: cappingstatus: on
|
||||
CEC1: CPUspeed: 3621 MHz
|
||||
|
||||
3. Turn on the Power saving function of CEC1
|
||||
3. Turn on the power saving function of CEC1.
|
||||
B<renergy> CEC1 savingstatus=on
|
||||
|
||||
The output of the setting operation:
|
||||
CEC1: Set savingstatus succeeded.
|
||||
CEC1: This setting may need some minutes to take effect.
|
||||
|
||||
4. Set the Power Capping value base on the percentage of the
|
||||
max-min capping value
|
||||
4. Set the power capping value base on the percentage of the
|
||||
max-min capping value. Here, set it to 50%.
|
||||
B<renergy> CEC1 cappingperc=50
|
||||
|
||||
If the maximum capping value of the CEC1 is 850w, and the
|
||||
|
Loading…
Reference in New Issue
Block a user