I’ve got a Condor pool of multicore machines (running Windows 2k3 Server), and an executable that does not play well with itself – running multiple instances of it on a single box, multicore or not, ends badly.
For a quick hack, I can specify (VirtualMachineID == 1) in my job submission’s requirements field.
But that’s really not very good; if a machine’s slot 1 happens to be filled with another job, I can’t use that machine, even if it’s running no instances of my executable and even if it’s got other job slots free.
Is there a better way to write a job submission to express the idea, “Map no more than one of these per physical machine”?
Or, even more generally, “Map no more than N of these per physical machine?”
It doesn’t seem like even a solution where I look at some machine classad field describing currently-running jobs would work, since negotiation happens all at once.
I’d expect all my jobs to observe that none of themselves are running on box X, and for them all to map successfully at the same time to however many slots X has available.