RQS Common Uses

From GridWiki
Jump to: navigation, search

Note: this is a draft page where I'm trying to document probable common use cases for the new Resource Quota Syntax that will appear in Grid Engine 6.1. Don't link to this yet :) --Dag 11:54, 20 December 2006 (EST)


About Resource Quotas

The Resource Quota feature allows administrators to apply limits to:

  • Grid Engine resources
  • Grid Engine resource consumers (individual consumers or groups of consumers)
  • Grid Engine jobs

A Grid Engine resource can be any predefined or custom complex attribute known to the grid. Popular examples include slots, arch, num_proc, mem_free, mem_total, etc. The command qconf -sc will list the currently configured attributes. Specific information on complex attributes can be found within the . A Grid Engine resource consumer is one of the following: user, queue, host, project, department or parallel environment. Command-line implementation of this new feature is accomplished via the qquota and qconf commands. Resource quota support has also been built into the X11 qmon GUI tool.

Resource Quota Sets

Resource quotas are configured and defined as sets. Any set can contain one or more resource quota limits. The grid engine scheduler considers all configured sets all of the time and if multiple sets are found, the most restrictive set wins.

Resource quota syntax and rule sets behave and are processed very much like firewall rules on Linux systems -- individual rules defined within a set are evaluated in the order in which they have been defined -- the first rule that matches a specific request will be used (all other rules after the first match are ignored).

A resource quota set contains the following fields:

  • name -- The name of the set
  • enabled -- A boolean expression indicating if the set should be used for making scheduling decisions. Acceptable values are true|false and the default value is false.
  • description -- Optional string field for describing the set. Defaults to NONE.
  • limit rule -- Each set must contain one or more limit rules
    • scope filter -- Designate which resource consumers are affected by the quota limit being implemented. Multiple resource consumers can be named and are space separated. Braces "{ }" can be used to list or group individual consumer objects and the "!" character is used to imply NOT.
    • resource limit -- The actual rule specifying the actual limit for the resource. Must be an attribute-value pair separated by an "=" sign.

Resource Quota Set structure:

{
     name 
     description "NONE"
     enabled  true|false
     limit <scope filter> to <resource limit>
     limit <scope filter> to <resource limit>
     limit <scope filter> to <resource limit>
     ...
}


Resource Quota Set Example:

{
     name         example_resource_quota_set
     description  "limit slot access to user1 and user2 on every host in the LinuxHosts hostgroup (except penguin03)"
     enabled      true
     limit        users {user1,user2} hosts {@LinuxHosts, !penguin03} to slots=1
}

Per User Limits

Global limits on maximum user jobs

It is now possible to set limits on a per-user basis rather than just having one global value that affects everyone.

{
   name         max_per_user
   description  "per user rule sets"
   enabled      TRUE
   limit        users dag to slots=1
}

Max user jobs in a particular queue

Note that the keyword "queues" refers to a Grid Engine cluster queue

{
   name         max_per_queue
   description  NONE
   enabled      TRUE
   limit        users dag queues all.q to slots=2
   limit        users dag queues testQueue to slots=1
}

Max user jobs on a particular execution host

{
 name max_per_host
 enabled TRUE
 limit users dag hosts chrisdag-laptop to slots=2
}

The RQS Design Specification document contains the following more complicated example:

  1. All users together should never take more than 20 slots
  2. All users should maximal take 5 slots on all linux hosts
  3. Every user is restricted to one slot per linux host, only user "roland" is restricted to 2 slots and all other slots on hosts are set to 0

In that case, the ruleset would look like this, note that "@linux" is a predefined hostgroup:

{
 name maxujobs
 limit users * to slots=20
}

{
 name max_linux
 limit users * hosts @linux to slots=5
}

{
 name max_per_host
 limit users roland hosts {@linux} to slots=2
 limit users {*} hosts {@linux} to slots=1
 limit users * hosts * to slots=0
}