|
|
b3fe293 |
diff --git a/src/condor_procd/proc_family.cpp b/src/condor_procd/proc_family.cpp
|
|
|
b3fe293 |
index d35ffcc..2a5839f 100644
|
|
|
b3fe293 |
--- a/src/condor_procd/proc_family.cpp
|
|
|
b3fe293 |
+++ b/src/condor_procd/proc_family.cpp
|
|
|
b3fe293 |
@@ -36,6 +36,10 @@
|
|
|
b3fe293 |
|
|
|
b3fe293 |
#include <unistd.h>
|
|
|
b3fe293 |
long ProcFamily::clock_tick = sysconf( _SC_CLK_TCK );
|
|
|
b3fe293 |
+
|
|
|
b3fe293 |
+// Swap accounting is sometimes turned off. We use this variable so we
|
|
|
b3fe293 |
+// warn about that situation only once.
|
|
|
b3fe293 |
+bool ProcFamily::have_warned_about_memsw = false;
|
|
|
b3fe293 |
#endif
|
|
|
b3fe293 |
|
|
|
b3fe293 |
ProcFamily::ProcFamily(ProcFamilyMonitor* monitor,
|
|
|
b3fe293 |
@@ -425,10 +429,19 @@ ProcFamily::update_max_image_size_cgroup()
|
|
|
b3fe293 |
return;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
if ((err = cgroup_get_value_uint64(memct, "memory.memsw.max_usage_in_bytes", &max_image))) {
|
|
|
b3fe293 |
- dprintf(D_PROCFAMILY,
|
|
|
b3fe293 |
- "Unable to load max memory usage for cgroup %s (ProcFamily %u): %u %s\n",
|
|
|
b3fe293 |
- m_cgroup_string.c_str(), m_root_pid, err, cgroup_strerror(err));
|
|
|
b3fe293 |
- return;
|
|
|
b3fe293 |
+ // On newer nodes, swap accounting is disabled by default.
|
|
|
b3fe293 |
+ // In some cases, swap accounting causes a kernel oops at the time of writing.
|
|
|
b3fe293 |
+ // So, we check memory.max_usage_in_bytes instead.
|
|
|
b3fe293 |
+ int err2 = cgroup_get_value_uint64(memct, "memory.max_usage_in_bytes", &max_image);
|
|
|
b3fe293 |
+ if (err2) {
|
|
|
b3fe293 |
+ dprintf(D_PROCFAMILY,
|
|
|
b3fe293 |
+ "Unable to load max memory usage for cgroup %s (ProcFamily %u): %u %s\n",
|
|
|
b3fe293 |
+ m_cgroup_string.c_str(), m_root_pid, err, cgroup_strerror(err));
|
|
|
b3fe293 |
+ return;
|
|
|
b3fe293 |
+ } else if (!have_warned_about_memsw) {
|
|
|
b3fe293 |
+ have_warned_about_memsw = true;
|
|
|
b3fe293 |
+ dprintf(D_ALWAYS, "Swap acounting is not available; only doing RAM accounting.\n");
|
|
|
b3fe293 |
+ }
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
m_max_image_size = max_image/1024;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
diff --git a/src/condor_procd/proc_family.h b/src/condor_procd/proc_family.h
|
|
|
b3fe293 |
index 28a854c..d831d8e 100644
|
|
|
b3fe293 |
--- a/src/condor_procd/proc_family.h
|
|
|
b3fe293 |
+++ b/src/condor_procd/proc_family.h
|
|
|
b3fe293 |
@@ -181,6 +181,7 @@ private:
|
|
|
b3fe293 |
std::string m_cgroup_string;
|
|
|
b3fe293 |
CgroupManager &m_cm;
|
|
|
b3fe293 |
static long clock_tick;
|
|
|
b3fe293 |
+ static bool have_warned_about_memsw;
|
|
|
b3fe293 |
|
|
|
b3fe293 |
int count_tasks_cgroup();
|
|
|
b3fe293 |
int aggregate_usage_cgroup_blockio(ProcFamilyUsage*);
|
|
|
b3fe293 |
diff --git a/src/condor_starter.V6.1/cgroup.linux.cpp b/src/condor_starter.V6.1/cgroup.linux.cpp
|
|
|
b3fe293 |
index 97407b3..4fbd00d 100644
|
|
|
b3fe293 |
--- a/src/condor_starter.V6.1/cgroup.linux.cpp
|
|
|
b3fe293 |
+++ b/src/condor_starter.V6.1/cgroup.linux.cpp
|
|
|
b3fe293 |
@@ -185,13 +185,6 @@ int CgroupManager::create(const std::string &cgroup_string, Cgroup &cgroup,
|
|
|
b3fe293 |
has_cgroup, changed_cgroup)) {
|
|
|
b3fe293 |
return -1;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
- if ((preferred_controllers & CPUACCT_CONTROLLER) &&
|
|
|
b3fe293 |
- initialize_controller(*cgroupp, CPUACCT_CONTROLLER,
|
|
|
b3fe293 |
- CPUACCT_CONTROLLER_STR,
|
|
|
b3fe293 |
- required_controllers & CPUACCT_CONTROLLER,
|
|
|
b3fe293 |
- has_cgroup, changed_cgroup)) {
|
|
|
b3fe293 |
- return -1;
|
|
|
b3fe293 |
- }
|
|
|
b3fe293 |
if ((preferred_controllers & BLOCK_CONTROLLER) &&
|
|
|
b3fe293 |
initialize_controller(*cgroupp, BLOCK_CONTROLLER,
|
|
|
b3fe293 |
BLOCK_CONTROLLER_STR,
|
|
|
b3fe293 |
diff --git a/src/condor_starter.V6.1/cgroup_limits.cpp b/src/condor_starter.V6.1/cgroup_limits.cpp
|
|
|
b3fe293 |
index 71830a5..93e311c 100644
|
|
|
b3fe293 |
--- a/src/condor_starter.V6.1/cgroup_limits.cpp
|
|
|
b3fe293 |
+++ b/src/condor_starter.V6.1/cgroup_limits.cpp
|
|
|
b3fe293 |
@@ -20,7 +20,7 @@ CgroupLimits::CgroupLimits(std::string &cgroup) : m_cgroup_string(cgroup)
|
|
|
b3fe293 |
int CgroupLimits::set_memory_limit_bytes(uint64_t mem_bytes, bool soft)
|
|
|
b3fe293 |
{
|
|
|
b3fe293 |
if (!m_cgroup.isValid() || !CgroupManager::getInstance().isMounted(CgroupManager::MEMORY_CONTROLLER)) {
|
|
|
b3fe293 |
- dprintf(D_ALWAYS, "Unable to set memory limit because cgroup is invalid.");
|
|
|
b3fe293 |
+ dprintf(D_ALWAYS, "Unable to set memory limit because cgroup is invalid.\n");
|
|
|
b3fe293 |
return 1;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
|
|
|
b3fe293 |
@@ -55,7 +55,7 @@ int CgroupLimits::set_memory_limit_bytes(uint64_t mem_bytes, bool soft)
|
|
|
b3fe293 |
int CgroupLimits::set_cpu_shares(uint64_t shares)
|
|
|
b3fe293 |
{
|
|
|
b3fe293 |
if (!m_cgroup.isValid() || !CgroupManager::getInstance().isMounted(CgroupManager::CPU_CONTROLLER)) {
|
|
|
b3fe293 |
- dprintf(D_ALWAYS, "Unable to set CPU shares because cgroup is invalid.");
|
|
|
b3fe293 |
+ dprintf(D_ALWAYS, "Unable to set CPU shares because cgroup is invalid.\n");
|
|
|
b3fe293 |
return 1;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
|
|
|
b3fe293 |
@@ -89,7 +89,7 @@ int CgroupLimits::set_cpu_shares(uint64_t shares)
|
|
|
b3fe293 |
int CgroupLimits::set_blockio_weight(uint64_t weight)
|
|
|
b3fe293 |
{
|
|
|
b3fe293 |
if (!m_cgroup.isValid() || !CgroupManager::getInstance().isMounted(CgroupManager::BLOCK_CONTROLLER)) {
|
|
|
b3fe293 |
- dprintf(D_ALWAYS, "Unable to set blockio weight because cgroup is invalid.");
|
|
|
b3fe293 |
+ dprintf(D_ALWAYS, "Unable to set blockio weight because cgroup is invalid.\n");
|
|
|
b3fe293 |
return 1;
|
|
|
b3fe293 |
}
|
|
|
b3fe293 |
|