Perflock is a tool that aids groups in sharing access to multi-user machines. It acts as a RWMutex, allowing either one process exclusive access, or multiple processes to that concurrent access.
Perflock uses a file lock to mediate access to the machine. You need to
create the lock file /run/perflock before running perflock, and then
set its permissions such that it is writeable by anyone who will run
perflock.
To run an exclusive job (for example, a performance experiment that requires all cores):
$ perflock ./super --intensive jobIf another job tries to run at the same time, it will join a queue:
$ perflock ../2nd/job --that -s big
Waiting for lockWhen the first process finishes, the second one will be allowed to run.
Some jobs are not performance critical, and simply want to not interfere
with other, important jobs. Such jobs should be scheduled with pls
(pronounced "please"). pls works the same way as perflock, but will
allow multiple pls-wrapped jobs to execute in parallel, unless an
exclusive job is currently running. If an exclusive job is later
enqueued, it will wait until all the pls jobs have finished.
perflock was originally developed inside the Parallel and Distributed
Operating Systems group at MIT CSAIL for
use with our multi-core machines. Over the years, it has been rewritten
and extended by many people in the group, to the point where it no
longer can be said to "belong" to any of us. Once other groups asked how
we share our machines fairly, we decided it might be useful to them, and
so have decided to open-source it.
perflock is a very simple program -- it is really just a wrapper
around flock, which provides exclusive locking for a UNIX file. We
also include wholock, written by @aclements, which lists who is
currently holding the lock, and what other jobs are waiting in the
queue.