You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2015/03/02 21:17:42 UTC
svn commit: r1663418 - in
/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent:
NodeAgent.java launcher/CGroupsManager.java launcher/DuccCommandExecutor.java
Author: cwiklik
Date: Mon Mar 2 20:17:42 2015
New Revision: 1663418
URL: http://svn.apache.org/r1663418
Log:
UIMA-4259 Added support for cgroup cpu control
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java?rev=1663418&r1=1663417&r2=1663418&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java Mon Mar 2 20:17:42 2015
@@ -267,10 +267,10 @@ public class NodeAgent extends AbstractD
cgroupsBaseDir = "/cgroup/ducc";
}
// get the cgroup subsystems. If not defined, default to the
- // memory subsystem
+ // memory and cpu subsystem
String cgroupsSubsystems = System.getProperty("ducc.agent.launcher.cgroups.subsystems");
if (cgroupsSubsystems == null) {
- cgroupsSubsystems = "memory";
+ cgroupsSubsystems = "memory,cpu";
}
cgroupsManager = new CGroupsManager(cgUtilsPath, cgroupsBaseDir, cgroupsSubsystems, logger);
// check if cgroups base directory exists in the filesystem
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java?rev=1663418&r1=1663417&r2=1663418&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java Mon Mar 2 20:17:42 2015
@@ -421,7 +421,51 @@ public class CGroupsManager {
return false;
}
}
-
+ /**
+ * Sets the cpu shares use for an existing cgroup container.
+ *
+ * @param containerId
+ * - existing container id for which limit will be set
+ * @param userId
+ * - container owner
+ * @param useDuccSpawn
+ * - run 'cgset' command as a user
+ * @param containerCpuShares
+ * - cpu shares
+ *
+ * @return - true on success, false otherwise
+ *
+ * @throws Exception
+ */
+
+ public boolean setContainerCpuShares(String containerId,
+ String userId, boolean useDuccSpawn, long containerCpuShares)
+ throws Exception {
+ try {
+ ///usr/bin
+ String[] command = new String[] { cgroupUtilsDir+"/cgset", "-r",
+ "cpu.shares=" + containerCpuShares,
+ "ducc/" + containerId };
+ int retCode = launchCommand(command, useDuccSpawn, "ducc",
+ containerId);
+ if (retCode == 0) {
+ agentLogger.info("setContainerCpuShares", null, ">>>>"
+ + "SUCCESS - Created CGroup with CPU Shares="+containerCpuShares+" on Container:"
+ + containerId);
+ return true;
+ } else {
+ agentLogger.info("setContainerCpuShares", null, ">>>>"
+ + "FAILURE - Unable To Create CGroup Container:"
+ + containerId);
+ return false;
+ }
+ } catch (Exception e) {
+ agentLogger.error("setContainerCpuShares", null, ">>>>"
+ + "FAILURE - Unable To Set CPU shares On CGroup Container:"
+ + containerId, e);
+ return false;
+ }
+ }
/**
* Removes cgroup container with a given id. Cgroups are implemented as a
* virtual file system. All is needed here is just rmdir.
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java?rev=1663418&r1=1663417&r2=1663418&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java Mon Mar 2 20:17:42 2015
@@ -80,6 +80,12 @@ public class DuccCommandExecutor extends
private boolean createCGroupContainer(IDuccProcess duccProcess, String containerId, String owner ) throws Exception {
// create cgroups container and assign limits
if ( agent.cgroupsManager.createContainer( containerId, owner, useDuccSpawn()) ) {
+ logger.info("createCGroupContainer", null, "Calculating CPU shares \nProcess Max Memory="+duccProcess.getCGroup().getMaxMemoryLimit()+"\nNode Memory Total="+agent.getNodeInfo().getNodeMetrics().getNodeMemory().getMemTotal());
+ long cpuShares =
+ duccProcess.getCGroup().getMaxMemoryLimit()/agent.getNodeInfo().getNodeMetrics().getNodeMemory().getMemTotal();
+ logger.info("createCGroupContainer", null,"\nCalculated Shares="+cpuShares);
+ agent.cgroupsManager.setContainerCpuShares(containerId, owner, useDuccSpawn(), cpuShares);
+
return agent.cgroupsManager.setContainerMaxMemoryLimit(containerId,
owner, useDuccSpawn(), duccProcess.getCGroup().getMaxMemoryLimit());
}