Measuring and distinguishing hosts
The core client measures the following aspects of each host:
- CPU performance: integer ops/sec, double-precision
floating-point ops/sec, and memory bandwidth are measured separately.
They are measured by a process executing at the same priority as BOINC
applications, so the results will be affected by other processes.
These measurements are taken when the client starts for the first time,
and once every month afterwards.
- Number of CPUs: By default, the number of simultaneous
slot directories will be set to this number unless otherwise indicated
by user preferences.
- Vendor and model of CPU
- Disk space: free space and total space on the drive which
BOINC is installed on.
These numbers will be used to ensure BOINC does
not use more space than set in the user preferences.
- Memory: total RAM, CPU cache, and swap space.
These numbers can be used by the scheduling server to decide whether or not to
assign work to a client.
This also provides a means for assignment of
differing work based on host abilities.
- Timezone:
- Last IP address and count of consecutive same addresses.
- Number of RPCs and time of last RPC.
- Fractions of time that core client runs on host, host is
connected, and user is active.
These are computed as exponentially-weighted averages; see the class TIME_STATS.
- Operating system name and version.
- Average up- and downstream network bandwidth.
These are computed as exponentially-weighted averages; see the class NET_STATS.
These quantities are reported in every scheduling RPC, and their latest
values are stored in the BOINC database.
Distinguishing hosts
Not all systems have an application-readable globally unique ID, so
we don't take this approach.
When a host first contacts the scheduling
server it is assigned a host ID, which it stores in its
client_state.xml file.
The BOINC database maintains the RPC sequence number for each host,
and the host maintains the sequence number in its
client_state.xml file.
To install the BOINC client on a large number of computers, users
are instructed to copy only the executable and the prefs.xml file.
If the user copies the client_state.xml file as well, the
first RPCs from the other hosts will have a repeat sequence number;
in this case the scheduling server creates a new host record and returns
its ID.