home *** CD-ROM | disk | FTP | other *** search
/ vsiftp.vmssoftware.com / VSIPUBLIC@vsiftp.vmssoftware.com.tar / FREEWARE / FREEWARE40.ZIP / scheduler / aaareadme.txt next >
Text File  |  1998-10-01  |  18KB  |  401 lines

  1. How to Win the CPU Battle with Class Scheduling for OpenVMS
  2.  
  3. This article is based on session VS059 presented at DECUS '95 in San
  4. Francisco and has also been published in the Canadian DECUS magazine,
  5. DECUScope.
  6.  
  7. Abstract
  8.  
  9. CPU class scheduling has long been available on IBM operating systems. This
  10. capability was implemented as of OpenVMS V6.0 within the OpenVMS scheduler
  11. although it has not received the amount of attention that it deserves. Hooks
  12. are available for customers to write their own CPU class scheduling policies. 
  13. This article discusses some potential uses of class scheduling and the callouts
  14. available to system programmers for writing a class scheduler policy.
  15.  
  16. About the author
  17.  
  18. Curtis Rempel is an OpenVMS systems programmer.  He has managed OpenVMS systems
  19. for over 12 years and specializes in OpenVMS internals and system performance
  20. issues.
  21.  
  22.  
  23.                                      ---
  24.  
  25.  
  26. Imagine for a moment the following scenario. You arrive at the office and your
  27. phone is already ringing. You answer it and discover that the caller is another
  28. user calling to complain about poor response time.   The boss has been on your
  29. case to "fix it" for what seems like an eternity and now he is standing in
  30. front of your desk leading an angry mob of users.  You've got a problem.  What
  31. do you do?  Tempting though it might be, hiding under your desk and calling 911
  32. is not the solution.  Then you suddenly remember reading something somewhere
  33. about CPU class scheduling and wonder if it might be able to calm the natives
  34. and reduce the amount of coffee you've been drinking lately.
  35.  
  36. Fact or fiction?  Perhaps you have actually experienced this situation
  37. yourself. Is your system response time less than adequate?  Are your users
  38. constantly complaining that the system is slow?  Is productivity going down the
  39. drain?  If you answered "yes" to any of these questions, read on.  Help may be
  40. available.
  41.  
  42. First, let's take a look at some of the common potential causes of poor system
  43. response time.
  44.  
  45. Incompatible job mix:
  46.  
  47. The jobs you run on your system may be competing against each other for
  48. resources.  One classic example of an incompatible job mix is production versus
  49. development work.  Production jobs need to be completed within a specified
  50. time, meanwhile, your developers are banging the heck out of the CPU debugging
  51. their code.  Development work typically starts with "make it work" and then
  52. "make it efficient".  It's the "make it work" part consisting of repeated
  53. compilation and unoptimized code that eats away at your CPU resources in a
  54. hurry. Obviously this behavior is going to have an affect on your production
  55. work.
  56.  
  57. Another example of an incompatible job mix is keystroke sensitive applications
  58. versus compute bound jobs. Are you running timing sensitive applications like
  59. editors and data entry/update forms which require quick cursor response while
  60. at the same time you have number crunchers, report generators, and other
  61. compute bound jobs running?  Setting different base priorities can help to a
  62. degree but as we'll see later, this doesn't always work.  You can sometimes
  63. fool users into perceiving snappier keyboard response by playing around with
  64. quantum but there are tradeoffs and we'll discuss this later as well.
  65.  
  66. Insufficient CPU capacity
  67.  
  68. You workload may simply be too much for the CPU to properly handle.  Have you
  69. outgrown your CPU capacity?  If you have, class scheduling probably will not be
  70. of any value to you.  Useful tools like Digital's POLYCENTER Performance
  71. Advisor can help you determine if you are in fact out of capacity.
  72.  
  73.  
  74. Now let's take a look at some possible solutions to the problem.
  75.  
  76.  
  77. Priority Based Scheduling
  78.  
  79. The most common method of priority based scheduling used on OpenVMS systems is
  80. "interactive" and "batch" priority.  Interactive priority is typically set at
  81. the default base value of 4 while batch priority is lower, and varies in value
  82. depending on the value of PRIORITY_OFFSET in SYSGEN and the number and types of
  83. batch queues that you have.
  84.  
  85. With priority based scheduling, higher priority jobs will pre-empt lower
  86. priority jobs. While this may seem to be adequate, batch jobs tend to take up
  87. the "slack" CPU time, which can be as much as 90% or more if you have only a
  88. few small activity interactive keystroke type jobs.  The problem here is that
  89. although the interactive jobs will pre-empt the lower priority batch jobs, the
  90. system is perceived by the users to be sluggish.  Adjusting quantum to favor
  91. interactive users may be all that is required to satisfy your users. There are
  92. caveats however.  More on this later.  
  93.  
  94.  
  95. Job Mix Realignment
  96.  
  97. Job mix realignment involves separating jobs on separate CPU's (i.e.
  98. development machines & production machines). Note that there are some potential
  99. costs involved and include such things as additional hardware, licenses,
  100. administration, and support.   This solution is optimal if you can afford the
  101. extra costs involved.
  102.  
  103.  
  104. Working Hours Realignment
  105.  
  106. Altering the working hours of your employees is another possible solution,
  107. however, you can count on it being met with varying degrees of opposition. What
  108. impact would a different work schedule have on your customers?  Could they get
  109. the information/goods they need when they need it?  Other costs involved with
  110. changing the work schedule could include building expenses (utility costs),
  111. employee productivity and morale, and of course, maintaining contact with the
  112. other vendors that you may depend upon.  If your particular application is not
  113. affected by these variables, simply distributing your workload throughout the
  114. day might be all that is required to solve the problem.
  115.  
  116.  
  117. Adjusting CPU Quantum
  118.  
  119. Quantum, simply stated, is the CPU "time slice" that you are allocated before
  120. you must give up control of the CPU.  The default value for quantum is normally
  121. set at 200 ms.  Jobs may voluntarily or involuntarily give up control of the
  122. CPU before quantum end due to such events as waiting for I/O to complete or
  123. because a higher priority process has become computable.
  124.  
  125. Process quantum is controlled by the SYSGEN parameter QUANTUM. A short quantum
  126. favors interactive response time while long quantum favors batch job
  127. throughput. 
  128.  
  129. How can you compromise on the value of quantum? One way is to have two values
  130. for quantum, a short quantum for prime time jobs (interactive users) and a long
  131. quantum for non-prime time jobs (batch jobs).  A recurring batch job could be
  132. used to lower and raise quantum automatically since it is a dynamic parameter
  133. (it does not require a system reboot to take effect).  Note that only processes
  134. created after quantum is changed will receive the new quantum value.
  135.  
  136. There is of course a trade-off with lowering quantum.  Jobs execute for shorter
  137. periods of time before being pre-empted by quantum end processing which adds a
  138. certain degree of overhead.  You end up with extra overhead (primarily observed
  139. through a higher level of interrupt stack activity) but the system appears to
  140. be snappier to interactive keystroke applications although you are really not
  141. getting any more work done.
  142.  
  143.  
  144. Finally, let's look at how CPU class scheduling may be of help to us.
  145.  
  146. With class scheduling, CPU time is allocated to job "classes" at regular
  147. intervals instead of individual processes. Processes in the same class share
  148. the CPU time allocated to the class which means that CPU bound jobs can impact
  149. "normal" jobs if grouped into the sames class.  Thus, it is important to give
  150. some thought to how you want to group jobs into scheduling classes. Each class
  151. cannot exceed the CPU time allocated to that class by the scheduler policy.  Be
  152. careful not confuse this CPU time limit with with the AUTHORIZE /CPUTIME
  153. qualifier which limits the amount of process CPU time per session.
  154.  
  155. Implementing class scheduling typically costs next to nothing (some programming
  156. is required, your mileage may vary). It is important to remember that class
  157. scheduling does NOT give you increased capacity but rather it can help to you
  158. better manage and control your CPU resources and possibly prevent workloads
  159. from interfering with each other. In the course of implementation, you may find
  160. that the productivity of some workloads is actually lowered by class
  161. scheduling. Thus, the actual implementation becomes a process of making an
  162. initial estimate of job classes and assigning processes to those classes,
  163. measuring and evaluating the results, and repeating the procedure again until
  164. you are satisfied.
  165.  
  166.  
  167. Defining scheduling classes
  168.  
  169. The algorithm for grouping jobs into scheduling classes is up to you. You may
  170. wish to consider grouping jobs by workload (developers versus production), by
  171. work group (sales, accounting, etc.), or by application type. Any other way you
  172. can think of to distinguish separate job classes according to your particular
  173. requirements is your decision.  However, be sure to assign similar jobs to the
  174. same scheduling class to prevent one or more jobs from monopolizing the class
  175. CPU time.
  176.  
  177. Some sample job class definitions are shown in Figure 1, 2, and 3.
  178.  
  179.  
  180. Implementation
  181.  
  182. Class scheduling is implemented under OpenVMS through the use of an executive
  183. loadable image.
  184.  
  185. By default, this image is not loaded when OpenVMS boots.  To make it available,
  186. use SYSMAN and then reboot:
  187.  
  188.   $ MCR SYSMAN SYS_LOADABLE ADD OPENVMS CLASS_SCHEDULER
  189.   $ @SYS$UPDATE:VMS$SYSTEM_IMAGES
  190.   $ @SYS$SYSTEM:SHUTDOWN
  191.  
  192. Once you have the class scheduler execlet loaded, you need to write a program
  193. which calls the SYS$SCHED system service.
  194.  
  195.  
  196. Overview of SYS$SCHED
  197.  
  198. Format: SYS$SCHED (func,p1,p2,p3)
  199.  
  200.     func = function code specifying action to perform
  201.     p1, p2, p3 = arguments depending on the function code specified
  202.  
  203. Privileges required:
  204.  
  205.   ALTPRI         required to affect processes
  206.   GROUP or WORLD required to affect processes in the same UIC group or in 
  207.                  different UIC groups
  208.   SYSPRV         required to set the timeout value
  209.  
  210.  
  211. SYS$SCHED Function Codes
  212.  
  213. CSH$_READ_ALL - Returns a buffer containing information for all processes
  214.  
  215. CSH$_READ_NEW - Returns a buffer containing information for all processes that
  216. have not been placed into a scheduling class
  217.  
  218. CSH$_READ_QUANT - Returns a buffer containing information about how many ticks
  219. are left for each class
  220.  
  221. CSH$_SET_CLASS - Places processes in classes with or without windfall
  222. capability
  223.  
  224. CSH$_SET_NEW - Indicates to the class scheduler that the next READ_NEW will
  225. return information about the calling process
  226.  
  227. CSH$_SET_QUANT - Establishes class quantum and enables class scheduling
  228.  
  229. CSH$_SET_TIMEOUT - Establishes a nonstandard timeout
  230.  
  231.  
  232. A Real Life Situation ...
  233.  
  234. To cut costs, management insists that developers and production users share the
  235. same machine (a recipe for disaster).  Thus, two different workloads are
  236. competing for CPU time and interfering with each other.  An upgrade to Alpha in
  237. the next budget year is planned.  Until then a solution must be found.
  238.  
  239. Goal #1: Minimize the impact on production users
  240. Goal #2: Solution must be quick and cost little or nothing 
  241. Goal #3: Get the users and the boss off your back (you might want to make
  242.          this goal #1).
  243.  
  244.  
  245. How was this problem solved? 
  246.  
  247. Ten job classes were defined: CLASS_0 through CLASS_9 where CLASS_1 was used to
  248. indicate a class with maximum 10% CPU time so on up to CLASS_9 with a 90% CPU
  249. time limit.  CLASS_0 was reserved for jobs that should not be class scheduled.
  250.  
  251. The "account" field in SYSUAF.DAT was used to group users into two of these
  252. classes.  For production users, the production job UAF records were modified to
  253. have an account field of CLASS_0 (not class scheduled).  For developers,
  254. development job UAF records were modified to have an account field of CLASS_2
  255. (20% CPU). Using the account field is an easy method of grouping jobs into
  256. classes since the account field is one of the items returned by SYS$SCHED using
  257. the CSH$_READ_ALL and CSH$_READ_NEW function codes.  By using an account field
  258. of CLASS_0 and CLASS_2, the scheduler policy code is able to distinguish
  259. between the two different job classes.
  260.  
  261. The scheduling interval was then defined: 0800 - 1700 M-F (prime).
  262.  
  263. The class scheduler policy program was then written in FORTRAN, however it
  264. could have been written in any high level language such as C such as the
  265. example (SYS$EXAMPLES:CLASS.C) provided by Digital. FORTRAN was readily
  266. available and some shops with "number crunchers" have FORTRAN compilers and so
  267. this code will be easily to implement.
  268.  
  269. The class scheduler was started at the beginning of the scheduling interval and
  270. stopped at the end of the scheduling interval using POLYCENTER Scheduler (a
  271. recurring batch job would have worked just as well).  In this case, we weren't
  272. concerned about about non-prime response time (no class scheduling).
  273.  
  274.  
  275. Test Results
  276.  
  277. To demonstrate the effectiveness of the class scheduler, the following test
  278. environment was configured on an idle system: A user session (BIGJOB1) was
  279. created to run a compute bound job in the 20% CPU class:
  280.  
  281.    10     GO TO 10
  282.     
  283.           END
  284.                                                        
  285. A second session was used to run 
  286.  
  287.    $ MONITOR PROCESS /TOPCPU
  288.  
  289. A third session was used to run the class scheduler program.
  290.  
  291. The compute bound job was run with class scheduling first disabled (figure 4)
  292. and as expected, it proceeded to consume all available CPU time.
  293.  
  294. Next, the class scheduler program was activated (figure 5) and it was observed
  295. that the total CPU consumption by BIGJOB1 was reduced to 20% despite the fact
  296. that no other jobs were executing, thus demonstrating that the 20% CPU class
  297. was in effect.
  298.  
  299. A second compute bound job (BIGJOB2) was then run along with the first job in
  300. the 20% CPU class (figure 6) to demonstrate the sharing of CPU time within the
  301. class.  BIGJOB1 and BIGJOB2 each received 10% of the total CPU time.
  302.  
  303.  
  304. Figure 4 - Class Scheduling Disabled - 1 Job
  305.  
  306.                             OpenVMS Monitor Utility 
  307.                              TOP CPU TIME PROCESSES 
  308.                                  on node PROD1 
  309.                             27-OCT-1995 16:22:53.01 
  310.  
  311.                                      0         25        50        75       100 
  312.                                      + - - - - + - - - - + - - - - + - - - - -+ 
  313.  23C000E8  BIGJOB1                99  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
  314.                                      |         |         |         |          | 
  315.  23C0006F  DECW$TE_006F            1 
  316.                                      |         |         |         |          | 
  317.  
  318.                                      |         |         |         |          | 
  319.  
  320.                                      |         |         |         |          | 
  321.  
  322.                                      |         |         |         |          | 
  323.  
  324.                                      |         |         |         |          | 
  325.  
  326.                                      |         |         |         |          | 
  327.  
  328.                                      + - - - - + - - - - + - - - - + - - - - -+ 
  329.  
  330.  
  331.  
  332. Figure 5 - Class Scheduling Enabled - 1 Job
  333.  
  334.                             OpenVMS Monitor Utility 
  335.                              TOP CPU TIME PROCESSES 
  336.                                  on node PROD1 
  337.                             27-OCT-1995 16:24:02.02 
  338.  
  339.                                      0         25        50        75       100 
  340.                                      + - - - - + - - - - + - - - - + - - - - -+ 
  341.  23C000E8  BIGJOB1                20  XXXXXXXX 
  342.                                      |         |         |         |          | 
  343.  23C0006F  DECW$TE_006F            1 
  344.                                      |         |         |         |          | 
  345.               
  346.                                      |         |         |         |          | 
  347.  
  348.                                      |         |         |         |          | 
  349.  
  350.                                      |         |         |         |          | 
  351.  
  352.                                      |         |         |         |          | 
  353.  
  354.                                      |         |         |         |          | 
  355.  
  356.                                      + - - - - + - - - - + - - - - + - - - - -+
  357.  
  358.  
  359.  
  360. Figure 6 - Class Scheduling Enabled - 2 Jobs
  361.  
  362.                             OpenVMS Monitor Utility 
  363.                              TOP CPU TIME PROCESSES 
  364.                                  on node PROD1 
  365.                             27-OCT-1995 16:26:37.76 
  366.  
  367.                                      0         25        50        75       100 
  368.                                      + - - - - + - - - - + - - - - + - - - - -+ 
  369.  23C000E8  BIGJOB1                10  XXXX 
  370.                                      |         |         |         |          | 
  371.  23C00060  BIGJOB2                10  XXXX
  372.                                      |         |         |         |          | 
  373.  23C0006F  DECW$TE_006F            1 
  374.                                      |         |         |         |          | 
  375.  
  376.                                      |         |         |         |          | 
  377.  
  378.                                      |         |         |         |          | 
  379.  
  380.                                      |         |         |         |          | 
  381.  
  382.                                      |         |         |         |          | 
  383.  
  384.                                      + - - - - + - - - - + - - - - + - - - - -+
  385.  
  386.  
  387. Conclusion
  388.  
  389. CPU class scheduling can help you better manage your CPU resources and possibly
  390. allow you to defer a CPU upgrade but it will NOT give you more capacity.
  391. Implementation is relatively easy and cost effective. With class scheduling,
  392. your phone may finally stop ringing and the boss will quit hassling you (ya,
  393. right).
  394.  
  395.  
  396. Questions?
  397.  
  398. Email: vmsguy@home.com
  399.        curtis.rempel@shaw.ca
  400.  
  401.