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 even have the background activities have a higher > oom_score than the one in the foreground? Interesting. Another approach I'd love feedback on would be to set the allowed number of simultaneous running activities to be 2 (1 + Journal) and writing a simple control panel extension that would allow tweaking that, this oom_adj, and other related gconf values. > Regards, > > Tomeu Martin 1. patch against http://cgit.sugarlabs.org/sugar-toolkit/mainline/tree/src/sugar/activity/main.py : diff --git a/src/sugar/activity/main.py b/src/sugar/activity/main.py index 93f34e6..c868e11 100644 --- a/src/sugar/activity/main.py +++ b/src/sugar/activity/main.py @@ -31,7 +31,40 @@ from sugar.bundle.activitybundle import ActivityBundle from sugar import logger +def __oom_adj_self(omm_adj_value=None): + """ Change this 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/self/oom_adj" + 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_instance(constructor, handle): + __oom_adj_self() activity = constructor(handle) activity.show()
pgpNZISREnFmt.pgp
Description: PGP signature
_______________________________________________ Devel mailing list Devel@lists.laptop.org http://lists.laptop.org/listinfo/devel