BOINC Resource Allocation

Discussion in 'Distributed Computing' started by crashtech, Mar 2, 2017.

  1. crashtech

    crashtech Diamond Member

    Joined:
    Jan 4, 2013
    Messages:
    6,918
    Likes Received:
    320
    I have some machines with lots of cores that I would like to continue to use mostly for CPU-only projects, but also to utilize for GPU computing. Each GPU task usually takes anywhere from less than one core to most of two cores, depending on the hardware and project, so on a machine with 12 cores, having at most 2 cores dedicated per GPU and the rest to a different, CPU-only project would seem closer to ideal than a 50/50 split. But so far, I have not found a way to configure the BOINC manager within a local machine to allocate resources differently other than an even split between projects. The reason I don't want to configure globally using individual project websites is because some of my machines have few cores and are dedicated completely to GPU tasks, while others have many cores and need to work on multiple projects. CPU allocation must be tailored specifically to the local machine's current configuration.

    Is there a way to change the percentage of cores allocated to each project within the local BOINC manager?
     
    Smoke likes this.
  2. Loading...

    Similar Threads - BOINC Resource Allocation Forum Date
    Win10 Pro 64-bit CU, Kepler 384SP GT630/730 1GB DDR3, BOINC PrimeGrid, "computation error"? Distributed Computing Jun 4, 2017
    BOINC COMBINED Report Distributed Computing May 24, 2017
    Strange notification in BOINC manager from SETI Distributed Computing Apr 28, 2017
    8th Annual BOINC Pentathlon Distributed Computing Apr 7, 2017
    Reallocating Resources Distributed Computing Feb 11, 2009

  3. StefanR5R

    StefanR5R Senior member

    Joined:
    Dec 10, 2016
    Messages:
    589
    Likes Received:
    231
    I as the resident n00b have so far only tested how to mix CPU tasks from two BOINC projects on the same machine. (And a mix of F@H GPU tasks with BOINC CPU tasks, which is trivial compared to what you are asking for.) From my first CPU + CPU attempts, I have learned:
    • You could create per-machine configs via the projects' web preferences: Create/ edit "locations", then assign the respective machine to the appropriate "location". WCG calls them "profiles".
    • But I'm afraid this won't give you the degree of control over CPU allocation that you want. The BOINC task scheduler looks at the resource percentage that you gave each project, and at the work that was already done for each project recently, and at the deadlines of pending work, and will then decide how many tasks from which projects to start.

      The aim of the algorithm embedded into BOINC's task scheduler is to achieve the configured resource utilization percentages not immediately, but in the long term, while coping with what work had been downloaded into the task queue, and while trying to obey the deadlines of all pending tasks.
    • I attempted to micro-manage the CPU + CPU mix via app_config.xml, by means of the max_concurrent tag. This only caused the task scheduler to under-utilize the machine. The project which it considered more urgent, and which I attempted to downgrade via max_concurrrent, did get the number of CPU cores according to what I forced in max_concurrent. But the other project, which the task scheduler deemed to be of lesser priority at that time, did only get less than the remaining spare CPU cores.
    The BOINC Wiki contains some explanation of the BOINC task scheduler:
    BOINC 7 CPU + GPU scheduler and work fetch module

    So far I have got the impression that the scheduler is entirely unfit for use cases like you describe.

    I imagine there are two brute-force workarounds possible:
    • Run multiple BOINC client instances. Isolate them by virtual machines. For n client instances on the same box, you would need at least n-1 virtual machines.
    • Run multiple BOINC client instances. Isolate them simply by giving them
      • separate work directories by means of the --dir command line switch,
      • separate control ports for the BOINC Manager GUI and other control programs by means of the --gui_rpc_port command line switch.
    Especially the latter sounds workable to me, but I have not tried it myself yet. I would expect that this would allow to run each BOINC client with its individual CPU percentage. Ideally, each of the client instances would be configured to work on one project only.
     
  4. crashtech

    crashtech Diamond Member

    Joined:
    Jan 4, 2013
    Messages:
    6,918
    Likes Received:
    320
    @StefanR5R Thanks for your reply! I'm intrigued by the thought of virtualizing instances of BOINC. Even though there is technically much greater complexity to such an arrangement, most of the configuration these days is heavily automated and GUI driven, which appeals to me since I don't get a lot of time to sit and configure things. I wonder how much of a performance penalty is associated with running DC inside a virtual machine, and if it is a greater penalty for GPU or CPU projects?

    Maybe I should not be afraid to try multiple client instances on one machine without resorting to VMs, but I would be forced to learn some command line syntax for BOINC. Maybe that wouldn't be bad, as it stands I have no ability to do so at all.
     
  5. StefanR5R

    StefanR5R Senior member

    Joined:
    Dec 10, 2016
    Messages:
    589
    Likes Received:
    231
    Ironically I already tried the two clients in two work directories thing successfully with the F@H client on Linux. It's a pointless exercise with F@H though, as its "slots" feature offers exactly the same kind of control out of the box.
    I guess I really should sit down and figure this out with BOINC on Windows. It seems simple enough, but the devil might lurk in the details.