Scope

  • A performance check includes to verify what performance is available from a given system.
  • The check for parallelization provides results for which number of parallel tasks an acceptable performance can be verified.
  • Performance optimization for individual environments is part of the SOS Consulting Services

Test Suite

  • The performance check is carried out by use of a test suite.
  • It is not recommended to run the test suite in parallel to business-related jobs in a production environment. However, we recommend to run the test suite either in a test environment or during a job maintenance windows in a production environment.

Test Suite Download and Installation

  • Download: performance_parallel_tasks.zip
  • Installation: Unzip the archive to an arbitrary folder in your live directory. The test suite will be created in a folder performance_parallel_tasks.

Test Suite Contents

  • The test suite contains the following jobs:
    • run_parallel_jobs
      • This job will execute a number of parallel tasks for one of the below test jobs.
      • This job can be configured for increased paralellization of test jobs, see below.
    • parallel_job_windows
      • This job is used for Windows environments. The purpose of this job is to sleep for number of seconds that is specified by a job parameter.

        parallel_job_windows job
        @echo .. running job: %SCHEDULER_JOB_NAME% for: %SCHEDULER_PARAM_SLEEP%s
        @set /A "sleep=(%SCHEDULER_PARAM_SLEEP%+1)"
        ping -n %SLEEP% -w 1000 192.0.2.1 > nul
        @echo .. terminating job
    • parallel_job_unix
      • This job is used for Unix environments. The purpose of this job is to sleep for number of seconds that is specified by a job parameter.

        parallel_job_unix job
        echo .. running job: ${SCHEDULER_JOB_NAME} for: ${SCHEDULER_PARAM_SLEEP}s
        sleep=${SCHEDULER_PARAM_SLEEP}+1
        ping -n ${SLEEP} -w 1000 192.0.2.1 > nul
        echo .. terminating job
  • The test suite makes use of the following process class
    • Performance
      • This process class is used to restrict the max. number of parallel processes and optionally to assgin a JobScheduler Agent for execution of the test suite.

        Performance process class
        <?xml version="1.0" encoding="ISO-8859-1"?>
        
        <process_class  max_processes="50"/>

Test Suite Configuration

  • Job: run_parallel_jobs
    • This job makes use of the following parameters:
      • Parameter job
        • Purpose: the name or path of the test job to execute. Modify this value to point to the job parallel_job_unix if you are running the test suite in a Unix environment.
        • Default: parallel_job_windows
      • Parameter sleep
        • Purpose: the number of seconds that the test job should execute.
        • Default: 10
      • Parameter tasks
        • Purpose: the number of parallel tasks.
        • Default: 50
  • Job: parallel_job_windows, parallel_job_unix
    • Optional configuration items:
      • Options tasks
        •  Purpose: this option specifies the max. number of tasks that this job can be executed for. Tasks that exceed this number will be enqueued.
        • Default: 500
  • Process Class: Performance
    • Optional configuration items:
      • Attribute: max_processes
        • Purpose: the max. number of tasks that can be executed for all jobs that are assigned this process class. Tasks that exceed this number will be enqueued.
        • Default: 100

Performance Check

Configure Performance Check

  • The performance check is intended to verify by what level of parallelism your system will show acceptable performance.
  • Therefore play with the parameters sleep and tasks of the run_parallel_jobs job.
    • Start with a medium number as e.g. 50 tasks and double this value for the next execution of the test suite.
    • Push the limits by modifying the max_processes configuration item for the process class. 

Run Performance Check

  • Run the job run_parallel_jobs
    • This job will check if any tasks are running for the specified test job and will start additional tasks if applicable.
    • This job will not terminate. Instead it will repeat itself to start new tasks if previously tasks of the test job have completed.
    • Start this job by use of JOC with the job context menu Start Task Immediately.
    • Terminate this job by use of JOC with the task context menu Terminate.
  • Check the level of parallelization
    • Tasks that are started for the test job are visible with JOC
    • In addition you should find processes in the operating system Task Manager (Windows) or top (Unix) command output that can easily be determined as they are executing a ping command.

Intepretation of Results

  • If your overall system performance slows down then you have hit the limit of parallelization. This might occur at 100, 200, 500 or more tasks in parallel.
  • You can verify the performance impact from the duration of individual tasks that are available with the JOC tasks history or by use of JID.
    • The estimated duration of a task is the number of seconds specified for the sleep parameter plus about 1s for the task start.
    • If the duration of a task exceeds the value of the sleep parameter by more than e.g. 3s then you experience some performance impact. 
    • When you experience missing responsiveness of your operating system then the performance impact has become inacceptable.

Troubleshooting

  • When hitting performance limits then consider the following hints.
    • Trouble: JOC is not responding
      • Explanation: JOC does not respond due to increased system load. JobScheduler will still execute jobs, however, responsed to JOC's status requests are delayed and make the GUI unusable.
      • Measures: Terminate the run_parallel_jobs job. Use the following termination command from the command line:
        • Windows command line to terminate job
          .\jobscheduler.cmd command "<modify_job job='/performance/performance_parallel_tasks/run_parallel_jobs' cmd='end'/>"
        • Unix command line to terminate job
          ./jobscheduler.sh command '<modify_job job="/performance/performance_parallel_tasks/run_parallel_jobs" cmd="end"/>'
    • Trouble: Error occurs on task termination: SCHEDULER-280  Process terminated with exit code -1073741502 (0xC0000142)
      • Explanation:if the test job shows this error message then most presumably you have hit a system limit for the Desktop Heap Size on a Windows system.
      • Measures: At the point of time of occurence terminate the run_parallel_jobs job. Then adjust the desktop heap size having carefully studied the vendor information on this configuration item.
        • We found the following resources useful:
          • Desktop Heap Overview
            • An in-depth article from 2007. However, the conclusions apply to current OS versions as well.
            • Chapter: Configuring the size of individual desktop heaps
          • User32.dll or Kernel32.dll does not initialize
            • This MS support article does not start exactly from the same phenomenon, however, it arrives at the same conclusions.
            • "Every service process that is executed under a user account will receive a new desktop in a noninteractive window station that is created by the Service Control Manager (SCM). Therefore, each service that is executed under a user account will consume the number of kilobytes of desktop heap that is specified in the third SharedSection value. All services that are executed under the LocalSystem account when Allow Service to Interact with the Desktopis not selected share the desktop heap of the "Default" desktop in the noninteractive service windows station (Service-0x0-3e7$).

 

  • No labels