[Sugar-devel] OOM conditions
Martin Dengler
martin at martindengler.com
Sat Nov 7 06:06:22 EST 2009
On Fri, Nov 06, 2009 at 04:50:53PM +0000, Tomeu Vizoso wrote:
> On Wed, Nov 4, 2009 at 14:16, Martin Dengler <martin at martindengler.com> wrote:
> > On Fri, Oct 30, 2009 at 11:22:13PM +0100, Tomeu Vizoso wrote:
> >> On Fri, Oct 30, 2009 at 16:58, Richard A. Smith <richard at laptop.org> wrote:
> >> > Working the table at the Boston book festival I was reminded how
> >> > painful the OOM stuff is on a gen 1. The demo machines were in
> >> > this state a lot as each visitor would open up a new
> >> > program. Basically you have to just turn the unit off and restart
> >> > as trying to recover is futile.
> >>
> >> What if activities had a higher oom_score? Would that protect enough
> >> the processes that once killed require a system restart (X, shell,
> >> etc)?
> >
> > See patch vs sugar-toolkit HEAD below[1] (I can backport to 0.82 if
> > wanted).
>
> Maybe would be better to have the shell do that? So it works for
> non-python activities.
Patch inline below.
> >> Regards,
> >>
> >> Tomeu
> >
> > Martin
> >
> Thanks,
>
> Tomeu
Martin
(untested) patch against
http://cgit.sugarlabs.org/sugar-toolkit/mainline/tree/src/sugar/activity/activityfactory.py
:
From 4bd6fb9f7f245c2aed92d6964746627d0c96cbec Mon Sep 17 00:00:00 2001
From: Martin Dengler <martin at martindengler.com>
Date: Sat, 7 Nov 2009 10:55:16 +0000
Subject: [PATCH] sacrifice activities to the OOM killer first
change the OOM-killer score of launched activities to be the maximum.
See discussion at http://linux-mm.org/OOM_Killer
---
src/sugar/activity/activityfactory.py | 35 +++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/src/sugar/activity/activityfactory.py b/src/sugar/activity/activityfactory.py
index ee0fd92..5deee6e 100644
--- a/src/sugar/activity/activityfactory.py
+++ b/src/sugar/activity/activityfactory.py
@@ -65,6 +65,39 @@ def _close_fds():
pass
+def __oom_adj_pid(pid, omm_adj_value=None):
+ """ Change a process' OOM likelihood to oom_adj_value.
+
+ By default, use the value of gconf path
+ "/desktop/sugar/performance/oom_adj_default"; if none exists, make
+ this process most likely to be killed (oom_adj_value=15).
+
+ Linux-specific. See http://linux-mm.org/OOM_Killer for details.
+ """
+ oom_adj_fullpath = "/proc/%s/oom_adj" % pid
+ if os.path.exists(oom_adj_fullpath):
+ try:
+
+ # get values/defaults from gconf
+ import gconf
+ gconf_dir = "/desktop/sugar/performance"
+ gconf_key = "oom_adj_default"
+ client = gconf.client_get_default()
+ if not client.dir_exists(gconf_dir):
+ client.add_dir(gconf_dir, gconf.CLIENT_PRELOAD_NONE)
+ if oom_adj_value is None:
+ oom_adj_value = client.get_int(gconf_dir + "/" + gconf_key)
+ if oom_adj_value is None:
+ oom_adj_value = 15
+ client.set_int(gconf_dir + "/" + gconf_key,
+ oom_adj_value)
+
+ file(oom_adj_fullpath).write(oom_adj_value)
+
+ except:
+ pass
+
+
def create_activity_id():
"""Generate a new, unique ID for this activity"""
pservice = presenceservice.get_instance()
@@ -276,6 +309,8 @@ class ActivityCreationHandler(gobject.GObject):
stdout=log_file.fileno(),
stderr=log_file.fileno())
+ __oom_adj_pid(child.pid)
+
gobject.child_watch_add(child.pid,
_child_watch_cb,
(environment_dir, log_file))
--
1.6.2.5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.sugarlabs.org/archive/sugar-devel/attachments/20091107/a132abb7/attachment.pgp
More information about the Sugar-devel
mailing list