Mercurial > hg-stable
comparison mercurial/worker.py @ 18636:dcb27c153a40
worker: estimate whether it's worth running a task in parallel
Not implemented for Windows yet.
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Sat, 09 Feb 2013 15:51:26 -0800 |
parents | fed06dd07665 |
children | ac4dbceeb14a |
comparison
equal
deleted
inserted
replaced
18635:fed06dd07665 | 18636:dcb27c153a40 |
---|---|
3 # Copyright 2013 Facebook, Inc. | 3 # Copyright 2013 Facebook, Inc. |
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import os | 8 from i18n import _ |
9 import os, util | |
9 | 10 |
10 def countcpus(): | 11 def countcpus(): |
11 '''try to count the number of CPUs on the system''' | 12 '''try to count the number of CPUs on the system''' |
12 | 13 |
13 # posix | 14 # posix |
25 return n | 26 return n |
26 except (KeyError, ValueError): | 27 except (KeyError, ValueError): |
27 pass | 28 pass |
28 | 29 |
29 return 1 | 30 return 1 |
31 | |
32 def _numworkers(ui): | |
33 s = ui.config('worker', 'numcpus') | |
34 if s: | |
35 try: | |
36 n = int(s) | |
37 if n >= 1: | |
38 return n | |
39 except ValueError: | |
40 raise util.Abort(_('number of cpus must be an integer')) | |
41 return min(max(countcpus(), 4), 32) | |
42 | |
43 if os.name == 'posix': | |
44 _startupcost = 0.01 | |
45 else: | |
46 _startupcost = 1e30 | |
47 | |
48 def worthwhile(ui, costperop, nops): | |
49 '''try to determine whether the benefit of multiple processes can | |
50 outweigh the cost of starting them''' | |
51 linear = costperop * nops | |
52 workers = _numworkers(ui) | |
53 benefit = linear - (_startupcost * workers + linear / workers) | |
54 return benefit >= 0.15 |