homogeneous redundancy enhancement

svn path=/trunk/boinc/; revision=9552
This commit is contained in:
David Anderson 2006-02-25 00:21:39 +00:00
parent 79bedb43ec
commit c9ea119568
9 changed files with 129 additions and 21 deletions

View File

@ -2340,3 +2340,17 @@ David 24 Feb 2006
http_curl.C,h
net_xfer_curl.C,h
pers_file_xfer.C
David 24 Feb 2006
- Scheduler: increment the infeasible count for a result
in a slot that cannot be sent to a host because
the workunit has already be assigned to a different platform.
This helps projects that use homogenous redundancy
because once the result is marked infeasible
it will be checked for compatibility for a given host first,
thus leaving results for workunits that have not yet
been assigned free for other hosts.
(from Kevin Reed, WCG)
sched/
sched_array.C

View File

@ -24,6 +24,9 @@ If you have one or more of the relevant technical skills
(C++ system programming, PHP/MySQL web development,
WxWidgets programming, autoconf/automake expertise, etc.)
you may be able to help us maintain and enhance BOINC.
The University of California holds the copyright on all BOINC source code;
by contributing code to BOINC you implicitly assign the copyright
to the University of California.
In any case, you are welcome to browse the source code and give us feedback.
You should understand how BOINC works
(for both <a href=participate.php>participants</a>

View File

@ -1,6 +1,11 @@
<?
$project_news = array(
array("February 22, 2006",
"BOINC announces its
<a href=mac_intel.php>support for the Macintosh/Intel platform</a>.
"
),
array("February 19, 2006",
"<a href=http://boinccast.podhost.de/>BOINCcast</a>
is the first German Podcast about BOINC.

View File

@ -33,6 +33,10 @@ switch(rand(0,4)) {
case 4: $url_base = "http://morel.mit.edu/download/boinc/dl/"; break;
}
if ($dev) {
$url_base = "dl/";
}
function dl_item($x, $y) {
global $light_blue;
echo "<tr><td valign=top align=right width=30% bgcolor=$light_blue>$x</td>

View File

@ -50,7 +50,7 @@ list_item("url",
list_item("md5_cksum", "The MD5 checksum of the file."
);
list_item("nbytes",
"the size of the file in bytes (may be greater than 2^32)."
"the size of the file in bytes."
);
list_item("max_nbytes",
"The maximum allowable size of the file in bytes (may be greater than 2^32).
@ -171,6 +171,51 @@ deletes input and output files that are no longer needed.
This can be suppressed using the 'no_delete' flag,
or using command-line options to the file deleter.
</ul>
<a name=compression></a>
<h3>File compression</h3>
<p>
Starting with version 5.4, the BOINC client
is able to handle HTTP Content-Encoding types 'deflate' (zlib algorithm)
and 'gzip' (gzip algorithm).
The client decompresses these files 'on the fly' and
stores them on disk in uncompressed form.
<p>
Projects can set this encoding in two ways:
<ul>
<li>
Use the Apache 2.0 mod_deflate module to automatically
compress files on the fly.
This method will work with all BOINC clients,
but it will do compression only for 5.4+ clients.
<li>
Compress their workunits when they create them and use
a filename suffix such as '.gz'.
In httpd.conf make sure that the following line is present:
<pre>
AddEncoding x-gzip .gz
</pre>
This will add the content encoding to the header so that
the client will decompress the file automatically.
This method has the advantage of reducing server disk usage
and server CPU load,
but it will only work with 5.4+ clients.
Use the 'min_core_version' field of the app_version table to enforce this.
</ul>
You can also use these in conjunction because the mod_deflate module
allows you to exempt certain filetypes from on-the-fly compression.
<p>
Neither of these methods stores files in compressed form on the client.
For this, you must do compression at the application level.
The BOINC source distribution includes
<a href=boinc_zip.txt>a version of the zip library</a>
designed for use by BOINC applications on any platform.
";
page_tail();
?>

View File

@ -75,10 +75,13 @@ resources.
<li> Enter the project's URL (visit the project's web site,
and copy the URL from your browser's address field).
</ul>
<a href=participate.php>More info</a>
| <a href=links.php>Web sites </a>
| <a href=download_network.php>Add-ons</a>
| <a href=dev/>Message boards</a>
<center>
<a href=participate.php><b>More info</a>
| <a href=download.php><b>Download</a>
| <a href=links.php><b>Web sites </a>
| <a href=download_network.php><b>Add-ons</a>
| <a href=dev/><b>Message boards</a>
</center>
</td></tr>
<tr><td bgcolor=$light_blue><h2>Create a volunteer computing project</h2></td></tr>

View File

@ -27,16 +27,13 @@ The goals of the CPU scheduler and work-fetch policies are
(because results reported after their deadline
may not have any value to the project and may not be granted credit).
<li> NCPUS processors should be kept busy.
<li> At any given point, enough work should be kept on hand
<li> At any given point, a computer should have enough work
so that NCPUS processors will be busy for at least
min_queue days (min_queue is a user preference).
<li> Project resource shares should be honored over the long term.
<li> Variety: if a computer is attached to multiple projects,
execution should rotate among projects on a frequent basis.
</ul>
The policies are designed to accommodate all scenarios,
including those with computers that are slow or are attached
to a large number of projects.
<p>
In previous versions of BOINC,
@ -54,9 +51,8 @@ A computer attached to 10 projects might
have work for only a few (perhaps only one) at a given time.
<li>
If deadlines are threatened,
the CPU scheduling policy switches to a mode
(earliest deadline first) that optimizes the likelihood
of meeting deadlines, at the expense of variety.
the CPU scheduling policy optimizes the likelihood of meeting deadlines,
at the expense of variety.
</ul>
@ -153,17 +149,16 @@ It is defined for all projects,
and adjusted over the set of potentially runnable projects.
It is normalized so that average long-term debt is zero.
<h2>The CPU scheduling policy</h2>
<h2>CPU scheduling policy</h2>
<p>
The CPU scheduler uses an earliest-deadline-first (EDF) policy
for results that are in danger of missing their deadline,
and round-robin among other projects if additional CPUs exist.
and weighted round-robin among other projects if additional CPUs exist.
This allows the client to meet deadlines that would otherwise be missed,
while honoring resource shares over the long term.
The scheduler uses the following data, which are obtained
by a simulation of round-robin scheduling
applied to the current work queue:
by a simulation of round-robin scheduling applied to the current work queue:
<ul>
<li> deadline_missed(R): whether result R would miss
its deadline with round-robin scheduling.
@ -200,6 +195,12 @@ when new results become runnable,
or when the user performs a UI interaction
(e.g. suspending or resuming a project or result).
<p>
The CPU scheduler produces a list of results to run,
but they are not necessarily run immediately;
the enforcement of the schedule is done asynchronously.
A currently
<h2>Work-fetch policy</h2>
<p>

View File

@ -136,10 +136,34 @@ everyone else should connect to that process.
<li> Do General Tests from a modem, ISDN, or VPN-connected computer.
<br>see the <a href=dialup.php>Dial-up Connections</a> page
for details about dial-up connections.
<li> Test 'confirm before connect' preference.
<li> Test 'Disconnect when done' preference.
<li> Do these tests with both single-user and Service-mode install (Windows).
</ul>
<li> Test the connection options:
<ul><li>set default connection
<li>verify the manager uses the defaunt connection
<li>proper notification when default hasn't been set
</ul>
<li> Test 'confirm before connect' preference.
<br>'confirm' not set:
<ul>
<li>Test connections are automatically made when 'confirm' isn't set
<li>Test proper operation when no user is logged on (service install)
</ul>
'confirm' set:
<ul>
<li>Check proper operation with both 'yes' and 'no' replies to the
confirmation dialog
<li>Check proper operation when confirm dialog is ignored
<br>dialog should disappear after a few minutes, with another
prompt later
<br>(fill in times)
<li>With manager running only in the systray, check balloon popup
indicating BOINC needs a network connection
</ul>
<li> Test 'Disconnect when done' preference.
<li> Check that network activity is retried when dialup connection
is established - pending scheduler requests and file transfers
get retried.
<li> Do these tests with both single-user and Service-mode install (Windows).
</ul>
<h3>Tests for computers with personal firewalls</h3>
<ul>
<li> Do General tests on a computer that uses a personal firewall

View File

@ -168,7 +168,16 @@ void scan_work_array(
if (already_sent_to_different_platform(
sreq, wu_result.workunit, reply.wreq
)) {
goto dont_send;
log_messages.printf(SCHED_MSG_LOG::MSG_DEBUG,
"[HOST#%d] [WU#%d %s] WU is infeasible (assigned to different platform)\n",
reply.host.id, wu.id, wu.name
);
// Mark the workunit as infeasible.
// This ensures that work already assigned to a platform
// is processed first.
//
wu_result.infeasible_count++;
goto dont_send;
}
}