Messages in this thread Patch in this message | | | From | Nigel Cunningham <> | Subject | [Suspend2][ 1/2] [Suspend2] Disable load updating during suspending. | Date | Tue, 27 Jun 2006 02:38:54 +1000 |
| |
Suspend2 uses the cpu very intensively, with the result that the load average can be quite high when a cycle has just completed. This in turn can cause problems with mail delivery and other activities that suspend activities when the load average gets too high. To avoid this, we suspend updates of the load average while the freezer is on.
Signed-off-by: Nigel Cunningham <nigel@suspend2.net>
kernel/timer.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/kernel/timer.c b/kernel/timer.c index 9e49dee..44a17fc 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -34,6 +34,7 @@ #include <linux/cpu.h> #include <linux/syscalls.h> #include <linux/delay.h> +#include <linux/freezer.h> #include <asm/uaccess.h> #include <asm/unistd.h> @@ -869,6 +870,16 @@ static inline void calc_load(unsigned lo count -= ticks; if (count < 0) { count += LOAD_FREQ; + + /* Suspend2 does a lot of work (pagecache I/O) before + * and after the atomic copy. If we let the load average + * be updated while suspending, it will be very high post + * resume. Processes such as some MTAs that stop work + * while the average is high will be unnecessarily disrupted. + */ + if (freezer_is_on()) + return; + active_tasks = count_active_tasks(); CALC_LOAD(avenrun[0], EXP_1, active_tasks); CALC_LOAD(avenrun[1], EXP_5, active_tasks); -- Nigel Cunningham nigel at suspend2 dot net - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |