*** empty log message ***

svn path=/trunk/boinc/; revision=10654
This commit is contained in:
David Anderson 2006-07-17 16:38:53 +00:00
parent fb076ea6e6
commit 486e704ba4
28 changed files with 628 additions and 841 deletions

View File

@ -7582,3 +7582,13 @@ David 14 July 2006
client_types.C,h
cs_account.C
cs_scheduler.C
David 17 July 2006
- core client: close GUI RPC listening socket on exit
client/
client_state.C
cs_apps.C
gui_rpc_server.C,h
sched/
trickle_handler.C

View File

@ -1401,6 +1401,30 @@ void CLIENT_STATE::network_available() {
active_tasks.network_available();
}
// Quit running applications, quit benchmarks,
// write the client_state.xml file
// (in principle we could also terminate net_xfers here,
// e.g. flush buffers, but why bother)
//
int CLIENT_STATE::quit_activities() {
int retval;
// calculate long-term debts (for state file)
//
adjust_debts();
retval = active_tasks.exit_tasks();
if (retval) {
msg_printf(NULL, MSG_ERROR,
"Couldn't exit tasks: %s", boincerror(retval)
);
}
write_state_file();
gui_rpcs.close();
abort_cpu_benchmarks();
return 0;
}
// return a random double in the range [rmin,rmax)
static inline double rand_range(double rmin, double rmax) {
if (rmin < rmax) {

View File

@ -45,29 +45,6 @@
using std::vector;
// Quit running applications, quit benchmarks,
// write the client_state.xml file
// (in principle we could also terminate net_xfers here,
// e.g. flush buffers, but why bother)
//
int CLIENT_STATE::quit_activities() {
int retval;
// calculate long-term debts (for state file)
//
adjust_debts();
retval = active_tasks.exit_tasks();
if (retval) {
msg_printf(NULL, MSG_ERROR,
"Couldn't exit tasks: %s", boincerror(retval)
);
}
write_state_file();
abort_cpu_benchmarks();
return 0;
}
// Handle a task that has finished.
// Mark its output files as present, and delete scratch files.
// Don't delete input files because they might be shared with other WUs.

View File

@ -364,4 +364,14 @@ void GUI_RPC_CONN_SET::got_select(FDSET_GROUP& fg) {
}
}
void GUI_RPC_CONN_SET::close() {
if (log_flags.guirpc_debug) {
msg_printf(NULL, MSG_INFO, "closing GUI RPC socket %d\n", lsock);
}
if (lsock >= 0) {
boinc_close_socket(lsock);
lsock = -1;
}
}
const char *BOINC_RCSID_88dd75dd85 = "$Id$";

View File

@ -56,6 +56,7 @@ public:
void get_fdset(FDSET_GROUP&, FDSET_GROUP&);
void got_select(FDSET_GROUP&);
int init();
void close();
bool got_recent_rpc(double interval);
};

View File

@ -30,13 +30,13 @@ Initialization for graphical and compound applications
are described elsewhere (see links above).
Other applications must call
<pre>
int boinc_init();
int boinc_init();
</pre>
before calling other BOINC functions or doing I/O.
<p>
When the application has completed it must call
<pre>
int boinc_finish(int status);
int boinc_finish(int status);
</pre>
<code>status</code> is nonzero if an error was encountered.
This call does not return.
@ -49,7 +49,7 @@ in the two cases. For example you might want to output debugging information if
the application is running standalone. To determine if the application is
running in standalone mode or under the control of the BOINC client, call
<pre>
int boinc_is_standalone(void);
int boinc_is_standalone(void);
</pre>
This returns non-zero (True) if the application is running standalone, and zero (False) if the application
is running under the control of the BOINC client.
@ -59,24 +59,24 @@ is running under the control of the BOINC client.
<h3>Resolving file names</h3>
Applications that use named input or output files must call
<pre>
int boinc_resolve_filename(char *logical_name, char *physical_name, int len);
int boinc_resolve_filename(char *logical_name, char *physical_name, int len);
</pre>
or
", html_text("
int boinc_resolve_filename_s(char *logical_name, std::string& physical_name);
int boinc_resolve_filename_s(char *logical_name, std::string& physical_name);
"), "
to convert logical file names to physical names.
For example, instead of
<pre>
f = fopen(\"my_file\", \"r\");
f = fopen(\"my_file\", \"r\");
</pre>
</p>
the application might use
", html_text("
string resolved_name;
retval = boinc_resolve_filename(\"my_file\", resolved_name);
if (retval) fail(\"can't resolve filename\");
f = fopen(resolved_name.c_str(), \"r\");
string resolved_name;
retval = boinc_resolve_filename(\"my_file\", resolved_name);
if (retval) fail(\"can't resolve filename\");
f = fopen(resolved_name.c_str(), \"r\");
"), "
<code>boinc_resolve_filename()</code> doesn't need to be used for temporary files.
@ -110,7 +110,7 @@ Frequency of checkpointing is a user preference
(e.g. laptop users might want to checkpoint infrequently).
An application must call
<pre>
int boinc_time_to_checkpoint();
int boinc_time_to_checkpoint();
</pre>
whenever it reaches a point where it is able to checkpoint.
If this returns nonzero (True) then
@ -118,7 +118,7 @@ the application should checkpoint immediately
(i.e., write the state file and flush all output files),
then call
<pre>
void boinc_checkpoint_completed();
void boinc_checkpoint_completed();
</pre>
<code>boinc_time_to_checkpoint()</code> is fast,
so it can be called frequently (hundreds or thousands of times a second).
@ -182,7 +182,7 @@ and optionally at intermediate points.
The core client GUI displays the percent done of workunits in progress.
To keep this display current, an application should periodically call
<pre>
boinc_fraction_done(double fraction_done);
boinc_fraction_done(double fraction_done);
</pre>
The <code>fraction_done</code> argument is an estimate of the
workunit fraction complete (0 to 1).
@ -191,7 +191,7 @@ The sequence of arguments in successive calls should be non-decreasing.
An application should never 'reset' and start over
if an error occurs; it should exit with an error code.
<pre>
double boinc_get_fraction_done();
double boinc_get_fraction_done();
</pre>
returns the last value set, or -1 if none has been set
(this would typically be called from graphics code).
@ -201,25 +201,25 @@ The following functions get information from the core client;
this information may be useful for graphics.
",
html_text("
int boinc_get_init_data(APP_INIT_DATA&);
int boinc_get_init_data(APP_INIT_DATA&);
struct APP_INIT_DATA {
int core_version;
char app_name[256];
char project_preferences[65536];
char user_name[256];
char team_name[256];
char project_dir[256];
char boinc_dir[256];
char wu_name[256];
char authenticator[256];
int slot;
double user_total_credit;
double user_expavg_credit;
double team_total_credit;
double team_expavg_credit;
HOST_INFO host_info;
};
struct APP_INIT_DATA {
int core_version;
char app_name[256];
char project_preferences[65536];
char user_name[256];
char team_name[256];
char project_dir[256];
char boinc_dir[256];
char wu_name[256];
char authenticator[256];
int slot;
double user_total_credit;
double user_expavg_credit;
double team_total_credit;
double team_expavg_credit;
HOST_INFO host_info;
};
"), "
to get the following information:
";
@ -245,7 +245,7 @@ echo "
<p>
An application may call
", html_text("
int boinc_wu_cpu_time(double &cpu_time);
int boinc_wu_cpu_time(double &cpu_time);
"), "to get its total CPU time
(from the beginning of the work unit, not just since the last restart).
This excludes CPU time used to render graphics.

View File

@ -1,14 +1,15 @@
<?php
require_once("docutil.php");
page_head("Daemon programs");
page_head("Work-handling daemons");
echo "
<p>
A BOINC project includes of a set of daemons
(programs that run all the time).
Each program should be listed as a daemon in the
for generating and handling work.
Each program should be listed as a
<a href=project_daemon.php>daemon</a> in the
<a href=configuration.php>config.xml</a> file.
They all have the command-line options:
Most daemons have the command-line options:
";
list_start();
list_item("-d N",

View File

@ -1,9 +1,48 @@
<?php
require_once("docutil.php");
page_head("The BOINC software development process");
page_head("BOINC software development ");
echo "
<h2>Writing add-on software</h2>
<p>
BOINC's architecture is 'open';
documented interfaces making it possible to
develop various types of applications and web sites that
interact with BOINC's core components.
Examples include:
";
list_start();
list_item("<a href=gui_rpc.php>Client GUIs</a>",
"These allow an application to control a local
or remove core client."
);
list_item("<a href=stats.php>Credit statistics web sites</a>",
"Daily feeds of statistics data from BOINC projects
let you create web sites showing leaderboards."
);
list_item("<a href=acct_mgt.php>Account managers</a>",
"These interfaces support web sites that
let BOINC users manage their accounts."
);
list_item("<a href=server_status.php>Server status web sites</a>",
"These interfaces support web sites showing the
server status of BOINC projects."
);
list_item("<a href=web_rpc.php>Web RPCs</a>",
"These interfaces let a program or web site
obtain information about users and hosts from projects."
);
list_item("<a href=prefs_override.php>Local editing of preferences</a>",
"This mechanism lets you write a program local editing of preferences."
);
list_end();
echo "
<p>
An <a href=download_network.php>index of add-on software</a>
is maintained by Janus Kristensen.
If you write something useful, publicize it by adding it to the index.
<h2>Developing BOINC itself</h2>
<p>
<ul>
<li> <a href=contact.php>Personnel and contributors</a>
@ -14,8 +53,8 @@ an email list for BOINC developers.
<li> <a href=compile.php>Get and compile BOINC software</a>
<li> <a href=impl_notes.php>Implementation notes</a>
<li> <a href=coding.php>BOINC coding style</a>
<li> <a href=translation.php>Translation</a> of web and GUI text
</ul>
<h2>Getting involved</h2>
<p>
BOINC is free software, distributed under the Lesser GNU Public License (LGPL).
We are in constant need of volunteers to
@ -70,7 +109,7 @@ with lines of different colors or styles for different projects.
</ul>
Please check with davea at ssl.berkeley.edu
Please check with <a href=contact.php>David Anderson</a>
before undertaking any of these.
";

View File

@ -2,9 +2,15 @@
$project_news = array(
array("July 13, 2006",
"<a href=http://www.economist.com/science/displayStory.cfm?story_id=7159442>Coming down to Earth</a>,
an article in the The Economist,
describes Africa@home, a recently-announced BOINC project
"We are conducting an <a href=poll.php>online survey</a>
of BOINC participants.
Please fill out the survey form -
your responses will help us improve BOINC and the projects that use it. "
),
array("July 13, 2006",
"Articles in <a href=http://www.economist.com/science/displayStory.cfm?story_id=7159442>The Economist</a>
and <a href=http://www.webwire.com/ViewPressRel.asp?aId=16636>WebWire</a>
describe Africa@home, a recently-announced BOINC project
that studies malaria epidemiology.
Africa@home is a collaboration of the Swiss Tropical Institute,
CERN, and a group of universities (three of them from Africa).

View File

@ -1,430 +1,40 @@
<?php
// MORE WORK IS NEEDED ON THIS IMPORTANT FILE. THE DEPRECATED <FOO/> ELEMENTS SHOULD BE CHANGED TO <FOO> 1 </FOO>.
// MANY OF THE TAGS BELOW ARE NOT EXPLAINED IN THE DOCUMENTATION, AND THE LIST HERE IS PROBABLY NOT COMPLETE.
require_once("docutil.php");
page_head("The project configuration file");
echo "<!-- \$Id$ -->\n";
echo"
A project is described by a configuration file
A project's configuration is described by a file
named <b>config.xml</b> in the project's directory.
This file is created, with default values, by the
<a href=make_project.php>make_project</a> script.
However, you will probably need to change or add some items
However, you will need to change or add some items
during the life of your project.
<p>
A config.xml file looks like this:
<pre>",
htmlspecialchars("
The format of config.xml file is:
", html_text("
<boinc>
<config>
<host> project.hostname.ip </host>
<db_name> databasename </db_name>
<db_host> database.host.ip </db_host>
<db_user> database_user_name </db_user>
<db_passwd> database_password </db_passwd>
<shmem_key> shared_memory_key </shmem_key>
<download_url> http://A/URL </download_url>
<download_dir> /path/to/directory </download_dir>
<download_dir_alt> /path/to/directory </download_dir_alt>
<uldl_dir_fanout> N </uldl_dir_fanout>
<upload_url> http://A/URL </upload_url>
<upload_dir> /path/to/directory </upload_dir>
<cgi_url> http://A/URL </cgi_url>
<stripchart_cgi_url> http://A/URL </stripchart_cgi_url>
<log_dir> /path/to/directory </log_dir>
[ <disable_account_creation/> ]
[ <profile_screening/> ]
[ <show_results/> ]
[ <one_result_per_user_per_wu/> ]
[ <max_wus_to_send> N </max_wus_to_send> ]
[ <non_cpu_intensive> 0|1 </non_cpu_intensive> ]
[ <min_sendwork_interval> N </min_sendwork_interval> ]
[ <daily_result_quota> N </daily_result_quota> ]
[ <ignore_delay_bound/> ]
[ <dont_generate_upload_certificates/> ]
[ <locality_scheduling/> ]
[ <locality_scheduling_wait_period> N </locality_scheduling_wait_period> ]
[ <min_core_client_version> N </min_core_client_version ]
[ <choose_download_url_by_timezone/> ]
[ <min_core_client_version_announced> N </min_core_client_version_announced> ]
[ <min_core_client_upgrade_deadline> N </min_core_client_upgrade_deadline> ]
[ <choose_download_url_by_timezone> N </choose_download_url_by_timezone> ]
[ <cache_md5_info> 0|1 </cache_md5_info> ]
[ <nowork_skip> 0|1 </nowork_skip> ]
[ <resend_lost_results> 0|1 </resend_lost_results> ]
[ <sched_lockfile_dir> path </sched_lockfile_dir> ]
[ <min_passwd_length> N </min_passwd_length> ]
[ <fp_benchmark_weight> X </fp_benchmark_weight> ]
[ <default_disk_max_used_gb> X </default_disk_max_used_gb> ]
[ <default_disk_max_used_pct> X </default_disk_max_used_pct> ]
[ <default_disk_min_free_gb> X </default_disk_min_used_pct> ]
[ <sched_disk_space_check_hardcoded/> ]
[ <max_claimed_credit>X</max_claimed_credit ]
[ <grant_claimed_credit/> ]
[ <symstore>URL</symstore> ]
[ <dont_delete_batches/> ]
[ <sched_debug_level> N </sched_debug_level> ]
[ <fuh_debug_level> N </fuh_debug_level> ]
[ <verify_files_on_app_start/> ]
<!-- optional; defaults as indicated: -->
<project_dir> ../ </project_dir> <!-- relative to location of 'start' -->
<bin_dir> bin </bin_dir> <!-- relative to project_dir -->
<cgi_bin_dir> cgi-bin </cgi_dir> <!-- relative to project_dir -->
[ configuration options ]
</config>
<daemons>
<daemon>
<cmd> feeder -d 3 </cmd>
[ <host> hostname.ip </host> ]
[ <disabled> 1 </disabled> ]
</daemon>
<daemon>
...
</daemon>
[ list of daemons ]
</daemons>
<tasks>
<task>
<cmd> get_load </cmd>
<output> get_load.out </output>
<period> 5 min </period>
[ <host> host.ip </host> ]
[ <disabled> 1 </disabled> ]
[ <always_run> 1 </always_run> ]
</task>
<task>
<cmd> echo \"HI\" | mail root@example.com </cmd>
<output> /dev/null </output>
<period> 1 day </period>
</task>
<task>
...
</task>
[ list of periodic tasks ]
</tasks>
</boinc>
"),
"</pre>
"),"
Details on:
<ul>
<li> <a href=project_options.php>Configuration options</a>
<li> <a href=project_daemons.php>Daemons</a>
<li> <a href=project_tasks.php>Periodic tasks</a>
</ul>
";
echo "<b>The general project configuration elements are:</b>";
list_start();
list_item("host",
"name of project's main host, as given by Python's socket.hostname().
Daemons and tasks run on this host by default."
);
list_item("db_name", "Database name");
list_item("db_host", "Database host machine");
list_item("db_user", "Database user name");
list_item("db_passwd", "Database password");
list_item("shmem_key", "ID of scheduler shared memory. Must be unique on host.");
list_item("download_url", "URL of data server for download");
list_item("download_dir", "absolute path of download directory");
list_item("download_dir_alt",
"absolute path of old download directory
(see <a href=hier_dir.php>Hierarchical upload/download directories</a>)"
);
list_item("upload_url", "URL of file upload handler");
list_item("uldl_dir_fanout", "fan-out factor of upload and download directories
(see <a href=hier_dir.php>Hierarchical upload/download directories</a>)"
);
list_item("upload_dir", "absolute path of upload directory");
list_item("cgi_url", "URL of scheduling server");
list_item("stripchart_cgi_url", "URL of stripchart server");
list_item("log_dir", "Path to the directory where the assimilator, feeder, transitioner and
cgi output logs are stored. This allows you to change the default log
directory path. If set explicitly, you can also use the 'grep logs'
features on the administrative pages. Note: enabling 'grep logs' with
very long log files can hang your server, since grepping GB files can
take a long time. If you enable this feature, be sure to rotate the
logs so that they are not too big.");
list_item("sched_lockfile_dir",
"Enables scheduler locking (recommended) and specifies
directory where scheduler lockfiles are stored.
Must be writable to the Apache user.
");
list_item("profile_screening",
"If present, don't show profile pictures until they've been
screened and approved by project admins."
);
list_end();
echo "
<b>The following control features that you may or may not want
available to users.</b>
";
list_start();
list_item("disable_account_creation",
"If present, disallow account creation"
);
list_item("show_results",
"Enable web site features that show results (per user, host, etc.)"
);
list_end();
echo "
<b>The following control the way in which results are scheduled, sent,
and assigned to users and hosts.</b>
";
list_start();
list_item("one_result_per_user_per_wu",
"If present, send at most one result of a given workunit to a given user.
This is useful for checking accuracy/validity of results.
It ensures that the results for a given workunit are generated by
<b>different</b> users.
If you have a validator that compares different results
for a given workunits to ensure that they are equivalent,
you should probably enable this.
Otherwise you may end up validating results from a given user
with results from the <b>same</b> user."
);
list_item("max_wus_to_send",
"Maximum results sent per scheduler RPC. Helps prevent hosts with
trouble from getting too many results and trashing them. But you
should set this large enough so that a host which is only connected to
the net at intervals has enough work to keep it occupied in between
connections."
);
list_item("non_cpu_intensive",
"If this flag is present,
project will be treated specially by the client:
<ul>
<li> The client will download one result at a time.
<li> This result will be executed whenever computation is enabled
(bypassing the normal scheduling mechanism).
</ul>
This is intended for
<a href=non_cpu_intensive.php>applications that use little CPU time</a>,
e.g. that do network or host measurements."
);
list_item("min_sendwork_interval",
"Minimum number of seconds to wait after sending results to a given
host, before new results are sent to the same host. Helps prevent
hosts with download or application problems from trashing lots of
results by returning lots of error results. But don't set it to be so
long that a host goes idle after completing its work, before getting
new work."
);
list_item("daily_result_quota",
"Maximum number of results (per CPU) sent to a given host in a 24-hour
period. Helps prevent hosts with download or application problems from
returning lots of error results. Be sure to set it large enough that
a host does not go idle in a 24-hour period, and can download enough
work to keep it busy if disconnected from the net for a few days. The
maximum number of CPUS is bounded at four."
);
list_item("ignore_delay_bound",
"By default, results are not sent to hosts too slow to complete them within delay bound.
If this flag is set, this rule is not enforced."
);
list_item("dont_generate_upload_certificates",
"Don't put upload certificates in results.
This makes result generation a lot faster,
since no encryption is done,
but you lose protection against DoS attacks
on your upload servers."
);
list_item("locality_scheduling",
"When possible, send work that uses the same files that the host
already has. This is intended for projects which have large data
files, where many different workunits use the same data file. In
this case, to reduce download demands on the server, it may be
advantageous to retain the data files on the hosts, and send
them work for the files that they already have.
See <a href=sched_locality.php>Locality Scheduling</a>."
);
list_item("locality_scheduling_wait_period",
"This element only has an effect when used in conjunction with the
previous locality scheduling element. It tells the scheduler to
use 'trigger files' to inform the project that more work is
needed for specific files. The period is the number of seconds
which the scheduler will wait to see if the project can create
additional work. Together with project-specific daemons or
scripts this can be used for 'just-in-time' workunit
creation. See <a href=sched_locality.php>Locality Scheduling</a>."
);
list_item("min_core_client_version",
"If the scheduler gets a request from a client with
a version number less than this,
it returns an error message and doesn't do any other processing."
);
list_item("choose_download_url_by_timezone",
"When the scheduler sends work to hosts, it replaces the download
URL appearing in the data and executable file descriptions with
the download URL closest to the host's timezone. The project
must provide a two-column file called 'download_servers' in the
project root directory. This is a list of all download servers
that will be inserted when work is sent to hosts. The first column
is an integer listing the server's offset in seconds from UTC.
The second column is the server URL in the format such as
http://einstein.phys.uwm.edu. The download servers must
have identical file hierarchies and contents, and the path to
file and executables must start with '/download/...' as in
'http://einstein.phys.uwm.edu/download/123/some_file_name'."
);
list_item("cache_md5_info",
"When creating work, keep a record (in files called foo.md5) of the
file length and md5 sum of data files and executables. This can
greatly reduce the time needed to create work, if (1) these files
are re-used, and (2) there are many of these files, and (3) reading
the files from disk is time-consuming."
);
list_item("min_core_client_version_announced",
"Announce a new version of the BOINC core client, which in the future
will be the minimum required version. In conjunction with the next
tag, you can warn users with version below this to upgrade by a
specified deadline. Example value: 419."
);
list_item("min_core_client_upgrade_deadline",
"Use in conjunction with the previous tag. The value given here is the
Unix epoch returned by time(2) until which hosts can update their
core client. After this time, they may be shut out of the project.
Before this time, they will receive messages warning them to upgrade."
);
list_item("nowork_skip",
"If the scheduling server has no work,
it replies to RPCs without doing any database access
(e.g., without looking up the user or host record).
This reduces DB load, but it fails to update
preferences when users click on Update.
Use it if your server DB is overloaded."
);
list_item("resend_lost_results",
"If set, and a &lt;other_results> list is present
in scheduler request,
resend any in-progress results not in the list.
This is recommended;
it should increase the efficiency of your project"
);
list_item("min_passwd_length",
"Minimum length of user passwords. Default is 6."
);
list_item("fp_benchmark_weight",
"The weighting given to the Whetstone benchmark
in the calculation of claimed credit.
Must be in [0 .. 1].
Projects whose applications are floating-point intensive should use 1;
pure integer applications, 0.
Choosing an appropriate value will reduce the disparity
in claimed credit between hosts.
The script html/ops/credit_study.php,
run against the database of a running project,
will suggest what value to use."
);
list_item("default_disk_max_used_gb", "Sets the default value for
the disk_max_used_gb preference so its consistent between the
scheduler and web pages. The scheduler uses it when a request
for work doesn't include preferences, or the preference is set
to zero. The web page scripts use it to set the initial value
when displaying or editing preferences the first time, or when
the user never saved them. Default is 100.
");
list_item("default_disk_max_used_pct", "Sets the default value for
the disk_max_used_pct preference so its consistent between the
scheduler and web pages. The scheduler uses it when a request
for work doesn't include preferences, or the preference is set
to zero. The web page scripts use it to set the initial value
when displaying or editing preferences the first time, or when
the user never saved them. Default is 50.
");
list_item("default_disk_min_free_gb", "Sets the default value for
the disk_min_free_gb preference so its consistent between the
scheduler and web pages. The scheduler uses it when a request
for work doesn't include preferences. The web page scripts use
it to set the initial value when displaying or editing
preferences the first time, or when the user never saved them.
Also, the scheduler uses this setting to override any smaller
preference from the host, it enforces a 'minimum free disk space'
to keep from filling up the drive. Recommend setting this no
smaller than .001 (1MB or 1,000,000 bytes). Default is .001.
");
list_item("sched_disk_space_check_hardcoded", "Controls how the
above three settings are interpreted by the web page php scripts.
This setting is for projects that updated the php scripts to
get the default disk space usage settings from config.xml, but
haven't updated their scheduler to do the same.
");
list_item("max_claimed_credit",
"If a result claims more credit than this, mark it as invalid."
);
list_item("grant_claimed_credit",
"If set, grant the claimed credit,
regardless of what other results for this workunit claimed.
These is useful for projects where
different instances of the same job
can do much different amounts of work.
"
);
list_item("symstore",
"URL of your project's symbol store,
used for debugging Windows applications."
);
list_item("dont_delete_batches",
"If this boolean is set,
the file deleter won't delete any files for which
the corresponding workunit or result record has
a positive value of the the 'batch' field.
This lets you keep files on disk until you're done with them.
Create workunits with a positive batch number,
and zero out (or negate) the batch number when you're done
looking at the files
(you can do this with a SQL query).
If you use this option, replace the indices on
file_delete_state with indices on (file_delete_state, batch)."
);
list_item("sched_debug_level",
"Verbosity level for scheduler log output.
1=minimal, 2=normal (default), 3=verbose."
);
list_item("fuh_debug_level",
"Verbosity level for file upload handler log output.
1=minimal, 2=normal (default), 3=verbose."
);
list_item("verify_files_on_app_start",
"Before starting or restarting an app,
check contents of input files and app version files
by either MD5 or digital signature check.
Detects user tampering with file
(but doesn't really increase security,
since user could also change MD5s or signatures in
client state file)."
);
list_end();
// THE INFORMATION BELOW NEEDS TO BE ORGANIZED AND PUT INTO TABLES OR SOME OTHER LESS CRAMPED FORM
echo "
<b>Tasks</b> are periodic, short-running jobs.
&lt;cmd> and &lt;period> are required.
OUTPUT specifies the file to output and by default is COMMAND_BASE_NAME.out.
Commands are run in the &lt;bin_dir> directory
which is a path relative to &lt;project_dir> and output to &lt;log_dir>.
<p>
<b>Daemons</b> are continuously-running programs.
The process ID is recorded in the &lt;pid_dir> directory
and the process is sent a SIGHUP in a DISABLE operation.
<p>
Both tasks and daemons can run on a different host (specified by &lt;host>).
The default is the project's main host, which is specified in config.host
A daemon or task can be turned off by adding the &lt;disabled> element.
As well, there may be some tasks you wish to run via cron regardless of
whether or not the project is enabled (for example, a script that logs the
current CPU load of the host machine). You can do so by adding the
&lt;always_run> element (&lt;disabled> takes precedence over &lt;always_run>).
";
page_tail();
?>

View File

@ -99,7 +99,7 @@ the BOINC software:
<p>
";
$i = 0;
$n = 3;
$n = 4;
function show_name($x) {
global $i;
global $n;

View File

@ -67,6 +67,11 @@ Creating a BOINC project
<li> <a href=database.php>The BOINC database</a>
<li> <a href=server_dirs.php>Directory structure</a>
<li> <a href=configuration.php>The project configuration file</a>
<ul
<li> <a href=project_options.php>Project options</a>
<li> <a href=project_daemons.php>Daemons</a>
<li> <a href=project_tasks.php>Periodic tasks</a>
</ul>
</ul>
<li> <a href=compile.php>Compile BOINC software</a>
<li> <a href=groups.php>Groups and permissions</a>
@ -92,7 +97,7 @@ Creating a BOINC project
Getting work done
</b></font>
<ul>
<li> <a href=backend_programs.php>Overview of daemons</a>
<li> <a href=backend_programs.php>Work-handling daemons</a>
<li> <a href=tools_work.php>Generating work</a>
<li> <a href=validate.php>Result validation</a>
<li> <a href=assimilate.php>Result assimilation</a>

View File

@ -71,7 +71,7 @@ function page_tail() {
}
function html_text($x) {
return "<pre>".htmlspecialchars($x)."</pre>
return "<div bgcolor=$light_blue><pre>".htmlspecialchars($x)."</pre></div>
";
}
@ -145,16 +145,14 @@ function error_page($x) {
function block_start() {
global $light_blue;
echo "
<table width=100% cellpadding=4>
<tr>
<td bgcolor=$light_blue width=100%>
<pre>";
<table width=100% cellpadding=4>
<tr>
<td bgcolor=$light_blue width=100%><pre>";
}
function block_end() {
echo "</pre> </td> </tr> </table>
";
echo "</pre></td></tr></table>
";
}
?>

View File

@ -43,11 +43,19 @@ list_item_array(array(
"Mac OS X",
"SETI@home app"
));
list_item_array(array(
"<a href=http://www.nekochan.net/nekoware/index.php?path=current/>nekochan.net</a>",
"SGI Irix 6.5.22 and above",
"<a href=http://www.nekochan.net/nekoware/current/neko_boinc_client-5.4.9.tardist>BOINC client 5.4.9</a>
and <a href=http://www.nekochan.net/nekoware/current/neko_setiathome_enhanced-5.12.tardist>SETI@home enhanced 5.12</a>."
));
if (0) {
list_item_array(array(
"<a href=http://rcswww.urz.tu-dresden.de/~s3240790>Erik Trauschke</a>",
"Irix",
"BOINC core client and SETI@home app"
));
}
list_item_array(array(
"SETI@BOINC (<a href=http://www.marisan.nl/seti/>English</a>,
<a href=http://www.marisan.nl/seti/index_nl.htm>Dutch</a>)",

View File

@ -1,114 +1,133 @@
<?php
require_once("docutil.php");
require_once("boinc_news.inc");
require_once("../html/inc/news.inc");
require_once("projects.inc");
$projects = array(
array(
"Tanpaku",
"http://issofty17.is.noda.tus.ac.jp/",
"Tokyo University of Science",
"Biology",
"To predict protein structure and function from genetic sequences, using the \'Brownian Dynamics\' (BD) method. This method enables us to simulate more efficiently than conventional methods.",
"tanpaku.jpg"
),
array("Climateprediction.net",
"http://climateprediction.net",
"Oxford University",
"Earth sciences",
"To investigate the approximations that have to be made in state-of-the-art climate models. By running the model thousands of times we hope to find out how the model responds to slight tweaks to these approximations - slight enough to not make the approximations any less realistic. This will allow us to improve our understanding of how sensitive our models are to small changes and also to things like changes in carbon dioxide and the sulphur cycle. This will allow us to explore how climate may change in the next century under a wide range of different scenarios.",
"cpn_logo_world_1.jpg"
),
array(
"BBC Climate Change Experiment",
"http://bbc.cpdn.org/",
"Oxford University",
"Earth sciences",
"The experiment adds the processing power of your home or office computer to thousands of others to predict climate change. The same model that the Met Office uses to make daily weather forecasts has been adapted by climateprediction.net to run on home PCs.<p> The model incorporates many variable parameters, allowing thousands of sets of conditions. Your computer will run one individual set of conditions - in effect your individual version of how the world\'s climate works - and then report back to the climateprediction.net team what it calculates.",
function show_participant() {
global $light_blue;
$i = rand(0, 99);
$j = $i+1;
echo "
<tr><td align=middle>
<hr width=70%>
";
include("piecharts/$i.html");
echo "
<br>
<center>
<a href=chart_list.php><b>Top 100</a> |
<a href=http://boinc.netsoft-online.com/rankings.php?list=r_p_1_e><b>Single-computer</a> |
<a href=http://boinc.netsoft-online.com/rankings.php><b>Other lists</a>
</center>
</td></tr>
";
}
"cpn_logo_world_1.jpg"
),
array(
"Seasonal Attribution Project",
"http://attribution.cpdn.org/",
"Oxford University",
"Earth sciences",
"To determine the extent to which extreme weather events like the United Kingdom floods of Autumn 2000 are attributable to human-induced climate change. We invite you to download and run high-resolution model simulations of the world\'s climate on your own computer. By comparing the results of these simulations, half of which will include the effects of human-induced climate change, and half of which will not, we will investigate the possible impact of human activity on extreme weather risk. This project has fairly high computing requirements, including 1GB RAM.",
"cpn_logo_world_1.jpg"
),
array(
"Einstein@home",
"http://einstein.phys.uwm.edu/",
"Univ. of Wisconsin - Milwaukee, Albert Einstein Institute",
"Astrophysics",
"Search for spinning neutron stars (also called pulsars) using data from the LIGO and GEO gravitational wave detectors. Einstein@Home is a World Year of Physics 2005 project supported by the American Physical Society (APS) and by a number of international organizations.",
"einstein.jpg"
),
array(
"LHC@home",
"http://lhcathome.cern.ch/",
"CERN (European Organization for Nuclear Research)",
"Physics",
"The Large Hadron Collider (LHC) is a particle accelerator which is being built at CERN, the European Organization for Nuclear Research, the world\'s largest particle physics laboratory. When it switches on in 2007, it will be the most powerful instrument ever built to investigate on particles proprieties. LHC@home simulates particles traveling around the LHC to study the stability of their orbits.",
"lhc.jpg"
),
array(
"Predictor@home",
"http://predictor.scripps.edu",
"Scripps Research Institute",
"Biology",
"Protein structure prediction starts from a sequence of amino acids and attempts to predict the folded, functioning, form of the protein. Predicting the structure of an unknown protein is a critical problem in enabling structure-based drug design to treat new and existing diseases.",
"predictor.jpg"
),
array(
"Rosetta@home",
"http://boinc.bakerlab.org/rosetta/",
"University of Washington",
"Biology",
"Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta@home you will help us speed up and extend our research in ways we couldn\'t possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, Malaria, Cancer, and Alzheimer\'s",
"rosetta_at_home_logo.jpg"
),
array(
"SETI@home",
"http://setiathome.berkeley.edu/",
"U.C. Berkeley Space Sciences Laboratory",
"Astrophysics, astrobiology",
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose goal is to detect intelligent life outside Earth. One approach, known as radio SETI, uses radio telescopes to listen for narrow-bandwidth radio signals from space. Such signals are not known to occur naturally, so a detection would provide evidence of extraterrestrial technology.",
"seti_logo.png"
),
array(
"SIMAP",
"http://boinc.bio.wzw.tum.de/boincsimap/",
"Technical University of Munich",
"Biology",
"Calculate similarities between proteins. SIMAP provides a public database of the resulting data, which plays a key role in many bioinformatics research projects.",
"simaplogo.jpg"
),
array(
"SZTAKI Desktop Grid",
"http://szdg.lpds.sztaki.hu/szdg/",
"MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Budapest)",
"Mathematics",
"Find all the generalized binary number systems (in which bases are matrices and digits are vectors) up to dimension 11.",
"szdg1_small.jpg"
),
array(
"World Community Grid",
"http://www.worldcommunitygrid.org/",
"IBM",
"Biomedicine",
"Advance our knowledge of human disease.",
"wcg.jpg",
),
array(
"Quantum Monte Carlo at Home",
"http://qah.uni-muenster.de/",
"University of Muenster",
"Chemistry",
"Study the structure and reactivity of molecules using Quantum Chemistry.",
"logo_oben.jpg"
),
);
function show_news_items() {
global $light_blue;
require_once("boinc_news.inc");
require_once("../html/inc/news.inc");
echo "
<table border=2 cellpadding=8><tr><td bgcolor=$light_blue>
<font size=4>News</font>
<br>
";
$nnews_items = 8;
show_news($project_news, $nnews_items);
if (count($project_news) > $nnews_items) {
echo "<a href=old_news.php>... more</a>\n";
}
echo "
<p><font size=-2>News is available as an
<a href=rss_main.php>RSS feed</a> <img src=xml.gif></font>
</td></tr></table>
<p>
";
}
function show_participate() {
global $light_blue;
echo "
<tr><td bgcolor=$light_blue>
<font size=4>&nbsp;Participate</font>
</td></tr>
<tr><td>
<p>
Use the idle time on your computer
(Windows, Mac, or Linux)
to do all sorts of scientific research:
<ol>
<li> <a href=projects.php>Choose projects</a>
<li> <a href=download.php>Download</a> and run BOINC software
<li> Enter the projects' URLs, your email address, and password.
</ol>
<center>
<a href=participate.php><b><nobr>Details</nobr></b></a>
| <a href=download.php><b>Download</b></a>
| <a href=links.php><b><nobr>Web sites</nobr></b></a>
| <a href=download_network.php><b>Add-ons</b></a>
| <a href=poll.php><b><nobr>Survey</nobr></b></a>
</center>
</td></tr>
";
}
function show_create() {
global $light_blue;
echo "
<tr><td bgcolor=$light_blue><font size=4>Create a volunteer computing project</font></td></tr>
<tr><td>
If you are a scientist with a computationally-intensive task,
you may be able to use BOINC.
A BOINC project with a single Linux server
can provide computing power equivalent
to a cluster with tens of thousands of CPUs.
<p>
Learn how to <a href=create_project.php><b>create
and operate a BOINC project</b></a>.
<p>
If you lack the resources to operate a BOINC project directly,
organizations such as World Community Grid may be able
to assist you.
Please <a href=contact.php>contact us</a> for information.
</td></tr>
";
}
function show_other() {
global $light_blue;
echo "
<tr><td bgcolor=$light_blue><font size=4>Other info</font></td></tr>
<tr><td>
<ul>
<li> <a href=boinc_dev.php>Software development</a>
<li> <a href=intro.php>Overview</a>
<li> <a href=contact.php>Personnel and contributors</a>
<li> BOINC <a href=email_lists.php>email lists</a>
<li> BOINC <a href=dev/>message boards</a>
<li> <a href=papers.php>Papers related to BOINC</a>
<li> <a href=logo.php>Logos and graphics</a>
</ul>
<br>
</td></tr>
";
}
function show_nsf() {
echo "
<tr><td>
<img align=left src=nsf.gif>
BOINC is supported by the
<a href=http://nsf.gov>National Science Foundation</a>
through awards SCI/0221529, SCI/0438443 and SCI/0506411.
<font size=-2>
Any opinions, findings, and conclusions or recommendations expressed in
this material are those of the author(s)
and do not necessarily reflect the views of the National Science Foundation.
</font>
</td></tr>
";
}
echo "
<html>
@ -124,9 +143,8 @@ echo "
<h1>
Berkeley Open Infrastructure for Network Computing
</h1>
BOINC is free, open-source software for distributed computing.
It was designed for <a href=volunteer.php>volunteer computing</a>,
but also works well for desktop grid computing within organizations.
BOINC is free, open-source software for
<a href=volunteer.php>volunteer computing</a> and desktop grid computing.
<p>
";
search_form();
@ -137,150 +155,24 @@ echo "
<tr>
<td valign=top>
<table width=100% border=0 cellspacing=0 cellpadding=8>
<tr><td bgcolor=$light_blue>
<h2>&nbsp;Participate</h2>
</td></tr>
<tr><td>
<p>
BOINC lets you donate computing power
to scientific research projects (mouse over for details):
<ul>
";
shuffle($projects);
foreach ($projects as $p) {
echo "<li> <a href=$p[1] onmouseover=\"return escape('<img align=right vspace=4 hspace=4 src=images/$p[5]><b>Home:</b> $p[2]<hr><b>Area:</b> $p[3]<hr><b>Goal:</b> $p[4]')\">$p[0]</a>
";
}
show_participate();
show_participant();
show_create();
show_other();
echo "
</ul>
<p>
You can participate in several projects, ensuring that
your computer will be kept busy even when one project has no work.
<p>
To participate:
<ol>
<li> <a href=projects.php>Select projects</a>
<li> <a href=download.php>Download</a> and run BOINC software
<li> Enter the projects' URLs (visit each project's web site,
and copy the URL from your browser's address field).
</ol>
<center>
<table cellpadding=1 width=100%><tr>
<td bgcolor=$med_blue align=middle>
<a href=participate.php><b><nobr>More info</nobr></b></a>
</td>
<td bgcolor=$med_blue align=middle>
<a href=download.php><b>Download</b></a>
</td>
<td bgcolor=$med_blue align=middle>
<a href=links.php><b><nobr>Web sites</nobr></b></a>
</td>
<td bgcolor=$med_blue align=middle>
<a href=download_network.php><b>Add-ons</b></a>
</td>
<td bgcolor=$med_blue align=middle>
<a href=dev/><b><nobr>Message boards</nobr></b></a>
</td>
</tr></table>
</center>
</td></tr>
<tr><td bgcolor=$light_blue><h2>Create a volunteer computing project</h2></td></tr>
<tr><td>
If you are a scientist with a computationally-intensive task,
you may be able to use BOINC.
A BOINC project with a single Linux server
can provide computing power equivalent
to a cluster with tens of thousands of CPUs.
<p>
If you lack the resources (manpower, server capacity,
or network bandwidth) to operate a BOINC project directly,
organizations such as World Community Grid may be able
to assist you.
Please <a href=contact.php>contact us</a> for information.
<center>
<table cellpadding=1><tr>
<td bgcolor=$med_blue align=middle>
<a href=create_project.php><b>Documentation</b></a>
</td>
</center>
</tr></table>
</td></tr>
<tr><td bgcolor=$light_blue><h2>Software</h2></td></tr>
<tr><td>
<ul>
<li> <a href=compile.php>Getting and building BOINC software</a>
<li> <a href=boinc_dev.php>Software development process</a>
<li> <a href=translation.php>Translation</a> of web and GUI text
<li> Write <a href=download_network.php>'add-on' software</a>:
<ul>
<li> <a href=gui_rpc.php>Client GUIs</a>
<li> <a href=stats.php>Credit statistics web sites</a>
<li> <a href=acct_mgt.php>Account managers</a>
<li> <a href=server_status.php>Server status web sites</a>
<li> <a href=web_rpc.php>Web RPCs</a> for info about users and hosts
<li> <a href=prefs_override.php>Local editing of preferences</a>
</ul>
</ul>
</td></tr>
<tr><td bgcolor=$light_blue><h2>Other info</h2></td></tr>
<tr><td>
<ul>
<li> <a href=intro.php>Overview</a>
<li> <a href=contact.php>Personnel and contributors</a>
<li> BOINC <a href=email_lists.php>email lists</a>
<li> BOINC <a href=dev/>message boards</a>
<li> <a href=papers.php>Papers related to BOINC</a>
<li> <a href=logo.php>Logos and graphics</a>
</ul>
<br>
</td></tr>
<tr><td>
<img align=left src=nsf.gif>
BOINC is supported by the
<a href=http://nsf.gov>National Science Foundation</a>
through awards SCI/0221529, SCI/0438443 and SCI/0506411.
<font size=-2>
Any opinions, findings, and conclusions or recommendations expressed in
this material are those of the author(s)
and do not necessarily reflect the views of the National Science Foundation.
</font>
</td></tr>
</table>
</td>
";
$i = rand(0, 99);
$j = $i+1;
echo " <td valign=top width=390><table border=0 cellpadding=8 cellspacing=0>
<tr><td bgcolor=$light_blue>
<h2>Featured participant</h2>
</td></tr>
<tr><td>
<br>
One of over 600,000 people worldwide participating in BOINC:
<p>
echo " <td valign=top width=390>
";
include("piecharts/$i.html");
echo "
<br>
<a href=chart_list.php><b>Top 100</a> |
<a href=http://boinc.netsoft-online.com/rankings.php?list=r_p_1_e><b>Single-computer</a> |
<a href=http://boinc.netsoft-online.com/rankings.php><b>Other lists</a>
</td></tr></table>
<table border=2 cellpadding=8><tr><td bgcolor=$light_blue>
<h2>News</h2>
";
$nnews_items = 8;
show_news($project_news, $nnews_items);
if (count($project_news) > $nnews_items) {
echo "<a href=old_news.php>... more</a>\n";
}
show_news_items();
echo "<table>";
show_nsf();
echo "</table>";
echo "
<p><font size=-2>News is available as an
<a href=rss_main.php>RSS feed</a> <img src=xml.gif></font>
</td></tr></table>
</td></tr>
</table>

View File

@ -67,7 +67,7 @@ The general procedure for using each scripts is:
The scripts use the recent-average credit (expavg_credit) field
in the user table.
To make sure this value is accurate,
run <a href=update_stats.php>update_stats</a> manually
run <a href=project_tasks.php>update_stats</a> manually
if you're not running it as a periodic task.
<h3>Personalizing emails</h3>

View File

@ -12,18 +12,18 @@ function list_item2($x, $y) {
";
}
function boxes($options, $disabled) {
function boxes($options) {
$x = "<font size=-2>[check all that apply]</font><br>\n";
foreach ($options as $name => $text) {
$x .= "<input type=checkbox $disabled name=$name> $text<br>\n";
$x .= "<input type=checkbox name=$name> $text<br>\n";
}
return $x;
}
function radio($radio_name, $options, $disabled) {
function radio($radio_name, $options) {
$x = "";
foreach ($options as $name => $text) {
$x .= "<input type=radio $disabled name=$radio_name value=$name> $text<br>\n";
$x .= "<input type=radio name=$radio_name value=$name> $text<br>\n";
}
return $x;
}
@ -34,16 +34,15 @@ function show_choice($choice, $outer_radio) {
$radio_name = $choice["radio_name"];
$x = "";
if ($rname) {
$disabled = "disabled";
$x .= "<input onclick=\"$rname()\" type=radio name=$outer_radio value=$rname >";
}
$x .= $text;
if ($radio_name) {
$y = radio($radio_name, $choice["options"], $disabled);
$y = radio($radio_name, $choice["options"]);
} else {
$y = boxes($choice["options"], $disabled);
$y = boxes($choice["options"]);
$other_name = $choice['other_name'];
$y .= "Other: <input $disabled size=30 name=$other_name>";
$y .= "Other: <input size=30 name=$other_name>";
}
list_item2($x, $y);
}

View File

@ -8,6 +8,7 @@ require_once("poll.inc");
page_head("BOINC user survey");
echo "
<body onload=\"disable_all();\">
<p>
Several volunteer computing projects,
including Climateprediction.net, Einstein@home,
@ -34,7 +35,7 @@ list_bar("Do you run BOINC?");
generate_functions($overall_choices);
show_choices($overall_choices, $run_boinc);
list_bar("Choosing projects");
list_bar("Your participation");
show_choices($project_items, "");
list_bar("Your computers");
show_choices($comp_items, "");

View File

@ -185,6 +185,37 @@ $project_items = array(
"pmore10"=>"more than 10",
),
),
array(
"radio_name"=>"ssaver",
"text"=>"Do you run BOINC as a screensaver?",
"options"=>array(
"ss_yes"=>"yes",
"ss_no"=>"no",
),
),
array(
"radio_name"=>"mboards",
"text"=>"Your usage of project messages boards:",
"options"=>array(
"mboard_r"=>"to read information",
"mboard_rw"=>"to read and post information",
"mboard_none"=>"none",
),
),
array(
"text"=>"Where do you get information to help resolve problems with BOINC and/or BOINC projects?",
"options"=>array(
"help_pmb"=>"The project message boards",
"help_bmb"=>"The BOINC message boards",
"help_bdoc"=>"The BOINC web site",
"help_bmlist"=>"BOINC mailing lists",
"help_wiki"=>"The Unofficial BOINC Wiki",
"help_team"=>"Team web sites",
"help_google"=>"Google or other search engines",
),
"radio_name"=>false,
"other_name"=>help_other_text,
),
);
shuffle($project_items[1]['options']);

110
doc/projects.inc Normal file
View File

@ -0,0 +1,110 @@
<?php
$projects = array(
array(
"Tanpaku",
"http://issofty17.is.noda.tus.ac.jp/",
"Tokyo University of Science",
"Biology",
"To predict protein structure and function from genetic sequences, using the \'Brownian Dynamics\' (BD) method. This method enables us to simulate more efficiently than conventional methods.",
"tanpaku.jpg"
),
array("Climateprediction.net",
"http://climateprediction.net",
"Oxford University",
"Earth sciences",
"To investigate the approximations that have to be made in state-of-the-art climate models. By running the model thousands of times we hope to find out how the model responds to slight tweaks to these approximations - slight enough to not make the approximations any less realistic. This will allow us to improve our understanding of how sensitive our models are to small changes and also to things like changes in carbon dioxide and the sulphur cycle. This will allow us to explore how climate may change in the next century under a wide range of different scenarios.",
"cpn_logo_world_1.jpg"
),
array(
"BBC Climate Change Experiment",
"http://bbc.cpdn.org/",
"Oxford University",
"Earth sciences",
"The experiment adds the processing power of your home or office computer to thousands of others to predict climate change. The same model that the Met Office uses to make daily weather forecasts has been adapted by climateprediction.net to run on home PCs.<p> The model incorporates many variable parameters, allowing thousands of sets of conditions. Your computer will run one individual set of conditions - in effect your individual version of how the world\'s climate works - and then report back to the climateprediction.net team what it calculates.",
"cpn_logo_world_1.jpg"
),
array(
"Seasonal Attribution Project",
"http://attribution.cpdn.org/",
"Oxford University",
"Earth sciences",
"To determine the extent to which extreme weather events like the United Kingdom floods of Autumn 2000 are attributable to human-induced climate change. We invite you to download and run high-resolution model simulations of the world\'s climate on your own computer. By comparing the results of these simulations, half of which will include the effects of human-induced climate change, and half of which will not, we will investigate the possible impact of human activity on extreme weather risk. This project has fairly high computing requirements, including 1GB RAM.",
"cpn_logo_world_1.jpg"
),
array(
"Einstein@home",
"http://einstein.phys.uwm.edu/",
"Univ. of Wisconsin - Milwaukee, Albert Einstein Institute",
"Astrophysics",
"Search for spinning neutron stars (also called pulsars) using data from the LIGO and GEO gravitational wave detectors. Einstein@Home is a World Year of Physics 2005 project supported by the American Physical Society (APS) and by a number of international organizations.",
"einstein.jpg"
),
array(
"LHC@home",
"http://lhcathome.cern.ch/",
"CERN (European Organization for Nuclear Research)",
"Physics",
"The Large Hadron Collider (LHC) is a particle accelerator which is being built at CERN, the European Organization for Nuclear Research, the world\'s largest particle physics laboratory. When it switches on in 2007, it will be the most powerful instrument ever built to investigate on particles proprieties. LHC@home simulates particles traveling around the LHC to study the stability of their orbits.",
"lhc.jpg"
),
array(
"Predictor@home",
"http://predictor.scripps.edu",
"Scripps Research Institute",
"Biology",
"Protein structure prediction starts from a sequence of amino acids and attempts to predict the folded, functioning, form of the protein. Predicting the structure of an unknown protein is a critical problem in enabling structure-based drug design to treat new and existing diseases.",
"predictor.jpg"
),
array(
"Rosetta@home",
"http://boinc.bakerlab.org/rosetta/",
"University of Washington",
"Biology",
"Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta@home you will help us speed up and extend our research in ways we couldn\'t possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, Malaria, Cancer, and Alzheimer\'s",
"rosetta_at_home_logo.jpg"
),
array(
"SETI@home",
"http://setiathome.berkeley.edu/",
"U.C. Berkeley Space Sciences Laboratory",
"Astrophysics, astrobiology",
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose goal is to detect intelligent life outside Earth. One approach, known as radio SETI, uses radio telescopes to listen for narrow-bandwidth radio signals from space. Such signals are not known to occur naturally, so a detection would provide evidence of extraterrestrial technology.",
"seti_logo.png"
),
array(
"SIMAP",
"http://boinc.bio.wzw.tum.de/boincsimap/",
"Technical University of Munich",
"Biology",
"Calculate similarities between proteins. SIMAP provides a public database of the resulting data, which plays a key role in many bioinformatics research projects.",
"simaplogo.jpg"
),
array(
"SZTAKI Desktop Grid",
"http://szdg.lpds.sztaki.hu/szdg/",
"MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Budapest)",
"Mathematics",
"Find all the generalized binary number systems (in which bases are matrices and digits are vectors) up to dimension 11.",
"szdg1_small.jpg"
),
array(
"World Community Grid",
"http://www.worldcommunitygrid.org/",
"IBM",
"Biomedicine",
"Advance our knowledge of human disease.",
"wcg.jpg",
),
array(
"Quantum Monte Carlo at Home",
"http://qah.uni-muenster.de/",
"University of Muenster",
"Chemistry",
"Study the structure and reactivity of molecules using Quantum Chemistry.",
"logo_oben.jpg"
),
);
?>

View File

@ -1,22 +1,33 @@
<?php
require_once("docutil.php");
require_once("projects.inc");
page_head("Choosing BOINC projects");
echo "
BOINC was originally developed at the University of California to support
<a href=http://setiathome.berkeley.edu>SETI@home</a>.
However, other distributed computing projects use BOINC.
BOINC allows you to participate in multiple projects,
and to control how your resources (such as computer time
A partial list of current projects (mouse over for details):
<ul>
";
shuffle($projects);
foreach ($projects as $p) {
echo "<li> <a href=$p[1] onmouseover=\"return escape('<img align=right vspace=4 hspace=4 src=images/$p[5]><b>Home:</b> $p[2]<hr><b>Area:</b> $p[3]<hr><b>Goal:</b> $p[4]')\">$p[0]</a>
";
}
echo "
</ul>
<p>
You can participate in several projects, ensuring that
your computer will be kept busy even when one project has no work.
You can control how your resources (such as computer time
and disk space) are divided among these projects.
When you attach to a project, you will be asked for its URL.
This is simply its web address: visit each project's web site,
and copy the URL from your browser's address field.
<p>
Projects are independent, and each maintains its own servers.
Projects are independent.
The BOINC developers and the University of California
have no control over the creation of BOINC-based projects,
and do not endorse them.
The BOINC web sites lists some, but not all, projects.
A more complete list is on the
<a href=http://boinc-wiki.ath.cx/index.php?title=Catalog_of_BOINC_Powered_Projects>BOINC Wiki</a>.
<p>
When you participate in a project,
@ -36,6 +47,9 @@ you should consider the following questions:
or will they belong to a for-profit business?
</ul>
";
echo "
<script language=\"JavaScript\" type=\"text/javascript\" src=\"wz_tooltip.js\"></script>
";
page_tail();
?>

View File

@ -8,8 +8,11 @@ A BOINC project consists of the following components:
<ul>
<li> A <a href=database.php>database</a>
<li> A <a href=server_dirs.php>directory structure</a>
<li> A <a href=backend_programs.php>set of daemon processes</a>
<li> A <a href=configuration.php>configuration file</a>
<li> A <a href=configuration.php>configuration file</a>,
which specifies
<a href=project_options.php>options</a>,
<a href=backend_programs.php>daemons</a>, and
<a href=tasks.php>periodic tasks</a>.
</ul>
<p>

View File

@ -2,74 +2,69 @@
require_once("docutil.php");
page_head("Project control");
echo "
<h2>Project control scripts</h2>
The following Python scripts control a project:
";
list_start();
list_item("bin/start",
"Start the project: start all daemons,
and remove the stop_sched and stop_daemon files (see below)."
);
list_item("bin/stop",
"Stop the project (create the stop_sched and stop_daemon files)"
);
list_item("bin/start --cron",
"If the project is started, perform all periodic tasks that are past due,
and start any daemons that aren't running.
Otherwise do nothing."
);
list_item("bin/status",
"Show whether the project is stopped.
Show the status of all daemons.
Show the status of all periodic tasks
(e.g., when they were last executed)."
);
list_end();
echo "
<h2>Trigger files</h2>
<p>
The following files (in the project root directory)
can be used to turn off various parts of a project.
<pre>
stop_sched
</pre>
Have the scheduler return 'project down' messages.
<pre>
stop_daemons
</pre>
Tell all daemon process to exit.
<pre>
stop_web
</pre>
Have the web site return 'project down' messages
for all functions that require database access.
<pre>
stop_upload
</pre>
Have the file upload handler return transient error messages to clients
(they'll back off and retry later).
";
list_start();
list_item("stop_sched",
"Have the scheduler return 'project down' messages."
);
list_item("stop_daemons",
"Tell all daemon process to exit."
);
list_item("stop_web",
"Have the web site return 'project down' messages
for all functions that require database access."
);
list_item("stop_upload",
"Have the file upload handler return transient error messages to clients
(they'll back off and retry later)."
);
list_end();
echo "
<p>
The presence of a file triggers the function.
For example, to turn off data-driven web pages, type
<pre>
touch stop_web
</pre>
and to them back on, type
and to turn them back on, type
<pre>
rm stop_web
</pre>
<p>
If all three files are present, no database access will occur.
If the first three files are all present, no database access will occur.
You should do this during most maintenance functions
(such as upgrading software).
<h2>Project control scripts</h2>
The following Python scripts control a project:
<pre>
bin/start
</pre>
Start the project: start all daemons,
and remove the stop_sched and stop_daemon files.
<pre>
bin/stop
</pre>
Stop the project (create the stop_sched and stop_daemon files)
<pre>
bin/start --cron
</pre>
If the project is started, perform all periodic tasks that are past due,
and start any daemons that aren't running.
Otherwise do nothing.
<pre>
bin/status
</pre>
Show whether the project is stopped.
Show the status of all daemons.
Show the status of all periodic tasks
(e.g., when they were last executed).
";
page_tail();
?>

View File

@ -1,16 +1,25 @@
<?php
require_once("docutil.php");
page_head("Trickle messages");
echo "
<b>Trickle messages</b>
let applications communicate with the server
during the execution of a workunit.
They are intended for applications that have
long work units (multiple days).
Trickle messages may go in either direction:
'trickle up' messages go from application to server,
'trickle down' messages go from server to application.
Typical uses of this mechanism:
They are intended for applications that have long workunits (multiple days).
<p>
Trickle messages may from client to server or vice versa.
Messages are XML documents.
<h3>Trickle-up messages</h3>
<p>
<b>Trickle-up</b> messages go from application to server.
They are handled by <b>trickle handler daemons</b> running on the server.
Each message is tagged with a 'variety' (a character string).
Each daemon handles messages of a particular variety.
(This is used, typically, to distinguish different applications.)
Example uses:
<ul>
<li>
The application sends a trickle-up message containing
@ -22,32 +31,33 @@ so that users can be granted incremental credit
The application sends a trickle-up message
containing a summary of the computational state,
so that server logic can decide if the computation should be aborted.
</ul>
<h3>Trickle-down messages</h3>
<p>
<b>Trickle-down</b> messages go from server to application.
Each one is addressed to a particular host,
and must include an element <code>&lt;result_name&gt;</code>
identifying the result to which the message is addressed.
If that result is still running on the host, it is delivered to it.
Example uses:
<ul>
<li>
The server sends a message telling the application to abort.
<li>
The server sends a trickle-down message
telling the application to abort.
<li>
The server sends a trickle-down message
containing the user's current total credit.
The server sends a message containing the user's current total credit.
</ul>
<p>
Trickle messages are asynchronous and reliable.
Trickle messages are asynchronous, ordered, and reliable.
Trickle messages are conveyed in scheduler RPC messages,
so they may not be delivered immediately after being generated.
<p>
To handle trickle-down messages, a project must include the line
<pre>
&lt;msg_to_host/>
</pre>
in the <a href=configuration.php>configuration</a> (config.xml) file.
";
page_tail();

View File

@ -3,36 +3,72 @@ require_once("docutil.php");
page_head("Trickle message API");
echo "
<h3>API (application)</h3>
The interface for <a href=trickle.php>trickle messages</a>
includes both client-side and server-side components.
<h3>Client-side API</h3>
To send a trickle-up message, call
<pre>
<code>int boinc_send_trickle_up(char* variety, char* text)</code>
</pre>
sends a trickle message of the given variety.
Returns zero if success.
<p>
To receive a trickle-down message, call
<pre>
<code>int boinc_receive_trickle_down(char* buf, int len)</code>
</pre>
receives a trickle message.
Returns true (nonzero) if there was a message.
Messages are delivered in order.
This returns true (nonzero) if there was a message.
<h3>API (server)</h3>
<h3>Server-side API</h3>
To handle trickle messages,
use the daemon process 'trickle_handler'.
You must supply the following function:
<p>
To handle trickle-up messages, use a 'trickle_handler' daemon.
This is a program, based on sched/trickle_handler.C, linked with a function
",html_text("
int handle_trickle(TRICKLE_UP&);
int handle_trickle(MSG_FROM_HOST&);
struct MSG_FROM_HOST {
int create_time;
int hostid;
char variety[256]; // project-defined; what kind of msg
char xml[MSG_FROM_HOST_BLOB_SIZE];
};
"),"
You may send trickle-down messages, from this function or elsewhere,
as follows:
This function should return zero if the message was handled successfully;
otherwise it will be retried later.
The 'hostid' field identifies the host from which the message was sent.
The daemon must be passed a '-variety X' command-line argument,
telling it what kind of messages to handle.
The daemon should be specified in the
<a href=project_daemons.php>project configuration file</a>.
<p>
To send send trickle-down messages
(from a trickle handler daemon or other program)
you must insert a record in the 'msg_to_host' table.
From C/C++, this is done as follows:
",html_text("
DB_TRICKLE_DOWN tdown;
// ... populate the tdown object
tdown.insert();
DB_MSG_TO_HOST mth;
mth.clear();
mth.create_time = time(0);
mth.hostid = hostid;
sprintf(mth.xml,
\"<trickle_down>\\n\"
\" <result_name>%s</result_name>\\n\"
\" ...\\n\"
\"</trickle_down>\\n\",
...
);
retval = mth.insert();
"),"
<p>
To send trickle-down messages, a project must include the line
<pre>
&lt;msg_to_host/>
</pre>
in the <a href=configuration.php>configuration</a> (config.xml) file.
";
page_tail();

View File

@ -43,6 +43,10 @@ body {
color: black;
}
pre {
background-color: #d8e8ff;
}
th {
background-color: #c8c8ff;
color: black;

View File

@ -55,7 +55,7 @@ define("IDLE_TIME_TO_RUN_DESC2", "<br><font size=-2>(applies only if above is 'n
define("START_END_DESC", "Do work only between the hours of");
define("START_END_DESC2", "<br><font size=-2>(no restriction if equal)</font>");
define("LEAVE_APPS_IN_MEMORY_DESC",
"Leave applications in memory while preempted?
"Leave applications in memory while suspended?
<br><font size=-2>(suspended applications will consume swap space if 'yes')</font>");
define("CPU_SCHEDULING_DESC", "Switch between applications every
<br><font size=-2>(recommended: 60 minutes)</font>");

View File

@ -18,15 +18,15 @@
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// trickle_handler - check and validate new trickle messages
// -app appname
// trickle_handler - process trickle-up messages
// -variety variety
// [-d debug_level]
// [-one_pass] // make one pass through table, then exit
// [-asynch] // fork, run in separate process
//
// This program must be linked with an app-specific function:
//
// int handle_trickle(TRICKLE_UP&)
// int handle_trickle(MSG_FROM_HOST&)
// handle a trickle message
//
// return nonzero on error
@ -46,6 +46,9 @@ char variety[256];
extern int handle_trickle(MSG_FROM_HOST&);
// The following is an example;
// replace it with your own function
//
int handle_trickle(MSG_FROM_HOST& mfh) {
int retval;