[sheepdog] [PATCH] sheep: avoid the OOM killer

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Fri Jul 5 07:27:47 CEST 2013


Because sheep provides virtual disks to many VMs, sheep is an
important process and it shouldn't be killed by the OOM killer of
Linux. This patch implements a mechanism for avoiding the OOM killer.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
 sheep/sheep.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/sheep/sheep.c b/sheep/sheep.c
index 84bd269..ac9cc2a 100644
--- a/sheep/sheep.c
+++ b/sheep/sheep.c
@@ -371,6 +371,30 @@ static int create_work_queues(void)
 	return 0;
 }
 
+static int avoid_oom_killer(void)
+{
+	int fd, ret = 0;
+	char path[PATH_MAX];
+
+	/* Avoid oom-killer */
+	snprintf(path, PATH_MAX, "/proc/%d/oom_score_adj", getpid());
+	fd = open(path, O_WRONLY);
+	if (fd < 0) {
+		sd_iprintf("opening %s failed, %m", path);
+		ret = -1;
+		goto end;
+	}
+
+	if (xwrite(fd, "-1000\n", 6) != 6) {
+		sd_iprintf("writing to %s failed, %m", path);
+		ret = -1;
+	}
+
+	close(fd);
+end:
+	return ret;
+}
+
 /*
  * FIXME: Teach sheep handle EMFILE gracefully.
  *
@@ -419,6 +443,10 @@ static void check_host_env(void)
 	 * sized request.
 	 */
 	mallopt(M_MMAP_THRESHOLD, 512 * 1024);
+
+	if (avoid_oom_killer() < 0)
+		sd_eprintf("WARN: adjusting OOM failed, this process has a"
+			" possibility of being killed by the OOM killer");
 }
 
 static int lock_and_daemon(bool daemonize, const char *base_dir)
-- 
1.7.10.4




More information about the sheepdog mailing list