On Fri, Nov 06, 2009 at 04:50:53PM +0000, Tomeu Vizoso wrote: > On Wed, Nov 4, 2009 at 14:16, Martin Dengler <mar...@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 <rich...@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 <mar...@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
pgptlRP7tORQh.pgp
Description: PGP signature
_______________________________________________ Devel mailing list Devel@lists.laptop.org http://lists.laptop.org/listinfo/devel