Change Log 7.6.22 - 7.6.23 (February 24, 2016)
From BOINC Wiki
- Preliminary Change Log 7.6.22 -> 7.6.23
- client: AMD decided to put the more descriptive version of the GPU name in a custom extension, so use the custom attribute to get the board name.
- lib: Add more OpenCL defines and HTTP references to the extension documentation.
- lib: Add defines for Nvidia specific OpenCL extensions. To be used later.
- client: acct manager fixes.
- • honor suspend flag for first-time attaches.
- • do initial RPC even if suspended (to get project name etc).
- client: fix parsing of finish file on Win; caused spurious messages.
- boinccmd: fix spurious error msg.
- client: don't count user or project files in transfer limit. We don't want stalled downloads of project image files to block the downloading of job input files.
- client: Do not attempt to use the board name device attribute for AMD devices if it is empty, like in the case of AMD OpenCL CPU devices.
- client: fix spurious error message.
- client (Linux): Reinstate XScreenSaver API-based idle detection on GNU/Linux.
- Adjusting the failure behaviour of xss_idle to report idle rather than busy, and send a message to the Event Log that X-based idle detection is disabled. Also changed how to handle the 'Always' definition conflict with X.h.
- Revamped the idle detection after pouring over documentation. This new code should be able to handle all local Xservers as they come and go. Issue with permitting access to Xservers from boinc user resolved (see comments; package managers may include appropriate file in /etc/X11/Xsession.d/, otherwise boinc ignores inaccessible DISPLAYs). Pushing for CI checks. Not finished though. This commit has generic debug output that would clutter the event log. I want to add a debug flag and only dump this (noisy, once-per-second) output if the user explicitly asks for it via configuration file.
- Reinstate and Improve XScreenSaver Idle Detection.
- The set of commits on this pull request: https://github.com/BOINC/boinc/pull/1453 first reinstated previously existing code to utilize the XScreenSaver (XSS) X extension when determining a system's idle state (there was also additional DPMS code that was not reinstated).
- The code would attempt to open a connection to the display at the client binary's DISPLAY environment variable and, if unable to connect, always report busy (undesirable).
- The original motivation for reinstating this code was that the remaining idle detection mechanisms did not detect mouse or keyboard movement if an Xserver was responsible for them. Only activities in terminals were detected. Through the course of extending and improving this code, the following changes have been made:
- • As per "man Xserver", each local Xserver should have a socket file at standard location /tmp/.X11-unix/ with standard naming scheme "Xn", where n is the number of the DISPLAY. This code will open this directory and parse its contents for open DISPLAYs, adding them to a vector for later interrogation of idle time by xss_idle. If no DISPLAYs were found, a static guess-list from DISPLAY :0 to DISPLAY :6 is set and interrogated.
- • xss_idle uses the XScreenSaver X extension's API, as documented at "man 3 xss". Certain checks are performed to determine if the X server is accessible, and if so, whether it has the XScreenSaver extension. If it does, then we obtain information on the DISPLAY's idle time and determine whether the Xserver is idle or not.
- • The user running the boinc client (typically the "boinc" user for most distributions), must have access to the Xserver for XSS idle detection to work. Dropping an appropriate file in /etc/X11/Xsession.d/ (Debian flavours) or /etc/X11/xinit/xinitrc.d/ (Fedora and others) should permit Xservers to run something like "xhost +SI:localuser:boinc" on start. If the boinc client cannot access an Xserver/DISPLAY, it simply skips it and treats it as though it is idle. If no DISPLAY is accessible, then xss_idle is effectively passed through --xss_idle will report the system as idle-- and idle detection is left to other mechanisms.
- • A debug logging flag "idle_detection_debug" was added. If this flag is defined in the cc_config.xml file as "1", then verbose debugging information related to boinc's idle detection determinations is provided to the Event Log. This logging flag may also be utilized by other components of idle detection as/if needed/desired.
- Mac: update build scripts, Xcode project and build instructions for new third party libraries curl 7.46.0, openssl 1.0.2e, sqlite 3.9.2, FreeType-2.6.2.
- client: Properly calculate the peak FLOPS of new AMD GPU(s) that only support OpenCL.
- Use AMD's vendor specific extension if it is available to calculate the total number of shaders and determine the peak FLOP rate from that.
- Rom: My new GPU I got for Christmas was only reporting 30% of its peak FLOP rate and does not support CAL.
- client: add simd_instruction_width to the peak FLOPS calculation.
- A small attempt at future proofing things. The value is 1 on my new GPU, but might not be on higher end cards. Docs implies it should be part of the calculation.
- client: Remove wavefront detection from AMD OpenCL code path, it isn't used to calculate GFLOPS.
- client: Add compute capability detection for Nvidia OpenCL devices.
- client: Adjust the peak flop estimate for Nvidia GPUs when detecting them with OpenCL.
- client, Win: fix problem if ^Z appears in user-defined fields.
- A user had entered a string in one of the project prefs image URL fields containing ^Z. Windows treats this as EOF and the parse of the scheduler reply fails.
- Solution: open the scheduler reply file in "rb" mode rather than "r".
- WINBUILD: Update to VirtualBox 5.0.12
- client: Update commits cf3bbbf & 2cc39ab: when Mac is booted, it can take over 120 seconds before system extension CUDA.kext is loaded (fix occasional failure to recognize CUDA devices when BOINC is launched automatically at login before CUDA has initialized at system boot.)
- locale: Update compiled localization files.
- VBOX: Fix header search path errors in Mac Xcode project (port commits c86e8f9 and f707a7e from master).
- lib, Unix: remove chown/chmod stuff from boinc_copy().
- boinc_copy() is used in both client and server. The chown/chmod was added Jan 6 2009, apparently to deal with a client problem. More recently, error checking was added to the chown/chmod calls. On the server (e.g. sample assimilator) these fail, and boinc_copy() returns error (even though the file was actually copied).
- 1) let's not overload functions. Functions in general should do 1 thing. To this end, I moved the chown/chmod to a new function, boinc_copy_attributes().
- 2) It's not clear to me that we need the chown/chmod stuff, either on client or server. On the Unix client, we already have FILE_INFO::set_permissions(), which sets the rwx bits of files copied into slot directories, as appropriate. The chown() will be a no-op, since the client creates both the original file (in project dir) and the copy.
- David: So I'm not going to call boinc_copy_attributes() in the client. Let's see if any problems arise in Unix with apps that used <copy_file> for executables.
- client: Replace a strncpy with strlcpy. Fixes: CID 122367
- Replace strncpy() with strlcpy() various places.
- Except for very specific cases, strncpy() should never be used. It can result in a non-terminated string.
- Also replace strncat() with strlcat(); the latter is simpler because you don't have to calculate remaining buffer space.
- Use HTTPS for version check and download page URLs.
- Prevents MIML attacks; doesn't prevent hacked BOINC server. Would need offline signing for that.
- Use HTTPS also for network test URL, and for WCG custom URLs
- client: reduce delay restarting tasks after exclusize app exits.
- There was a 20-30 second delay between exclusive app exit and resuming tasks. This was excessive. Reduce it to 5-15 sec (uncertainty is because we check exclusive apps every 10 sec)
- client: if suspending because we're on batteries, don't suspend NCI tasks. (which don't use significant power)
- Build: remove --disable-wx-debug
- WxWidgets switched to using -DNDEBUG to disable debugging in version 2.9.1 and enabling it by default. My previous change (530eb18) made the debug version the default and one had to disable the debugging for release builds. This is fixed now and the non-debug version is the default. Now WxWidgets debug assertions are switched on if --enable-debug is specified. Fixes issue #1476
- XSS Idle Detection Bugfix (XCloseDisplay)
- Apologies. My initial code didn't close the connections to the X displays after opening them. I had thought that falling out of scope would close the connection automatically. However, thanks to a bug report by Dan Merillat that I was able to replicate, I now know better: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812835
- This simple adjustment closes the connection to the display (if a connection succeeded in the first place; if XOpenDisplay() failed, it returns NULL and there is no connection). Testing on my end shows that this resolves the issue of the boinc client piling up new connections to X servers.