> On 七月 27, 2016, 2:15 a.m., Guangya Liu wrote: > > src/slave/containerizer/docker.cpp, line 1333 > > <https://reviews.apache.org/r/50123/diff/1/?file=1445669#file1445669line1333> > > > > 1) s/allocator.get().allocate(requested)/allocator->allocate(requested) > > > > 2) I think it is not right to use `Option` here as the > > `allocator->allocate(requested)` is returning a `Future`. > > > > One proposal is as following: > > ``` > > allocator->allocate(requested) > > .then(defer(...)); > > ``` > > > > You can also refer to > > https://github.com/apache/mesos/blob/master/src/slave/containerizer/mesos/isolators/gpu/isolator.cpp#L356 > > to get some detail. > > Yubo Li wrote: > `Future.get()` will block the host threading and wait for the > sub-threading return its value. For docker containerizer, we need to wait > `Option<set<Gpu>> allocated` return, and pass it to mesos-docker-executor, > it's hard to follow the async calling style. For mesos containerizer, it uses > cgroup to set device control directly, so the async call is fine.
Since here we must block the host threading to get GPU allocated results, The logic fixed as: + if (requested > 0) { + // Some GPUs requested. + Future<set<Gpu>> future = allocator->allocate(requested); + + // We block the code until the GPU allocation finished. + // For docker containerizer, we must wait for GPUs allocated + // completed, and pass allocated GPUs to mesos-docker-executor. + future.await(); + if (!future.isReady()) { + return Failure("GPU allocator allocating GPU failed"); + } + + set<Gpu> allocated = future.get(); + + foreach (const Gpu& gpu, allocated) { + container->gpuAllocated.push_back(gpu); + } The logic should be safe because I refer to: https://github.com/liyubobj/mesos/blob/master/src/slave/containerizer/fetcher.cpp#L326 - Yubo ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/50123/#review143639 ----------------------------------------------------------- On 七月 18, 2016, 9:17 a.m., Yubo Li wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/50123/ > ----------------------------------------------------------- > > (Updated 七月 18, 2016, 9:17 a.m.) > > > Review request for mesos, Benjamin Mahler, Kevin Klues, and Rajat Phull. > > > Bugs: MESOS-5795 > https://issues.apache.org/jira/browse/MESOS-5795 > > > Repository: mesos > > > Description > ------- > > This added 'NvidiaGpuAllocator' to docker containerizer so that the > docker containerizer can use it to allocate GPUs to the task with 'gpus' > resource. Also, allocated GPUs will automatically deallocated after the > job destroyed. > > > Diffs > ----- > > src/slave/containerizer/docker.hpp 43ca4317d608b3b43dd7bd0d1b55c721e7364885 > src/slave/containerizer/docker.cpp f1ecf3b25d85597f6c3dcaa47968860ed119dbd5 > > Diff: https://reviews.apache.org/r/50123/diff/ > > > Testing > ------- > > make check > > > Thanks, > > Yubo Li > >