BOINC 7.0 change log

From BOINC

Disclaimer: The actual change log was taken from the Alpha email list and the Trac Timeline repository changes commits, but it can happen that changes in the list are missing, misplaced or weren't in the version it says it was in.

7.0.1

  • Mac installer: There can now be multiple instances of the Manager running, so shut them all down.
  • client/scheduler: If the file "client_opaque.txt" exists on the client, include its contents in scheduler request messages. On the scheduler, parse this into SCHEDULER_REQUEST::client_opaque, where it can be used by the customizable scheduler functions.
  • Mgr: Don't call Simple View specific periodic RPCs when BOINC is hidden or minimized.
  • client: show error messages (as notices) when get an error parsing cc_config.xml.
  • client: if an <exclude_gpu> element in cc_config.xml specifies a nonexistent app, show an error msg with a list of existing app names.
  • client: improve messages for the above.
  • Mgr: In CSimpleTaskPanel, change Update() to UpdatePanel() to fix compiler warning.
  • client: add some missing items to CONFIG::parse_options_client().
  • MGR: use wxBitMapComboBox insert and append calls without client data argument.
  • Remove include of boinc_cl.h from parse.h; it is no longer needed.
  • Remove Mac Availability Macro and weak-link support from cl_boin.ch
  • MGR: Fix button font sizes in Simple View Projects panel.
  • client: on network_available() GUI RPC, clear project-level upload and download backoffs, as well as RPC and individual xfer backoffs. This was an oversight.
  • MGR: In Simple View, draw Mac progress bar on white background for better visibility.
  • MGR: Adjust red New Notices ring for new button shapes if on Mac OS 10.7
  • MGR: const fixes for platform bitmaps. (From: Steffen Möller)
  • MGR: Add trace statements to help track down RemoveAt? bug
  • MGR: Remove static var guard, may not be needed with the SetDlgOpen() routines blocking timer based updates. If there is a buffer overrun hopefully it'll manifest itself in a detectable way.
  • MGR: Prevent crash, check returned pointer of menu entry.
  • MGR: Fix bad asserts.
  • MGR: Fix bad transparency in default project icon.
  • MGR: The asserts were correct; fix minor errors in calling code.
  • MGR: In Simple View, if deleting a task above the current selection, decrement the index of the current selection.
  • MGR: In Simple View, reload slide show when task selection changed.
  • MGR: In Simple View, sort Project & Task Selection Controls case-insensitive, fix bugs in MacBitmapComboBox.cpp
  • GUI RPC client lib: change setsockopt() for receive timeout to work on Windows. From Fred.
  • default screensaver: fix divide-by-zero; code cleanup.
  • client: fix errors in transferring RAM info between CAL and OpenCL. (bytes vs MB units, local/global terminology issue). From Oliver Bock.
  • default screensaver: fix build breaks caused by code cleanup above.
  • default screensaver: fix another divide-by-zero.
  • MGR: In Simple View, show institution, science area and description if task has no slide show.
  • MGR: Continue work on Simple View to display the description if task has no slide show.
  • In Simple View project descriptions, change all occurrences of "n" to "^n"
  • MGR: Complete work on Simple View to display the description if task has no slide show.

7.0.2

  • MGR: Better sizing of Simple View description text box.
  • Update Mac sandbox docs to explain need for executable project files to set executable-by-group bit.
  • Mac installer: revert to using a wrapper application around installer package.
  • Mac installer: for files in projects and slots directories, if the executable-by-owner permission is set, ensure that the executable-by-group bit is also set.

7.0.3

  • API and client: add "ncpus" field to APP_INIT_DATA.

Tells multicore apps how many cores to use. The --nthreads command line arg to the app is now deprecated though we'll keep it around for the time being.

  • client: isdigit() asserts if its arg is negative (which it can be). Call isascii() first.
  • GUI RPC lib: add some consts.
  • MGR: Increase the opacity of the panels to make the black text more readable.
  • client: when contacting a project for reasons other than work fetch (e.g. to report completed jobs) only request work if it's the project we would have chosen if we were fetching work.
  • client: the way in which project priorities were adjusted in work fetch to reflected currently queued work was wrong.
  • client: fix bug in the way project priorities are adjusted in RR simulator.
  • client: compile fix; remove redundant total_peak_flops()
  • MGR: eliminate "ghost" Notices window when running on Windows OS.
  • MGR: don't show "indeterminate" progress bar in Simple View.
  • client: if a file download was in progress at the time of an upgrade from 6.12 to 6.13+, it could get erroneously marked as an upload and get stuck forever. Problem: uninitialized member.
  • MGR: Scale the task pane in the advanced view to encompass the largest button.
  • Mac installer: revert to using a wrapper application around installer package.
  • Mac installer: eliminate use of WaitPermissions.app
  • Mac installer: revert branded build script for wrapper application around installer package.
  • Mac installer: for files in projects and slots directories, if the executable-by-owner permission is set, ensure that the executable-by-group bit is also set.
  • MGR: Eliminate spurious divider line in Simple View.
  • client: tweak parameters of file xfer backoff to reduce backoff intervals somewhat.
  • MGR: Add IE8-10 support for browser cookies when UAC is enabled. Use the supported API. It appears MS changed the cookie file format in their latest browsers which broke our hack. I have to leave the hack in for now because IE7 on Vista didn't expose the IEGetProtectedModeCookie API.
  • WINSETUP: Start BOINCMgr as a restricted process on Windows Vista+.
  • MGR: If CSkinIcon PNG file has an alpha channel, use it as mask and ignore any <transparency_mask> tag.
  • lib: encode CAL version numbers in a way that handles release #s > 1000.
  • client: tweak parameters of file xfer backoff to reduce backoff intervals somewhat.

7.0.4

  • MGR: in Simple View, localize institution, science area and description.
  • client: if we're trying to upload a file and it's missing, that's a permanent error.
  • WINSETUP: Copy the explorer primary token to get processes launched by the setup process to launch with reduced permissions.
  • MGR: Partial fix for wizard problem when a client automatically attempts to attach to an account manager via cookies. This fix is good enough for the 6.8 client. We'll need to do a little more for 7.x and beyond.
  • MGR: Continue partial fix for wizard problem when a client automatically attempts to attach to an account manager via cookies.
  • scheduler: if an app has only GPU versions, scale their PFC by 0.1 in credit calculations. This reflects the fact that GPU apps are typically less efficient (relative to device peak FLOPS) than are CPU apps. The actual values from SETI@home and Milkyway are 0.05 and 0.08.
  • MGR: Display project descriptions in Attach Wizard using wxTextCtrl instead of wxHtmlWindow to support screen readers.
  • Show localized project descriptions in Attach Wizard.
  • MGR: Fix horizontal sizing of text in Simple View project description.
  • API/client/manager: allow applications to supply a "web graphics URL", in which case the manager's "Show Graphics" button opens a browser at that URL. This typically would used for applications that implement a web server that serves pages showing job information in HTML.
  • add support for APP::needs_network flag. If set, don't run jobs for that app while network is suspended.
  • client: parse this flag and maintain in state file; do a job reschedule when network suspend state changes.
  • GUI RPC: add RESULT::network_wait flag; if set, this job is waiting for network access to be allowed.
  • Manager: display the above in task info add support for "web graphics URL" (see above).
  • client: parse message containing URL on graphics_reply channel and store in ACTIVE_TASK::web_graphics_url
  • GUI RPC: add RESULT::web_graphics_url
  • Manager: if web graphics URL is present, Show Graphics opens a browser.
  • remove some vestigial code for pre-V6 graphics.
  • make "needs network" a property of APP_VERSION rather than APP.
  • update_versions: support <needs_network> flag in version.xml

7.0.5

  • SCR: Remove last linger pieces of v5 backward graphics compatibility from the screensaver.

7.0.6

  • client: detect Windows HyperV Server 2008 R2 (from Crashtest).
  • client: increase the buffer sizes for retrieving cpu features on *nix type systems. The latest generation of processors blow past 256 bytes and vmx and svm are truncated.
  • client: shuffle disk usage code in preparation for disk accounting.
  • use new XML parser in some GUI RPC code.
  • WINSETUP: Introduce new BOINC setup packages which include VirtualBox

7.0.7

  • client: parse APP:non_cpu_intensive correctly. This got broken somehow.
  • client: don't crash if missing RSS feed file for some reason.
  • client: for VBox apps, check stderr for "ERR_CPU_VM_EXTENSIONS_DISABLED". If found, set HOST_INFO::p_vm_extensions_disabled, and pass this to the scheduler.

Note: if you have a host with VM extensions, and they're disabled in the BIOS, and you enable them, you can remove the <p_vm_extensions_disabled> line from client_state.xml and you'll be eligible to get multicore VM jobs again.

  • client: processor features buffer is supposed to be 1024 bytes. Avoid truncation.

7.0.8

  • WINSETUP: Give 'boinc_admins' and 'boinc_projects' the ability to access and launch the VirtualBox server-side application. This should complete the needed work to run VirtualBox within the Windows sandboxed environment.
  • WINSETUP: Remove the virtualized file system tag from the Windows Explorer copied security token when launching BOINC Manager and BOINC Tray after setup has completed. I believe this will resolve the new cookie issue experienced by PTP/GR/CE.
  • WINSETUP: Hookup new custom actions to the BOINC Installers.
  • client: compute projects' disk share (based on resource share). Report it (along with disk usage) in scheduler request messages. This will allow the scheduler to send file-delete commands if the project is using more than its share.
  • client: add <disk_usage_debug> log flag.
  • client: calculate disk share for zero-priority projects correctly.
  • client: Remove scaling factor for AMD OpenCL devices. Latest generation of drivers now report the correct memory size. They didn't wait for the next OpenCL spec change.
  • GUI RPC: use new XML parser.
  • client: Restore scaling factor for AMD OpenCL devices on Macs with OpenCL version < 1.2
  • Mac Installer: Changes for integrated BOINC+VirtualBox Mac installer.
  • MGR: Remove sash window divider between the task panel and list panel in the advanced view. Retain the ability to dynamically adjust the width of the task panel based on widest button.
  • LIB: Use parse string instead of copy contents for messages RPC.
  • MGR: parse message contents with XML_PARSER::element_content().
  • MGR: Derive from the correct base class to make the sizers work properly.
  • client: reset ACTIVE_TASK::bytes_sent and bytes_received when the task is started or restarted.
  • client: OpenCL 1.1 has no API for determining available GPU RAM, so if CAL is not present for ATI / AMD GPU or if CUDA is not present for NVIDIA GPU, set available GPU RAM equal to total GPU RAM.
  • MGR: first stab at improving Disk View colors.
  • MGR: debug Disk Usage colors.
  • MGR: When launching Mac client as a daemon, allow time for it to start.
  • client: use old Mac idle detection when running as a daemon.
  • MGR: Launch the RDP client on Windows in full-screen mode to avoid a bug where the screen doesn't refresh and keyboard/mouse events don't manifest until you close down the client and restart it.
  • MGR: Add RDP client support for the Mac.
  • GUI RPC: add <xml> tag to the start of HTTP replies.

7.0.9

  • client: identify ATI 97x0 GPUs (from Jord).
  • GUI RPC client: don't write spurious messages to stderr.
  • MGR: Use rdesktop-vrdp on Linux, it is included with VirtualBox and meant for what we are trying to do.
  • MGR: Remove the fullscreen flag on Windows. It might only be my machine which has refresh problems when launching in windowed mode.
  • client, lib: Improve available GPU RAM detection, include it in display of GPU description.
  • client: Add logging message for insufficient GPU RAM details to coproc_debug flag.

7.0.10

  • Mac: In permissions error alert: show branded name and path to bad file or subdirectory.
  • client: Save all CUDA and CAL GPU info until done with OpenCL detection for use in OpenCL GPU descriptions.

7.0.11

  • lib: recent checkin broke strip_whitespace(string&).
  • client: add debugging aids to coproc_detect logic.
  • client: ATI available RAM is in bytes, not MB; if no CAL, don't divide by MEGA.

7.0.12

  • Manager: in project web links, use "Home Page" instead of the project name (which could be very long).
  • client: parse HOST_INFO::p_vm_extensions_disabled correctly.
  • Mac installer: under OS 10.4, create boinc_master and boinc_project at IDs starting at 25 instead of 501.
  • client: Show GPU number in "GPU is OpenCL-capable" message.
  • OpenCL: workaround for GPUs reported by CUDA but not by Mac OpenCL.

Problem: Mac OpenCL does not recognize all NVIDIA GPUs returned by CUDA. Since there is no CAL for Mac, this is not an issue for ATI / AMD GPUs. On other platforms, the CUDA and CAL drivers also provide OpenCL support, so we don't expect the problem there.

Solution: I believe that CUDA and OpenCL return identical GPU model names for the same GPU, and that both return the GPUs in the same order (but with some possibly omitted from the OpenCL sequence.) We use that information to correlate the OpenCL data with CUDA data. We use our internal CUDA device_num for the corresponding OpenCL device, but add a new field opencl_device_index; the two fields are equal unless we have CUDA devices not recognized by OpenCL. We add a new array opencl_device_indexes[] to the COPROC struct, corresponding to the entries in device_nums[].

The init_data.xml file now has a new field gpu_opencl_device_index. If this field exists, the boinc_get_opencl_ids() API uses this to find the cl_device_id and cl_platform_id, otherwise it continues to use the value in gpu_device_num.

  • Client: add a mechanism for restartable download of compressed files. (It turns out that the compression schemes supported by Apache and libcurl, surprisingly, aren't restartable.)

If a <file_info> from the server contains <gzipped_url> tags, use those instead of the <url> tags, and flag the file as "download_gzipped". If this is the case, download NAME.gz and save it as NAME.gzt. When the download is complete, rename NAME.gzt to NAME.gz, and uncompress it to NAME. (this ensures that if NAME.gz is present, it's complete). Also do the uncompression, if needed, in verify_file(). This ensures that the uncompression will eventually get done even if the client quits are crashes in the middle.

  • client: add a mechanism for restartable download of compressed files.

(It turns out that the compression schemes supported by Apache and libcurl, suprisingly, aren't restartable.) If a <file_info> from the server contains <gzipped_url> tags, use those instead of the <url> tags, and flag the file as "download_gzipped". If this is the case, download NAME.gz and save it as NAME.gzt. When the download is complete, rename NAME.gzt to NAME.gz, and uncompress it to NAME. (this ensures that if NAME.gz is present, it's complete). Also do the uncompression, if needed, in verify_file(). This ensures that the uncompression will eventually get done even if the client quits are crashes in the middle.

  • sched: adjust the vbox??_mt plan classes to use 1.5 CPUs instead of the full 2 CPUs. Vboxwrapper uses ceil() to allocate enough whole CPUs for Virtualbox. Ideally this will cause the BOINC client-side scheduler to use the remaining fraction of the CPU for GPU data transfer which will then free up one whole CPU for another job. All without over-commiting anything.
  • GUI RPC: switching to the new XML parser (which won't parse a double as an int) revealed a type mismatch in FILE_TRANSFER::next_request_time between client and server.
  • client: fix divide-by-zero bug in calculation of priority of projects with zero resource share.
  • MGR: Tweak the z-order of BOINC Manager owned windows a little bit. Imagine a case where BOINC Manager and the BOINC Manager event log live side-by-side or only slightly overlapped, and the user wants to use a full screen/maximized window. If we then bring the BOINC Manager window back into focus while that app is still running make sure the event log comes forward as well. The event log should appear behind the main window in the case they are overlapped.
  • client - Remove Mac OSX 10.3.9 hack, it is no longer needed.
  • Mac: If permissions error because unable to opendir() a subdirectory, show path to that subdirectory.
  • client: treat the gzt file extension like we do for the gz file extension. Disable libcurls ability to decompress on-the-fly and let the CC decompress it after it has been fully downloaded.
  • client: when deleting a file, check for .gzt and .gz variants as well.
  • client: bug fixes in gzipped download code.
  • client: undo my previous commit. We request .gz from the server and write the contents to a .gzt file.
  • client: Fix long standing issue with the .gz extension automatically being decompressed on-the-fly when it wasn't supposed to be.
  • MGR: Fix sizes of task panes and buttons, elapsing button text if needed.
  • update_versions: for gzipped files, send the size of the compressed file as well.
  • client: parse and write the compressed size (FILE_INFO::gzipped_nbytes). For get_transfer GUI RPCs, if it's a compressed download send the compressed size. That way the manager will show the fraction done correctly.
  • client: disable temporary debugging aids in coproc_detect logic.
  • client: fix write of gzipped_nbytes.

7.0.14

  • client: after a gzipped file is downloaded, we uncompress it and then verify it. The latter involves computing its MD5, which reads the entire file. Combine these 2 steps so that the MD5 is computed as the file is uncompressed, eliminating the need to read the file again.
  • Mac: Update the build instructions with the current URL for c-ares-1.7.4.
  • MGR: If CPU or GPU is suspended from Activity Menu, change "Snooze" to "Resume" in system tray menu.
  • client: always remember previous CPU and GPU activity settings.
  • MGR: in Disk View, try to make colors more distinct. In addition to varying the hue, cycle through 3 different luminance values (.5, .7, .9).
  • MGR: in tooltips for Project/Task buttons, don't prepend "button name: "; add a tooltip for Home Page button.
  • MGR: Disable new "Resume" items in system tray menu if modal dialog is open.
  • screensaver coordinator: use new XML parser.
  • client: Because available GPU RAM value is unreliable, don't defer scheduling a task based on insufficient GPU RAM. For now, the relevant code is guarded by a "#define DEFER_ON_GPU_AVAIL_RAM 0" so we can easily restore it if we find a reliable way to get the value of available GPU RAM periodically.

NOTE: we are still sending this unreliable value to project servers in the sched_request file. Does it make sense to do so?

  • MGR: change text for buffer-size fields in advanced prefs dialog.
  • Fix job scheduler problem:

Old: RR simulation marks some jobs as missing their deadline, and the job scheduler runs those jobs as "high priority". Problem: those generally aren't the ones we should run.

E.g. if the client has a lot of jobs from a project, typically the ones with later deadlines are the ones whose deadlines are missed in the simulation. But in this case the EDF policy says we should run the ones with earliest deadlines.

New: if a project has N deadline misses, run its N earliest-deadline jobs, regardless of whether they missed their deadline in the sim. Note: this is how it used to be (as designed by John McLeod). I attempted to improve it, and got it wrong.

  • Fix cookie detection problem in IE9/IE10 when UAC is turned on.

7.0.15

  • client: first pass at async file copy feature. When a large file is copied from a project dir to a slot dir, it's copied in chunks, interleaved with other polling activities such as GUI RPCs. That way the manager doesn't freeze while large copies (e.g. VM images) are happening.
  • client: add async file copy stuff to Windows project file.
  • client: debug async file copy. Seems to be working.
  • client: add async file copy stuff to Xcode project.
  • SCR: Fix Xcode editor problems from recent screensaver.cpp changes.
  • client: intermediate checkin for async file verification.
  • client: Fix compiler warning generated by above checkin.
  • client: Undo my change of 24 Jan 2012 (25144) which broke WCG's use of the .gzb file extension. I was wrong in how I read the conditional and it turns out that libcurl does not honor the content-encoding even if it is capable of supporting it. My bad.
  • async verify.
  • client: tweaks to AMD GPU detection msgs.
  • client: async file stuff.
  • async decompress/verify seems to be working.
  • client: remove "GPU n is OpenCL-capable" messages. They were redundant with new OPENCL_DEVICE_PROP::description() and were confusing because they only listed the "best" CUDA / CAL GPUs.
  • client: HTTP range request errors are permanent.
  • async file stuff. mostly working. still a few bugs.
  • client: async file stuff:

-- set threshold at 10 MB for doing things asynchronously.
-- don't count VERIFY_PENDING as failure.

  • client: Fix bug in setting opencl_device_index.
  • client/MGR/GUI RPC: clean up RPC stuff involving resource-specific backoff and exclusion.

Old: client writes

       <rsc_backoff_time>
       <rsc_backoff_interval>
       <no_rsc_ams>
       <no_rsc_apps>
       <no_rsc_pref>

in GUI RPC entries for projects. Manager (GUI RPC client): PROJECT struct has

       cpu_backoff_time
       cpu_backoff_interval
       ... cuda, ati
       no_cpu_pref
       ... cuda, ati

and it parses tags of these names. In other words, no information is being conveyed from client to Manager.

New: manager parses both form.

  • bug fixes to previous checkin.
  • client: fix bug in async file verify.

File verify is done in 4 places: -- after a download finishes. -- transition result to DOWNLOADED. -- if project->verify_files_on_app_start, on app start Use asynchrony only in the first 2 cases, since the async logic is set up to mark the file as PRESENT when done, not to restart a task.

  • client: bug fix for async file ops: set up files in slot dir when starting an app, whether or not it's the first time.
  • client: on startup, check file size as well as existence.
  • client: add <async_file_debug> log flag.
  • client: do decompress (both sync and async) to a temp file, then rename.
  • client: if a file's status is VERIFY_PENDING on startup, set it to NOT_PRESENT; that will trigger a verify.
  • client: do async copy only if size is above threshold.
  • client: fixed a bug in procinfo_app() that would cause processes to be treated as non-BOINC when they actually are, thus falsely triggering CPU-busy suspensions.
  • client: if file is wrong size on startup, delete it.
  • client: only check file size if the FILE_INFO specifies it.
  • Mac: Add note that files and subdirectories in Mac slots and project directories must have group permissions set.

7.0.16

  • client (Unix): don't print misleading "task exited with no finish file" message if task actually called boinc_temporary_exit().
  • client: If OpenCL but no CAL or no CUDA, copy GPU model name from OpenCL.
  • MGR: On Mac, ensure any modal dialog remains in front when Manager is activated.
  • client: zero PROJECT::last_upload_start on reset, so that we can fetch work immediately.
  • client: in PERS_FILE_XFER::create_xfer(), check for already-existing file before seeing we're allowed to start a new xfer.
  • client: in PERS_FILE_XFER::create_xfer(), if an async verify is in progress, mark PERS_FILE_XFER as done.
  • client: message tweak.
  • client: Try to fix incorrect NVIDIA device number in OpenCL descriptions.
  • MGR: Update <organization_*> tags in 3 branded skins (GR, PtP, CE) to new values from Matt Blumberg.
  • Mac sandbox: Don't check permissions of project-created subdirectories under project or slot directories.
  • Update Translations.
  • client: instead of saying "comm deferred", say "project backoff XXX.XX".
  • client: more tweaks to work-fetch messages.
  • lib: change get_mac_address() to avoid sprintf(buf, "%s...", buf); use strcat instead.
  • client: don't use get_mac_address() to create host CPIDs (we have plenty of other info to make them unique).
  • client: fetch work from backup (zero resource share) projects only if a device instance is idle.
  • client: Remove some temporary debugging code.
  • client: Always use GPU model name from OpenCL if available for ATI / AMD GPUs.
  • client: fix bug where WCG downloads were getting wrong size errors. To be honest, I don't know that the problem was or why my change fixed it.
  • client: Prevent an unlikely but possible crash.
  • MGR: Fix a Mac-only bug which showed Event Log if About BOINC is selected from task bar menu when BOINC is hidden.

7.0.17

  • Mac: Fix back trace to work under OS > 10.5.
  • client: Fix OpenCL NVIDIA GPU detection when CUDA is not present.
  • client: tweak to work-fetch policy:

If we're making a scheduler RPC to a project for reasons other than work fetch, and we're deciding whether to ask for work, ignore hysteresis; i.e. ask for work even if we're above the min buffer (idea from John McLeod).

  • client: fix bug in notices where, after a notice is deleted, the notices tab refreshes once/second forever after.

7.0.18

  • client: message tweaks.
  • MGR/client: fix bugs in GUI RPC that prevented updates to proxy info from being saved by client.
  • MGR: compile fix.
  • client: define a "arrived-first" order on results in which the tiebreaker is MD5 of name. That way the order is stable (it doesn't change from one run of the client to the next) and it doesn't grep results with similar names (and hence for the same app).

This ordering is used for

1) the order of display in the manager
2) the job scheduler's notion of FIFO
  • client: Fix OpenCL NVIDIA GPU enumeration bug I introduced with last checkin.

7.0.19

  • Mac installer: Update copyright notice from 2009 to 2012.
  • client: change the job scheduling policy for MT jobs.

The old policy avoided running an N-CPU job unless N CPUs were free. This could result in idle CPUs for long periods; for example: on a 4-CPU machine, suppose you have a long 1-CPU job in EDF mode, and some 4-CPU jobs. 3 CPUs will be idle until the 1-CPU job finishes. Furthermore, the work fetch mechanism won't try to get jobs (possibly non-MT) from other projects, because the RR simulation doesn't reflect the scheduling policy's exclusion principle.

The change: schedule jobs until ncpus_used >= ncpus. E.g. in the above situation run the 1- and 4-CPU jobs together. In extreme cases we might run 3 1-CPU jobs and the 4-CPU job. This will degrade the performance of the 4-CPU job, but that's probably better than having idle CPUs.

  • API, client, and Manager: add an optional "reason" argument to boinc_temporary_exit(), explaining why the app is exiting. Convey this to the client, and then to the Manager, and display it there and in the log.
  • client win compile fix.
  • client: fix an instance of sprintf(buf, "%s...", buf) on Unix.
  • API: fix compile error on Mac.
  • client: When available, use total RAM value from CAL for all ATI OpenCL GPUs, not only for the "best" GPU.
  • MGR: Rename the "Remaining" column to "Remaining (Estimated)" in the Advanced GUI/Work view.
  • Mac installer: Create RealName field for users boinc_master and boinc_project and set it to empty string.
  • client: amend checkin of 18 Feb ([trac]changeset:25291[/trac]) to not request work if work buffer is above upper limit.
  • client, web: change default prefs to min_buf=.1 days, max_buf=.5 days.
  • MGR: Change strings in Simple View to match changes in Advanced View: "Remaining" -> "Remaining (Estimated)", "Home page".
  • client: On Mac only, get ATI RAM sizes from OpenGL.
  • client: fix crashing bug when there is 1 instance of a resources. I'm not sure how this every worked.

7.0.20

  • Mac installer: Utility shell script creates RealName field for users boinc_master and boinc_project and sets it to empty string.
  • Manager: small code cleanup.
  • Manager: in Project Properties page, show if a GPU type is excluded by configuration.
  • client: don't fetch work for a resource type if all instances of that type are excluded.
  • typo fix.
  • Quick Updates.
  • Update Translations to v7 compliancy.

7.0.21

  • client: code cleanup (no functional change).
  • client: message tweak.
  • msg tweak and fix compile warnings.
  • client: fix compile errors.
  • client: call some Mac coproc_detect debugging code only if coproc_debug flag is set.
  • MGR: fix French translations of Remaining (estimated).
  • client: When comparing ATI model names from OpenCL and IOKit on a Mac, substitute "AMD" for "ATI".
  • client: On Mac only, update ATI available RAM after getting ATI total RAM size from OpenGL.
  • client: on each scheduler RPC, make sure that files flagged as executable in the reply, and that are present, are actually executable.
  • client: when killing a task, don't delete its shmem or change its state. These mess up the logic for dealing with exited processes.

7.0.22

  • client: Increase the quit request timeout from 10 seconds to 60 seconds for machines running VMs and slow disk drives. It should give the VM enough time to gracefully shutdown and not give boinc reason to kill the wrapper.
  • client: use %g to format job resources (#CPUs, #GPUs). This suppresses trailing zeroes and (if integer) the .
  • client: changes to job scheduling policy:

- fix bug that could greatly overcommit CPUs if there are several EDF jobs and several non-EDF GPU jobs. - don't overcommit CPUs if any job is MT (MT means avg_ncpus > 1). For example, on a 4-CPU machine we will run:
-- a 0.5-CPU GPU job and 4 1-CPU jobs, but not a 0.5-CPU GPU job and 1 4-CPU job.

  • MGR: Fix a Mac-only bug which sometimes failed to show the snooze icon.

7.0.23

  • client: job scheduling policy tweak: if CPUs are fully committed (e.g. with EDF jobs) allow GPU jobs but only up to CPU usage of ncpus+1.
  • client: Don't include VBox executive processes as non-BOINC CPU time. On some systems they use significant CPU time while VMs are running.

TODO: do this only if we're actually running a VBox app

  • client: if an app process exits because of a signal, don't show the "no finish file" message; not sure why this was there in the first place.
  • client: if an app process exits because of a signal, show the signal correctly.
  • client: report completed results if a time-of-day network suspend is scheduled within the next 30 minutes.
  • client: Initialize buffer which is used to hold the temporary exit reason. If somebody didn't populate the reason when calling boinc_temporary_exit the buffer contained junk.
  • client: set file ownership and permissions after an async verify. This was presumably the cause of the recent Einstein@home problem.
  • client: set file ownership and permissions after an async copy.
  • client: set file ownership and permissions after a regular (non-async) copy. The latter 2 bugs would affect a VM app that copies its executable to slot/x/shared.
  • client: change timeout for job quit/abort from 60 back to 15 (time between sending app a quit/abort message and, if not exited yet, killing it)
  • client: if app has reported an "other PID" (e.g., vboxwrapper reports the VBoxHeadless PID) then include it (along with descendants) in the list of processes we kill when killing the job.

7.0.24

  • client: small bug fix in work_fetch.
  • client: if a job calls boinc_temporary_exit() 100 times, abort it. Otherwise it could keep doing it forever (e.g. if there's not ever enough available GPU RAM.
  • client/server: estimate FLOPS for NVIDIA GPUs with compute capability 3.x. Not sure if the parameters are right (128 cores/proc, 2 flops/clock) but they're better than nothing.
  • compile fix for redhat, from Steffen Moller.
  • client: report results if CPU suspend pending in next 30 min.
  • client: set PROJECT::last_upload_start whenever an upload starts, not just when a result becomes ready to upload. Fix bug where a scheduler RPC to report results is done even though uploads are active.
  • client: cpu_sched_debug enables messages about not scheduling jobs because of insufficient RAM.
  • client/server: set cores/proc for NVIDIA compute capability 3.0 to 192 Why can't NVIDIA provide an API for this?????
  • client: fix typo that prevented GPU jobs from running if CPUs were filled with EDF jobs.
  • client: fix bug where if we sent app a <quit> message, and it timed out and we killed it, we'd treat it as a job error. (This was a major bug).
  • API: remove BOINC_STATUS::suspend_request. I meant to do this before.
  • client: fix bug in reading reason for temporary exit.
  • client/scheduler: fix error in NVIDIA peak flops calculation.
  • Mac installer: When checking for duplicate group membership entries, count only whole words.
  • Mac uninstaller: Use Directory Services to find the user names of all human users instead of stepping through the entries in the /Users directory.
  • client: Fix idle detection during fast user switching.

7.0.25

  • Mac MGR: Revert my changes of 18 March to Mac Task Bar Icon; always call the same instance of CTaskBarIcon::SetIcon()

7.0.26

  • client: change some unsigned int to size_t in our versions of NVIDIA APIs. This apparently caused crashes (in app, not client, which I don't understand) for Einstein@Home. From Steffen Moller.
  • client: don't write deviceHandle to NVIDIA XML description. Um, pointers don't have any meaning outside the process.
  • client: if we fetch a master file and it contains no scheduler URLs, show a message of class INTERNAL_ERROR.
  • client/scheduler: make CUDA_DEVICE_PROP.totalGlobalMem a double, and remove dtotalGlobalMem. Although NVIDIA reports RAM size as a size_t, there's no reason to store it as an integer after that.
  • client: add PID to random stuff used to make host CPID, in case running multiple clients on same host.

7.0.27

  • client: only send active tasks in get_simple_gui_info GUI RPC.
  • client: remove <std_debug> log flag.
  • client: remove <zero_debts> config option.
  • components under Windows, Update copyrights.
  • client: add <suspend_debug> log flag.
  • client/server: remove assert()s from message log code.
  • MGR: Show() does not restore the window state from a minimized state. Use maximize(false) to handle that situation.
  • client: fix bug that could erroneously cause a GPU to be "blocked by config file".
  • client: fix function prototypes for CUDA detection.
  • Added NVIDIA GPU platform detection to boinc_get_opencl_ids_aux()
  • client: fix bug that caused a project's jobs to all be run EDF if the project has the <dont_use_dcf> flag set.
  • WINSETUP: Fix long standing installer bug where we were attempting to add the boinc_master account to the boinc_admins group when installing in the non-service install mode. boinc_master is only created during service installs. This was causing a setup failure on Windows 8. As far as I can tell it should have also been failing on Win7 and Win Vista.
  • update_versions: eliminate PHP warnings when no version.xml file.
  • client: when showing how much work a scheduler request returned, scale by availability (as is done to show the amount of the request).
  • client in account manager request, <not_started_dur> and <in_progress_dur> are in wall time, not run time (i.e. scale them by availability)

Note: there's some confusion in the code between runtime and wall time, where in general wall time = runtime / availability. New convention: let's use "runtime" for the former, and "duration" for the latter.

  • client: fix crashing bug that happened when a scheduler reply had a parse error, and it included project files. While parsing the scheduler reply we'd add FILE_REFs to PROJECT::project_files, but wouldn't link them to FILE_INFOs since this is done only if the reply parses correctly. The next garbage_collect() would dereference these NULL pointers.

Solution: parse the FILE_REFS into SCHEDULER_REPLY::project_files. Copy this to PROJECT::project_files only if the reply parses.

  • Bad logic in Win code:
if you have
     *pbuf = HeapAlloc?(...)
then you need
     if (*pbuf == NULL)
not
     if (pbuf == NULL)
  • various code cleanups from Steffen Moeller.
  • client: enforce <no_gpus> in config file not just at startup, but also when config file is re-read.
  • A first attempt to fix the bug where apps die with exit(1) (whereas they didn't do this w/ older clients). On Windows, the client uses TerminateProcess?(h, 1) to kill processes; the 1 is the exit code the process will appear to have.

So instead, add a "will_restart" bool arg to the various kill functions, and if set use 0 (= STATUS_SUCCESS), otherwise use EXIT_ABORTED_BY_CLIENT.

Note: in principle this shouldn't make any difference for quitting tasks, since handle_exited_app() checks for task state QUIT_PENDING and ignores the exit code in that case. The only place I can see where it would make any difference is when we kill a process because it hasn't been handling queued shared-memory messages for 180 seconds.

  • client: add more info to the message about an exited app.
  • client: function return values (ERR_*) are different from process exit codes (EXIT_*). But in many places we were using return values as exit codes. Fix these. Also, break out the different types of limits a job can exceed (time, disk, memory) into difference exit codes.
  • compile fix.
  • WINSCR: Use the DefProcHandler? function when processing WM_CLOSE/WM_DESTROY window messages. In effect, let Windows do the default thing. This removes the hacks which kept the screensaver running with old versions of Microsoft's keyboard/mouse driver software installed.
  • client: if acct mgr sends us an account with no authenticator, show an error message instead of trying to attach.
  • client: code cleanup. Move RESULT and PROJECT to separate files.
  • client: minor code shuffle.
  • client: if an app version needs OpenCL/CUDA/CAL, make sure that the GPU supports it (fix bug where sometimes, e.g. CUDA detection fails but OpenCL succeeds, and we have a CUDA app).
  • Mac: Update XCode project with new source files.
  • Manager: message tweak.
  • Add new files to Win project.
  • Mac installer: changes for OS 10.8 compatibility.

7.0.28

  • Mac installer: changes for OS 10.8 compatibility. (fix)
  • client: fix bug where coproc name could be set incorrectly when:

a) there are multiple GPU vendors b) one of them is detected via OpenCL but not "native" (CUDA/CAL)

  • lib: added function secs_to_hmsf() which converts (double) seconds to a string 0h00m00s00.
  • C++ code: use MAXPATHLEN for char arrays that hold paths.
  • Windows compile fixes.
  • lib: Fix a bug where information that was meant for stdout was being written to stderr instead.
  • lib: Keep track of the rough estimate of stdout and stderr by incrementing internal variables instead of doing a stat on each log write. stat() on Windows is converted to a FindFirstFile?() call which in turn looks up the file size information in the directory structure file system entry. The directory structure information is only updated periodically. This lead to larger than expected log file for both the manager and core client.

This has the added advantage of reducing the overall number of file I/O operations when logging information.

  • MGR: Eliminate QuickDraw calls for OS 10.8 compatibility.
  • diagnostics lib:

- Store file sizes as double rather than int - If we're appending to log files, initialize the size variables to the current size.

  • lib: down case processor features.
  • check return value of fprintf, only increment size if it's +
  • when rotate log file, reset size var to zero.
  • MGR: Add OpenCL icon to the ProjectInfo wizard page.
  • MGR: Fix the icon we use to represent OpenCL.
  • client: Update the stock all_project_list.xml file we send out with new client software.