1 |
Author: zmedico |
2 |
Date: 2008-07-29 15:17:07 +0000 (Tue, 29 Jul 2008) |
3 |
New Revision: 11264 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Enable Scheduler._job_delay() whenever --load-average is enabled, for whole |
9 |
time the scheduler is running. This protects against too many jobs being |
10 |
sheduled if the load average temporarily drops. |
11 |
|
12 |
|
13 |
Modified: main/trunk/pym/_emerge/__init__.py |
14 |
=================================================================== |
15 |
--- main/trunk/pym/_emerge/__init__.py 2008-07-29 14:34:55 UTC (rev 11263) |
16 |
+++ main/trunk/pym/_emerge/__init__.py 2008-07-29 15:17:07 UTC (rev 11264) |
17 |
@@ -8862,14 +8862,9 @@ |
18 |
|
19 |
# The load average takes some time to respond when new |
20 |
# jobs are added, so we need to limit the rate of adding |
21 |
- # new jobs when emerge first starts. |
22 |
- self._main_loop_init_delay_period = 60 |
23 |
+ # new jobs. |
24 |
self._job_delay_factor = 0.5 |
25 |
- |
26 |
- # State variables |
27 |
- self._main_loop_init_delay = None |
28 |
self._previous_job_start_time = None |
29 |
- self._main_loop_start_time = None |
30 |
|
31 |
self._set_digraph(digraph) |
32 |
|
33 |
@@ -9636,8 +9631,6 @@ |
34 |
self._config_pool[settings["ROOT"]].append(settings) |
35 |
|
36 |
def _main_loop(self): |
37 |
- self._main_loop_init_delay = self._max_load is not None |
38 |
- self._main_loop_start_time = time.time() |
39 |
|
40 |
# Only allow 1 job max if a restart is scheduled |
41 |
# due to portage update. |
42 |
@@ -9675,15 +9668,11 @@ |
43 |
@returns: True if job scheduling should be delayed, False otherwise. |
44 |
""" |
45 |
|
46 |
- if self._main_loop_init_delay and self._jobs: |
47 |
+ if self._jobs and self._max_load is not None: |
48 |
|
49 |
current_time = time.time() |
50 |
|
51 |
- if current_time - self._main_loop_start_time > \ |
52 |
- self._main_loop_init_delay_period: |
53 |
- self._main_loop_init_delay = False |
54 |
- |
55 |
- elif current_time - self._previous_job_start_time < \ |
56 |
+ if current_time - self._previous_job_start_time < \ |
57 |
self._job_delay_factor * self._jobs: |
58 |
return True |
59 |
|
60 |
@@ -9702,11 +9691,9 @@ |
61 |
if not self._pkg_queue or self._failed_pkgs: |
62 |
return (False, state_change) |
63 |
|
64 |
- if self._job_delay(): |
65 |
- return (True, state_change) |
66 |
- |
67 |
if self._choose_pkg_return_early or \ |
68 |
- not self._can_add_job(): |
69 |
+ not self._can_add_job() or \ |
70 |
+ self._job_delay(): |
71 |
return (True, state_change) |
72 |
|
73 |
pkg = self._choose_pkg() |