
dejan at suse
Nov 6, 2011, 2:09 PM
Post #15 of 18
(2253 views)
Permalink
|
Hi John, On Tue, Nov 01, 2011 at 04:46:04AM -0600, John Shi wrote: > > Hi Dejan, > I think we can close these two issues, if we want to improve, or someone has good idea, > we can open a new issue. OK. I'll review again the VirtualDomain part. Andrew, can you please pick the NodeUtilization which should be part of pacemaker. Thanks, Dejan > Regards, > John > > >>> Dejan Muhamedagic <dejan [at] suse> 10/28/2011 10:39 ä¸‹åˆ >>> > Hi John, > > On Fri, Oct 28, 2011 at 08:21:28AM -0600, John Shi wrote: > > > > Hi Dejan, > > I made the new patch for pacemaker, it contains the new NodeUtilization RA. > > Yes, this is a resend of the same patches I sent last time, but just separate the NodeUtilization RA to pacemaker. > > So, which issues do you still think are open? > > Cheers, > > Dejan > > > Regards, > > John > > > > > > >>> Dejan Muhamedagic <dejan [at] suse> 8/19/2011 8:18 ä¸‹åˆ >>> > > Hi John, > > > > On Thu, Aug 18, 2011 at 12:20:26AM -0600, John Shi wrote: > > > > > > > > > > > > >>> "John Shi" <jshi [at] novell> 8/13/2011 2:56 ä¸Šåˆ >>> > > > > > > > > > >>> Lars Marowsky-Bree <lmb [at] suse> 07/22/11 7:40 ?? >>> > > > On 2011-07-13T22:56:06, John Shi <jshi [at] novell> wrote: > > > > > > >> how can we know that node is ready to run Xen RA or other RA, Xen RA > > > >> cares about the memory which is "physical_mem - (dom0_min_mem + > > > >> domU_mem * run_num)" but other RA just care about the physical memory > > > >> or dom0 memory(Xen kernel). > > > >> > > > >> Can we separate the memory of utilization to dom0_mem and domU_mem ? > > > > > > > >Indeed, there's a difference between the memory available to the > > > >hypervisor/domain 0/base OS and that available for running guests; this > > > >probably should be handled by os_mem and vm_mem. > > > > > > > >I think the main use case with virtualized environments is that they run > > > >"just" VMs, so nobody cares about the memory available in the HVM, but > > > >you're right, it's good to have a clean separation immediately. > > > > > > > >Good catch! > > > > > > > > > Hi, > > > Xinwei Hu and I improved the 2 resource-agents patches, > > > 1. Separate the memory of utilization to host_memory and hypervisor_memory. > > > 2. Add some parameters for cpu/memory reservation. > > > 3. VirtualDomain RA just cares about hypervisor_memory. > > > > > > I know more details we need to discuss, but could we put them into upstream first ? > > > > I wasn't involved in the discussion earlier. Can you please > > reiterate which details are still open? > > > > Also, should the new NodeUtilization RA go into the pacemaker tree? > > > > Cheers, > > > > Dejan > > > > P.S. Is this a resend of the same patches you sent on Aug 12? > > > > > We can gradually improve these features in future. > > > > > > Regards, > > > John > > > > > From 9071409ecd0e0951af74a7823d5d2f712a0f22f3 Mon Sep 17 00:00:00 2001 > > > From: John Shi <jshi [at] novell> > > > Date: Sat, 13 Aug 2011 02:18:50 +0800 > > > Subject: [PATCH] Build: Add a new agent: NodeUtilization. > > > This agent detects system parameters and put them into CIB by crm_attribute, > > > and it runs on every node as clone resource. > > > > > > --- > > > heartbeat/Makefile.am | 1 + > > > heartbeat/NodeUtilization | 229 +++++++++++++++++++++++++++++++++++++++++++++ > > > 2 files changed, 230 insertions(+), 0 deletions(-) > > > create mode 100755 heartbeat/NodeUtilization > > > > > > diff --git a/heartbeat/Makefile.am b/heartbeat/Makefile.am > > > index dacf3bd..3a3d221 100644 > > > --- a/heartbeat/Makefile.am > > > +++ b/heartbeat/Makefile.am > > > @@ -77,6 +77,7 @@ ocf_SCRIPTS = ClusterMon\ > > > mysql\ > > > mysql-proxy\ > > > nfsserver\ > > > +NodeUtilization\ > > > oracle\ > > > oralsnr\ > > > pingd\ > > > diff --git a/heartbeat/NodeUtilization b/heartbeat/NodeUtilization > > > new file mode 100755 > > > index 0000000..dca0d9a > > > --- /dev/null > > > +++ b/heartbeat/NodeUtilization > > > @@ -0,0 +1,229 @@ > > > +#!/bin/sh > > > +# > > > +# > > > +#NodeUtilization OCF Resource Agent > > > +# > > > +# Copyright (c) 2011 SUSE LINUX, John Shi > > > +# All Rights Reserved. > > > +# > > > +# This program is free software; you can redistribute it and/or modify > > > +# it under the terms of version 2 of the GNU General Public License as > > > +# published by the Free Software Foundation. > > > +# > > > +# This program is distributed in the hope that it would be useful, but > > > +# WITHOUT ANY WARRANTY; without even the implied warranty of > > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > > +# > > > +# Further, this software is distributed without any warranty that it is > > > +# free of the rightful claim of any third person regarding infringement > > > +# or the like. Any license provided herein, whether implied or > > > +# otherwise, applies only to this software file. Patent licenses, if > > > +# any, provided herein do not apply to combinations of this program with > > > +# other software, or any other product whatsoever. > > > +# > > > +# You should have received a copy of the GNU General Public License > > > +# along with this program; if not, write the Free Software Foundation, > > > +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. > > > +# > > > +####################################################################### > > > +# Initialization: > > > + > > > +: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} > > > +. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs > > > + > > > +####################################################################### > > > + > > > +meta_data() { > > > +cat <<END > > > +<?xml version="1.0"?> > > > +<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > > > +<resource-agent name="NodeUtilization"> > > > +<version>1.0</version> > > > + > > > +<longdesc lang="en"> > > > +This is an NodeUtilization Resource Agent. > > > +This agent detects system parameters and put them into CIB by crm_attribute, > > > +and it runs on every node as clone resource. > > > +</longdesc> > > > +<shortdesc lang="en">NodeUtilization resource agent</shortdesc> > > > + > > > +<parameters> > > > +<parameter name="dynamic" unique="0" required="0"> > > > +<longdesc lang="en"> > > > +If set, some of the HA parameters will be reset if there are > > > +difference between HA parameters and system parameters when HA monitor. > > > +Otherwise, the HA parameters will be set once when the resource instance starts. > > > +</longdesc> > > > +<shortdesc lang="en">Set HA parameters when start or monitor</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_cpu" unique="0" required="0"> > > > +<longdesc lang="en">Enable setting cpu utilization.</longdesc> > > > +<shortdesc lang="en">Enable setting cpu utilization.</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_cpu_reservation" unique="0" required="0"> > > > +<longdesc lang="en">CPU reserved for non-HA related usage.</longdesc> > > > +<shortdesc lang="en">CPU reserved for non-HA related usage.</shortdesc> > > > +<content type="integer" default="1" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_host_memory" unique="0" required="0"> > > > +<longdesc lang="en">Enable setting memory utilization of host.</longdesc> > > > +<shortdesc lang="en">Enable setting memory utilization of host.</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_host_memory_reservation" unique="0" required="0"> > > > +<longdesc lang="en">Memory reserved for other services inside host, in MB.</longdesc> > > > +<shortdesc lang="en">Memory reserved for other services inside host, in MB.</shortdesc> > > > +<content type="integer" default="512" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_hv_memory" unique="0" required="0"> > > > +<longdesc lang="en">Enable setting the memory utilization of hypervisor.</longdesc> > > > +<shortdesc lang="en">Enable setting the memory utilization of hypervisor.</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="utilization_hv_memory_reservation" unique="0" required="0"> > > > +<longdesc lang="en">Memory reserved for the hypervisor, in MB.</longdesc> > > > +<shortdesc lang="en">Memory reserved for the hypervisor, in MB.</shortdesc> > > > +<content type="integer" default="512" /> > > > +</parameter> > > > +</parameters> > > > + > > > +<actions> > > > +<action name="start" timeout="90" /> > > > +<action name="stop" timeout="100" /> > > > +<action name="monitor" timeout="20s" interval="60s"/> > > > +<action name="meta-data" timeout="5" /> > > > +<action name="validate-all" timeout="30" /> > > > +</actions> > > > +</resource-agent> > > > +END > > > +} > > > + > > > +set_utilization() { > > > + host_name="$(hostname)" > > > + > > > + if [ "$OCF_RESKEY_utilization_cpu" = "true" -o "$OCF_RESKEY_utilization_cpu" = "1" ]; then > > > + sys_cpu=$(( $(grep -c processor /proc/cpuinfo) - $OCF_RESKEY_utilization_cpu_reservation )) > > > + uti_cpu=$(crm_attribute -Q -t nodes -U "$host_name" -z -n cpu 2>/dev/null) > > > + > > > + if [ "$sys_cpu" != "$uti_cpu" ]; then > > > + if ! crm_attribute -t nodes -U "$host_name" -z -n cpu -v $sys_cpu; then > > > + ocf_log err "Failed to set cpu of utilization by crm_attribute." > > > + return 1 > > > + fi > > > + fi > > > + fi > > > + > > > + if [ "$OCF_RESKEY_utilization_host_memory" = "true" -o "$OCF_RESKEY_utilization_host_memory" = "1" ]; then > > > + sys_mem=$(( $(awk '/MemTotal/{printf("%d\n",$2/1024);exit(0)}' /proc/meminfo) - $OCF_RESKEY_utilization_host_memory_reservation )) > > > + uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n host_memory 2>/dev/null) > > > + > > > + if [ "$sys_mem" != "$uti_mem" ]; then > > > + if ! crm_attribute -t nodes -U "$host_name" -z -n host_memory -v $sys_mem; then > > > + ocf_log err "Failed to set host_memory of utilization by crm_attribute." > > > + return 1 > > > + fi > > > + fi > > > + fi > > > + > > > + if [ -x /usr/sbin/xm ]; then > > > + if [ "$OCF_RESKEY_utilization_hv_memory" = "true" -o "$OCF_RESKEY_utilization_hv_memory" = "1" ]; then > > > + hv_mem=$(( $(xm info | awk '/max_free_memory/{printf("%d\n",$3);exit(0)}') - $OCF_RESKEY_utilization_hv_memory_reservation )) > > > + uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n hv_memory 2>/dev/null) > > > + > > > + if [ "$hv_mem" != "$uti_mem" ]; then > > > + if ! crm_attribute -t nodes -U "$host_name" -z -n hv_memory -v $hv_mem; then > > > + ocf_log err "Failed to set hv_memory of utilization by crm_attribute." > > > + return 1 > > > + fi > > > + fi > > > + fi > > > + fi > > > +} > > > + > > > +NodeUtilization_usage() { > > > +cat <<END > > > +usage: $0 {start|stop|monitor|validate-all|meta-data} > > > + > > > +Expects to have a fully populated OCF RA-compliant environment set. > > > +END > > > +} > > > + > > > +NodeUtilization_start() { > > > + if ! touch "$OCF_RESKEY_pidfile"; then > > > + ocf_log err "Failed to touch pidfile: ${OCF_RESKEY_pidfile}." > > > + exit $OCF_ERR_GENERIC > > > + fi > > > + if [ "$OCF_RESKEY_dynamic" = "false" -o "$OCF_RESKEY_dynamic" = "0" ]; then > > > + if ! set_utilization; then > > > + exit $OCF_ERR_GENERIC > > > + fi > > > + fi > > > + exit $OCF_SUCCESS > > > +} > > > + > > > +NodeUtilization_stop() { > > > + rm -f $OCF_RESKEY_pidfile > > > + exit $OCF_SUCCESS > > > +} > > > + > > > +NodeUtilization_monitor() { > > > + if [ ! -f $OCF_RESKEY_pidfile ]; then > > > + exit $OCF_NOT_RUNNING > > > + fi > > > + > > > + if [ "$OCF_RESKEY_dynamic" = "true" -o "$OCF_RESKEY_dynamic" = "1" ]; then > > > + if ! set_utilization; then > > > + exit $OCF_ERR_GENERIC > > > + fi > > > + fi > > > + exit $OCF_SUCCESS > > > +} > > > + > > > +NodeUtilization_validate() { > > > + exit $OCF_SUCCESS > > > +} > > > + > > > + > > > +: ${OCF_RESKEY_pidfile:="$HA_VARRUN/NodeUtilization-${OCF_RESOURCE_INSTANCE}"} > > > +: ${OCF_RESKEY_dynamic:="true"} > > > +: ${OCF_RESKEY_utilization_cpu:="true"} > > > +: ${OCF_RESKEY_utilization_cpu_reservation="1"} > > > +: ${OCF_RESKEY_utilization_hv_memory:="true"} > > > +: ${OCF_RESKEY_utilization_hv_memory_reservation="512"} > > > +: ${OCF_RESKEY_utilization_host_memory:="true"} > > > +: ${OCF_RESKEY_utilization_host_memory_reservation="512"} > > > + > > > +if [ $# -ne 1 ]; then > > > + NodeUtilization_usage > > > + exit $OCF_ERR_ARGS > > > +fi > > > + > > > +case $__OCF_ACTION in > > > +meta-data)meta_data > > > +exit $OCF_SUCCESS > > > +;; > > > +start)NodeUtilization_start > > > +;; > > > +stop)NodeUtilization_stop > > > +;; > > > +monitor)NodeUtilization_monitor > > > +;; > > > +validate-all)NodeUtilization_validate > > > +;; > > > +usage|help)NodeUtilization_usage > > > +exit $OCF_SUCCESS > > > +;; > > > +*)NodeUtilization_usage > > > +exit $OCF_ERR_UNIMPLEMENTED > > > +;; > > > +esac > > > + > > > +exit $? > > > -- > > > 1.7.2.5 > > > > > > > > From 3f26aa2cf5f9f7da40182008079c6ea7498f96fd Mon Sep 17 00:00:00 2001 > > > From: John Shi <jshi [at] novell> > > > Date: Sat, 13 Aug 2011 02:25:37 +0800 > > > Subject: [PATCH] Low: VirtualDomain: Add a functionality that modifiesutilization of resource automatically. > > > > > > --- > > > heartbeat/VirtualDomain | 67 +++++++++++++++++++++++++++++++++++++++++++++++ > > > 1 files changed, 67 insertions(+), 0 deletions(-) > > > > > > diff --git a/heartbeat/VirtualDomain b/heartbeat/VirtualDomain > > > index 0786944..d9321d9 100755 > > > --- a/heartbeat/VirtualDomain > > > +++ b/heartbeat/VirtualDomain > > > @@ -19,9 +19,15 @@ > > > # Defaults > > > OCF_RESKEY_force_stop_default=0 > > > OCF_RESKEY_hypervisor_default="$(virsh --quiet uri)" > > > +OCF_RESKEY_dynamic_utilization_default="true" > > > +OCF_RESKEY_set_utilization_cpu_default="true" > > > +OCF_RESKEY_set_utilization_memory_default="true" > > > > > > : ${OCF_RESKEY_force_stop=${OCF_RESKEY_force_stop_default}} > > > : ${OCF_RESKEY_hypervisor=${OCF_RESKEY_hypervisor_default}} > > > +: ${OCF_RESKEY_dynamic_utilization=${OCF_RESKEY_dynamic_utilization_default}} > > > +: ${OCF_RESKEY_set_utilization_cpu=${OCF_RESKEY_set_utilization_cpu_default}} > > > +: ${OCF_RESKEY_set_utilization_memory=${OCF_RESKEY_set_utilization_memory_default}} > > > ####################################################################### > > > > > > ## I'd very much suggest to make this RA use bash, > > > @@ -117,6 +123,28 @@ Be sure to set the timeout of these operations to accommodate this delay. > > > <content type="string" default="" /> > > > </parameter> > > > > > > +<parameter name="dynamic_utilization" unique="0" required="0"> > > > +<longdesc lang="en"> > > > +If set, the utilization parameter of resource will be reset if there are > > > +difference between resource parameters and system parameters when agent monitor. > > > +Otherwise, the resource parameters will be set once when agent start. > > > +</longdesc> > > > +<shortdesc lang="en">Set utilization of resource when agent monitor</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="set_utilization_cpu" unique="0" required="0"> > > > +<longdesc lang="en">Enable setting cpu of utilization.</longdesc> > > > +<shortdesc lang="en">Enable setting cpu of utilization</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > +<parameter name="set_utilization_memory" unique="0" required="0"> > > > +<longdesc lang="en">Enable setting memory of utilization.</longdesc> > > > +<shortdesc lang="en">Enable setting memory of utilization</shortdesc> > > > +<content type="boolean" default="true" /> > > > +</parameter> > > > + > > > </parameters> > > > > > > <actions> > > > @@ -133,6 +161,33 @@ Be sure to set the timeout of these operations to accommodate this delay. > > > EOF > > > } > > > > > > +set_utilization() { > > > + local dom_cpu dom_mem > > > + local uti_cpu uti_mem > > > + > > > + read dom_cpu dom_mem <<EOF > > > +$(LANG=C virsh $VIRSH_OPTIONS dominfo ${DOMAIN_NAME} | > > > +awk '/CPU\(s\)/{cpu=$2} /Max memory/{mem=$3} END{printf("%d %d\n", cpu, mem/1024)}') > > > +EOF > > > + uti_cpu=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g cpu 2>/dev/null) > > > + uti_mem=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g hv_memory 2>/dev/null) > > > + > > > + if [ "$OCF_RESKEY_set_utilization_cpu" = "true" -o "$OCF_RESKEY_set_utilization_cpu" = "1" ]; then > > > + if [ "$dom_cpu" != "$uti_cpu" ]; then > > > + if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p cpu -v $dom_cpu; then > > > + ocf_log warn "Failed to set cpu of utilization by crm_resource." > > > + fi > > > + fi > > > + fi > > > + if [ "$OCF_RESKEY_set_utilization_memory" = "true" -o "$OCF_RESKEY_set_utilization_memory" = "1" ]; then > > > + if [ "$dom_mem" != "$uti_mem" ]; then > > > + if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p hv_memory -v $dom_mem; then > > > + ocf_log warn "Failed to set hv_memory of utilization by crm_resource." > > > + fi > > > + fi > > > + fi > > > +} > > > + > > > # Set options to be passed to virsh: > > > VIRSH_OPTIONS="--connect=${OCF_RESKEY_hypervisor} --quiet" > > > > > > @@ -236,6 +291,11 @@ VirtualDomain_Start() { > > > while ! VirtualDomain_Monitor; do > > > sleep 1 > > > done > > > + > > > + if [ "$OCF_RESKEY_dynamic_utilization" = "false" -o "$OCF_RESKEY_dynamic_utilization" = "0" ]; then > > > + set_utilization > > > + fi > > > + > > > return $OCF_SUCCESS > > > } > > > > > > @@ -404,6 +464,13 @@ VirtualDomain_Monitor() { > > > fi > > > done > > > fi > > > + > > > + if [ "$OCF_RESKEY_dynamic_utilization" = "true" -o "$OCF_RESKEY_dynamic_utilization" = "1" ]; then > > > + if ocf_is_probe; then > > > + set_utilization > > > + fi > > > + fi > > > + > > > return ${rc} > > > } > > > > > > -- > > > 1.7.2.5 > > > > > > > > > _______________________________________________ > > ha-wg-technical mailing list > > ha-wg-technical [at] lists > > https://lists.linux-foundation.org/mailman/listinfo/ha-wg-technical > > > From e39948043d94c30557851d2b759468da3935d072 Mon Sep 17 00:00:00 2001 > > From: John Shi <jshi [at] suse> > > Date: Fri, 28 Oct 2011 21:53:33 +0800 > > Subject: [PATCH] Low: Build: New agent NodeUtilization which is detecting os information and putting them into CIB by crm_attribute > > > > --- > > extra/resources/Makefile.am | 1 + > > extra/resources/NodeUtilization | 228 +++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 229 insertions(+), 0 deletions(-) > > create mode 100644 extra/resources/NodeUtilization > > > > diff --git a/extra/resources/Makefile.am b/extra/resources/Makefile.am > > index bc35401..210e9ed 100644 > > --- a/extra/resources/Makefile.am > > +++ b/extra/resources/Makefile.am > > @@ -27,6 +27,7 @@ ocf_SCRIPTS = ClusterMon \ > > Dummy\ > > HealthCPU\ > > HealthSMART\ > > +NodeUtilization\ > > o2cb\ > > ping\ > > pingd\ > > diff --git a/extra/resources/NodeUtilization b/extra/resources/NodeUtilization > > new file mode 100644 > > index 0000000..483053a > > --- /dev/null > > +++ b/extra/resources/NodeUtilization > > @@ -0,0 +1,228 @@ > > +#!/bin/sh > > +# > > +# > > +#NodeUtilization OCF Resource Agent > > +# > > +# Copyright (c) 2011 SUSE LINUX, John Shi > > +# All Rights Reserved. > > +# > > +# This program is free software; you can redistribute it and/or modify > > +# it under the terms of version 2 of the GNU General Public License as > > +# published by the Free Software Foundation. > > +# > > +# This program is distributed in the hope that it would be useful, but > > +# WITHOUT ANY WARRANTY; without even the implied warranty of > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > +# > > +# Further, this software is distributed without any warranty that it is > > +# free of the rightful claim of any third person regarding infringement > > +# or the like. Any license provided herein, whether implied or > > +# otherwise, applies only to this software file. Patent licenses, if > > +# any, provided herein do not apply to combinations of this program with > > +# other software, or any other product whatsoever. > > +# > > +# You should have received a copy of the GNU General Public License > > +# along with this program; if not, write the Free Software Foundation, > > +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. > > +# > > +####################################################################### > > +# Initialization: > > + > > +. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs > > + > > +####################################################################### > > + > > +meta_data() { > > +cat <<END > > +<?xml version="1.0"?> > > +<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > > +<resource-agent name="NodeUtilization"> > > +<version>1.0</version> > > + > > +<longdesc lang="en"> > > +This is an NodeUtilization Resource Agent. > > +This agent detects system parameters and put them into CIB by crm_attribute, > > +and it runs on every node as clone resource. > > +</longdesc> > > +<shortdesc lang="en">NodeUtilization resource agent</shortdesc> > > + > > +<parameters> > > +<parameter name="dynamic" unique="0" required="0"> > > +<longdesc lang="en"> > > +If set, some of the HA parameters will be reset if there are > > +difference between HA parameters and system parameters when HA monitor. > > +Otherwise, the HA parameters will be set once when the resource instance starts. > > +</longdesc> > > +<shortdesc lang="en">Set HA parameters when start or monitor</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="utilization_cpu" unique="0" required="0"> > > +<longdesc lang="en">Enable setting cpu utilization.</longdesc> > > +<shortdesc lang="en">Enable setting cpu utilization.</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="utilization_cpu_reservation" unique="0" required="0"> > > +<longdesc lang="en">CPU reserved for non-HA related usage.</longdesc> > > +<shortdesc lang="en">CPU reserved for non-HA related usage.</shortdesc> > > +<content type="integer" default="1" /> > > +</parameter> > > + > > +<parameter name="utilization_host_memory" unique="0" required="0"> > > +<longdesc lang="en">Enable setting memory utilization of host.</longdesc> > > +<shortdesc lang="en">Enable setting memory utilization of host.</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="utilization_host_memory_reservation" unique="0" required="0"> > > +<longdesc lang="en">Memory reserved for other services inside host, in MB.</longdesc> > > +<shortdesc lang="en">Memory reserved for other services inside host, in MB.</shortdesc> > > +<content type="integer" default="512" /> > > +</parameter> > > + > > +<parameter name="utilization_hv_memory" unique="0" required="0"> > > +<longdesc lang="en">Enable setting the memory utilization of hypervisor.</longdesc> > > +<shortdesc lang="en">Enable setting the memory utilization of hypervisor.</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="utilization_hv_memory_reservation" unique="0" required="0"> > > +<longdesc lang="en">Memory reserved for the hypervisor, in MB.</longdesc> > > +<shortdesc lang="en">Memory reserved for the hypervisor, in MB.</shortdesc> > > +<content type="integer" default="512" /> > > +</parameter> > > +</parameters> > > + > > +<actions> > > +<action name="start" timeout="90" /> > > +<action name="stop" timeout="100" /> > > +<action name="monitor" timeout="20s" interval="60s"/> > > +<action name="meta-data" timeout="5" /> > > +<action name="validate-all" timeout="30" /> > > +</actions> > > +</resource-agent> > > +END > > +} > > + > > +set_utilization() { > > + host_name="$(hostname)" > > + > > + if [ "$OCF_RESKEY_utilization_cpu" = "true" -o "$OCF_RESKEY_utilization_cpu" = "1" ]; then > > + sys_cpu=$(( $(grep -c processor /proc/cpuinfo) - $OCF_RESKEY_utilization_cpu_reservation )) > > + uti_cpu=$(crm_attribute -Q -t nodes -U "$host_name" -z -n cpu 2>/dev/null) > > + > > + if [ "$sys_cpu" != "$uti_cpu" ]; then > > + if ! crm_attribute -t nodes -U "$host_name" -z -n cpu -v $sys_cpu; then > > + ocf_log err "Failed to set cpu of utilization by crm_attribute." > > + return 1 > > + fi > > + fi > > + fi > > + > > + if [ "$OCF_RESKEY_utilization_host_memory" = "true" -o "$OCF_RESKEY_utilization_host_memory" = "1" ]; then > > + sys_mem=$(( $(awk '/MemTotal/{printf("%d\n",$2/1024);exit(0)}' /proc/meminfo) - $OCF_RESKEY_utilization_host_memory_reservation )) > > + uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n host_memory 2>/dev/null) > > + > > + if [ "$sys_mem" != "$uti_mem" ]; then > > + if ! crm_attribute -t nodes -U "$host_name" -z -n host_memory -v $sys_mem; then > > + ocf_log err "Failed to set host_memory of utilization by crm_attribute." > > + return 1 > > + fi > > + fi > > + fi > > + > > + if [ -x /usr/sbin/xm ]; then > > + if [ "$OCF_RESKEY_utilization_hv_memory" = "true" -o "$OCF_RESKEY_utilization_hv_memory" = "1" ]; then > > + hv_mem=$(( $(xm info | awk '/max_free_memory/{printf("%d\n",$3);exit(0)}') - $OCF_RESKEY_utilization_hv_memory_reservation )) > > + uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n hv_memory 2>/dev/null) > > + > > + if [ "$hv_mem" != "$uti_mem" ]; then > > + if ! crm_attribute -t nodes -U "$host_name" -z -n hv_memory -v $hv_mem; then > > + ocf_log err "Failed to set hv_memory of utilization by crm_attribute." > > + return 1 > > + fi > > + fi > > + fi > > + fi > > +} > > + > > +NodeUtilization_usage() { > > +cat <<END > > +usage: $0 {start|stop|monitor|validate-all|meta-data} > > + > > +Expects to have a fully populated OCF RA-compliant environment set. > > +END > > +} > > + > > +NodeUtilization_start() { > > + if ! touch "$OCF_RESKEY_pidfile"; then > > + ocf_log err "Failed to touch pidfile: ${OCF_RESKEY_pidfile}." > > + exit $OCF_ERR_GENERIC > > + fi > > + if [ "$OCF_RESKEY_dynamic" = "false" -o "$OCF_RESKEY_dynamic" = "0" ]; then > > + if ! set_utilization; then > > + exit $OCF_ERR_GENERIC > > + fi > > + fi > > + exit $OCF_SUCCESS > > +} > > + > > +NodeUtilization_stop() { > > + rm -f $OCF_RESKEY_pidfile > > + exit $OCF_SUCCESS > > +} > > + > > +NodeUtilization_monitor() { > > + if [ ! -f $OCF_RESKEY_pidfile ]; then > > + exit $OCF_NOT_RUNNING > > + fi > > + > > + if [ "$OCF_RESKEY_dynamic" = "true" -o "$OCF_RESKEY_dynamic" = "1" ]; then > > + if ! set_utilization; then > > + exit $OCF_ERR_GENERIC > > + fi > > + fi > > + exit $OCF_SUCCESS > > +} > > + > > +NodeUtilization_validate() { > > + exit $OCF_SUCCESS > > +} > > + > > + > > +: ${OCF_RESKEY_pidfile:="$HA_VARRUN/NodeUtilization-${OCF_RESOURCE_INSTANCE}"} > > +: ${OCF_RESKEY_dynamic:="true"} > > +: ${OCF_RESKEY_utilization_cpu:="true"} > > +: ${OCF_RESKEY_utilization_cpu_reservation="1"} > > +: ${OCF_RESKEY_utilization_hv_memory:="true"} > > +: ${OCF_RESKEY_utilization_hv_memory_reservation="512"} > > +: ${OCF_RESKEY_utilization_host_memory:="true"} > > +: ${OCF_RESKEY_utilization_host_memory_reservation="512"} > > + > > +if [ $# -ne 1 ]; then > > + NodeUtilization_usage > > + exit $OCF_ERR_ARGS > > +fi > > + > > +case $__OCF_ACTION in > > +meta-data)meta_data > > +exit $OCF_SUCCESS > > +;; > > +start)NodeUtilization_start > > +;; > > +stop)NodeUtilization_stop > > +;; > > +monitor)NodeUtilization_monitor > > +;; > > +validate-all)NodeUtilization_validate > > +;; > > +usage|help)NodeUtilization_usage > > +exit $OCF_SUCCESS > > +;; > > +*)NodeUtilization_usage > > +exit $OCF_ERR_UNIMPLEMENTED > > +;; > > +esac > > + > > +exit $? > > -- > > 1.6.0.2 > > > > > From 7fffa2d22efb1610a4ca2424b6bc9455f1f5cce8 Mon Sep 17 00:00:00 2001 > > From: John Shi <jshi [at] suse> > > Date: Fri, 28 Oct 2011 21:56:51 +0800 > > Subject: [PATCH] Low: VirtualDomain: Add a functionality that modifies utilization of resource automatically. > > > > --- > > heartbeat/VirtualDomain | 67 +++++++++++++++++++++++++++++++++++++++++++++++ > > 1 files changed, 67 insertions(+), 0 deletions(-) > > > > diff --git a/heartbeat/VirtualDomain b/heartbeat/VirtualDomain > > index 0786944..d9321d9 100755 > > --- a/heartbeat/VirtualDomain > > +++ b/heartbeat/VirtualDomain > > @@ -19,9 +19,15 @@ > > # Defaults > > OCF_RESKEY_force_stop_default=0 > > OCF_RESKEY_hypervisor_default="$(virsh --quiet uri)" > > +OCF_RESKEY_dynamic_utilization_default="true" > > +OCF_RESKEY_set_utilization_cpu_default="true" > > +OCF_RESKEY_set_utilization_memory_default="true" > > > > : ${OCF_RESKEY_force_stop=${OCF_RESKEY_force_stop_default}} > > : ${OCF_RESKEY_hypervisor=${OCF_RESKEY_hypervisor_default}} > > +: ${OCF_RESKEY_dynamic_utilization=${OCF_RESKEY_dynamic_utilization_default}} > > +: ${OCF_RESKEY_set_utilization_cpu=${OCF_RESKEY_set_utilization_cpu_default}} > > +: ${OCF_RESKEY_set_utilization_memory=${OCF_RESKEY_set_utilization_memory_default}} > > ####################################################################### > > > > ## I'd very much suggest to make this RA use bash, > > @@ -117,6 +123,28 @@ Be sure to set the timeout of these operations to accommodate this delay. > > <content type="string" default="" /> > > </parameter> > > > > +<parameter name="dynamic_utilization" unique="0" required="0"> > > +<longdesc lang="en"> > > +If set, the utilization parameter of resource will be reset if there are > > +difference between resource parameters and system parameters when agent monitor. > > +Otherwise, the resource parameters will be set once when agent start. > > +</longdesc> > > +<shortdesc lang="en">Set utilization of resource when agent monitor</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="set_utilization_cpu" unique="0" required="0"> > > +<longdesc lang="en">Enable setting cpu of utilization.</longdesc> > > +<shortdesc lang="en">Enable setting cpu of utilization</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > +<parameter name="set_utilization_memory" unique="0" required="0"> > > +<longdesc lang="en">Enable setting memory of utilization.</longdesc> > > +<shortdesc lang="en">Enable setting memory of utilization</shortdesc> > > +<content type="boolean" default="true" /> > > +</parameter> > > + > > </parameters> > > > > <actions> > > @@ -133,6 +161,33 @@ Be sure to set the timeout of these operations to accommodate this delay. > > EOF > > } > > > > +set_utilization() { > > + local dom_cpu dom_mem > > + local uti_cpu uti_mem > > + > > + read dom_cpu dom_mem <<EOF > > +$(LANG=C virsh $VIRSH_OPTIONS dominfo ${DOMAIN_NAME} | > > +awk '/CPU\(s\)/{cpu=$2} /Max memory/{mem=$3} END{printf("%d %d\n", cpu, mem/1024)}') > > +EOF > > + uti_cpu=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g cpu 2>/dev/null) > > + uti_mem=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g hv_memory 2>/dev/null) > > + > > + if [ "$OCF_RESKEY_set_utilization_cpu" = "true" -o "$OCF_RESKEY_set_utilization_cpu" = "1" ]; then > > + if [ "$dom_cpu" != "$uti_cpu" ]; then > > + if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p cpu -v $dom_cpu; then > > + ocf_log warn "Failed to set cpu of utilization by crm_resource." > > + fi > > + fi > > + fi > > + if [ "$OCF_RESKEY_set_utilization_memory" = "true" -o "$OCF_RESKEY_set_utilization_memory" = "1" ]; then > > + if [ "$dom_mem" != "$uti_mem" ]; then > > + if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p hv_memory -v $dom_mem; then > > + ocf_log warn "Failed to set hv_memory of utilization by crm_resource." > > + fi > > + fi > > + fi > > +} > > + > > # Set options to be passed to virsh: > > VIRSH_OPTIONS="--connect=${OCF_RESKEY_hypervisor} --quiet" > > > > @@ -236,6 +291,11 @@ VirtualDomain_Start() { > > while ! VirtualDomain_Monitor; do > > sleep 1 > > done > > + > > + if [ "$OCF_RESKEY_dynamic_utilization" = "false" -o "$OCF_RESKEY_dynamic_utilization" = "0" ]; then > > + set_utilization > > + fi > > + > > return $OCF_SUCCESS > > } > > > > @@ -404,6 +464,13 @@ VirtualDomain_Monitor() { > > fi > > done > > fi > > + > > + if [ "$OCF_RESKEY_dynamic_utilization" = "true" -o "$OCF_RESKEY_dynamic_utilization" = "1" ]; then > > + if ocf_is_probe; then > > + set_utilization > > + fi > > + fi > > + > > return ${rc} > > } > > > > -- > > 1.6.4.2 > > > > > _______________________________________________ > > ha-wg-technical mailing list > > ha-wg-technical [at] lists > > https://lists.linuxfoundation.org/mailman/listinfo/ha-wg-technical > > _______________________________________________ > ha-wg-technical mailing list > ha-wg-technical [at] lists > https://lists.linuxfoundation.org/mailman/listinfo/ha-wg-technical > _______________________________________________ > ha-wg-technical mailing list > ha-wg-technical [at] lists > https://lists.linuxfoundation.org/mailman/listinfo/ha-wg-technical _______________________________________________ ha-wg-technical mailing list ha-wg-technical [at] lists https://lists.linuxfoundation.org/mailman/listinfo/ha-wg-technical
|