I’ll use an example from my EDD where ‘federer[1]’ is just one vnode from host ‘federer’ being released, with the other 2 vnodes ‘federer[0]’ and ‘federer’ continue to be assigned after pbs_release_nodes call:
_% qstat 241 | grep “exec|Resource_List|select”
_exec_host = borg[0]/00+federer/00+lendl/0*2
exec_vnode = (borg[0]:mem=1048576kb:ncpus=1+borg[1]:mem=1048576kb:ncpus=1+borg[2]:ncpus=1)+(federer:mem=1048576kb:ncpus=1+federer[0]:mem=1048576k:ncpus=1+federer[1]:ncpus=1)+(lendl:ncpus=2:mem=2097152kb)
Resource_List.mem = 6gb
Resource_List.ncpus = 8
Resource_List.nodect = 3
Resource_List.place = scatter
Resource_List.select = ncpus=3:mem=2gb+ncpus=3:mem=2gb+ncpus=2:mem=2gb
schedselect = 1:ncpus=3:mem=2gb+1:ncpus=3:mem=2gb+1:ncpus=2:mem=2gb
_% pbs_release_nodes -j 241 federer[1] lendl
_% qstat 241 | grep “exec|Resource_List|select”
exec_host = borg[0]/00+federer/00 ← no lendl as all assigned vnodes in lendl have been cleared.
exec_vnode = (borg[0]:mem=1048576kb:ncpus=1+borg[1]:mem=1048576kb:ncpus=1+borg[2]:ncpus=1)+(federer:mem=1048576kb:ncpus=1+federer[0]:mem=1048576kb:ncpus=1) ← federer[1] and lendl removed.
Resource_List.mem = 4194304kb ← minus 2gb (from lendl)
Resource_List.ncpus = 5 ← minus 3 cpus (1 from federer[1] and 2 from lendl)
Resource_List.nodect = 2 ← minus 1 chunk (when lendl was taken out, its entire chunk assignment disappeared)
Resource_List.place = scatter
schedselect = 1:mem=2097152kb:ncpus=3+1:mem=2097152kb:ncpus=2
The way it stands, it should not be supported. Currently, If one (or more) but not all the vnodes from a mom host assigned to the job did not got released from the job, then nothing happens (cpuset is not resized) except update the internal tables on the mom and server side, and allowing the server to reassign those vnodes to other jobs, if the vnodes have been configured as “shared”. Only if all the vnodes from that mom host assigned to the job are released, will the job be completely removed from that mom host, causing the cpuset created for the job to be cleared, and an epilogue hook is executed as well.
Perhaps on a later version, we can extend this feature to allow execution of a hook, say epilogue hook, whenever a vnode has been taken out of the job. Then that hook can take care of resizing the cpuset.
I’d say in the initial implementation, this should not be supported. If one (or more) but not all vnodes from a mom host assigned to the job did not got released from the job, then nothing happens (no resizing of cgroup) except update the internal tables on the mom and server side, and allowing the server to reassign those vnodes to other jobs, if the vnodes have been configured as “shared”. Only if all the vnodes from that mom host assigned to the job are released, will the job be completely removed from that mom host, causing the execution of an epilogue hook, which will clean up the cgroup hook.
Again, on a later version, we can extend this feature to allow execution of a hook, say epilogue hook, whenever a vnode has been taken out of the job. This hook can take care of resizing cgroups.
No, the ‘-a’ is the only other way that we have right now. The vnodes to be released would have to be named.
Ok.
Yes, this should work also with default_qsub_arguments. I’ll add this info.
Yes, that should be mentioned as well.
Let me improve the wording.