יום שישי 09 ינואר 2009 06:29Hello,
I am helping maintain a Windows CCS 2003 system (containing more than 50 machines, though right now only about 15 machines are online due to some InfiniBand issue,) in a computer center of university. The CCS system is used to run some commercial applications, including MATLAB and gridMathematica. I was asked to do the following:
1) When the number of licenses required by a job is not sufficient, the job is held until the license(s) are available. Other jobs, should be able to go ahead if they meet their own license requirement.
2) In order to prevent one single user using up all available resource (CPUs or licenses), there should be a per-user CPU limitation. If the total number of CPUs used by the running jobs of a user reach such limitation, any further jobs submitted by this user will be held until some of his/her running jobs is complete/canceled.
I first thought that the Activation Filter may be used to meet both requirement. However, I noticed an article in a discussion that when an Activation Filter holds a job, no other new jobs can run until the held job is released or canceled. In other word, while a user may not use up all resource, he can still, without knowing it, block the system so none can use, while most machines of the system stay idle.
I wonder if there is any way to provide these two requirements. Any help (or even an answer like "No, CCS cannot do it", so I don't have to look around everywhere for a solution which doesn't exist, ;-) ) would be appreciated.
שבת 24 ינואר 2009 01:31מנחה דיון
There's not an easy way to do this right now (we're working on it for future versions).
For now, you can try having your Activation Filter cancel the job, or better yet, requeue it with a lower priority.
יום חמישי 29 ינואר 2009 14:09Thanks.
I guess it means that even when there is a solution for future versions, it will not be available for Windows CCS 2003.
And this lead to another question, (if necessary, I could mark your reply as answer, and open another thread. But I think this is a follow-up question,) how do I requeue a job with modified parameters using a filter? From all the documents I could find, if the return code of a filter is 1, it seems that the scheduler will run the job with changed terms, (if I did not mis-understand). However, I cannot find any document describing how the filters define these changed terms. Is there any example I can find? Or is there any other way to requeue a job?
יום חמישי 19 פברואר 2009 23:37מנחה דיוןIt depends which filter you are using.
For submission filters, you can save changes to the job (but not tasks) back into the XML file, and then return 1 from your filter to have the scheduler apply these changes. There is no approach like this for Activation Filters since they are designed to do a go/nogo, not to modify the job.
If you want to modify the job in an activation filter, you may be able to do so by calling the API's or CLI from your filter and making changes (for example by using job modify from the API) and then requeuing the job. I guess then you would return 1 from your activation filter? THis isn't realy something we've tested but it might just work!
P.S. In response to your first question, I don't think we have any plans to change the behavior of activation filters in our older versions. The current behavior is by design to prevent the job at the front of the queue from being starved out of licenses by other jobs further up the queue. Some new functionality around this s being investigated for a future version of the product.
- סומן כתשובה על-ידי Josh BarnardModerator יום חמישי 19 פברואר 2009 23:37