xrootd
XrdScheduler.hh
Go to the documentation of this file.
1#ifndef ___XRD_SCHED_H___
2#define ___XRD_SCHED_H___
3/******************************************************************************/
4/* */
5/* X r d S c h e d u l e r . h h */
6/* */
7/* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University */
8/* Produced by Andrew Hanushevsky for Stanford University under contract */
9/* DE-AC02-76-SFO0515 with the Department of Energy */
10/* */
11/* This file is part of the XRootD software suite. */
12/* */
13/* XRootD is free software: you can redistribute it and/or modify it under */
14/* the terms of the GNU Lesser General Public License as published by the */
15/* Free Software Foundation, either version 3 of the License, or (at your */
16/* option) any later version. */
17/* */
18/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21/* License for more details. */
22/* */
23/* You should have received a copy of the GNU Lesser General Public License */
24/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26/* */
27/* The copyright holder's institutional names and contributor's names may not */
28/* be used to endorse or promote products derived from this software without */
29/* specific prior written permission of the institution or contributor. */
30/******************************************************************************/
31
32#include <unistd.h>
33#include <sys/types.h>
34
36#include "Xrd/XrdJob.hh"
37
38class XrdOucTrace;
39class XrdSchedulerPID;
40class XrdSysError;
41
42#define MAX_SCHED_PROCS 30000
43
44class XrdScheduler : public XrdJob
45{
46public:
47
49
50void Cancel(XrdJob *jp);
51
52inline int canStick() {return num_Workers < stk_Workers
54
55void DoIt();
56
57pid_t Fork(const char *id);
58
59void *Reaper();
60
61void Run();
62
63void Schedule(XrdJob *jp);
64void Schedule(int num, XrdJob *jfirst, XrdJob *jlast);
65void Schedule(XrdJob *jp, time_t atime);
66
67void setParms(int minw, int maxw, int avlt, int maxi, int once=0);
68
69void Start();
70
71int Stats(char *buff, int blen, int do_sync=0);
72
73void TimeSched();
74
75// Statistical information
76//
77int num_TCreate; // Number of threads created
78int num_TDestroy;// Number of threads destroyed
79int num_Jobs; // Number of jobs scheduled
80int max_QLength; // Longest queue length we had
81int num_Limited; // Number of times max was reached
82
83// Constructor and destructor
84//
86 int minw=8, int maxw=8192, int maxi=780);
87
89
90private:
93
94XrdSysMutex DispatchMutex; // Disp: Protects above area
95int idl_Workers; // Disp: Number of idle workers
96
97int min_Workers; // Sched: Min threads we need to have
98int max_Workers; // Sched: Max threads we can start
99int max_Workidl; // Sched: Max idle time for threads above min_Workers
100int num_Workers; // Sched: Number of threads we have
101int stk_Workers; // Sched: Number of sticky workers we can have
102int num_JobsinQ; // Sched: Number of outstanding jobs in the queue
103int num_Layoffs; // Sched: Number of threads to terminate
104
105XrdJob *WorkFirst; // Pending work
108XrdSysMutex SchedMutex; // Protects private area
109
110XrdJob *TimerQueue; // Pending work
112XrdSysMutex TimerMutex; // Protects scheduler area
113
114XrdSchedulerPID *firstPID;
116
117void hireWorker(int dotrace=1);
118void Monitor();
119void traceExit(pid_t pid, int status);
120static const char *TraceID;
121};
122#endif
Definition: XrdJob.hh:43
Definition: XrdOucTrace.hh:36
Definition: XrdScheduler.hh:45
int Active()
Definition: XrdScheduler.hh:48
int num_Workers
Definition: XrdScheduler.hh:100
int max_QLength
Definition: XrdScheduler.hh:80
int Stats(char *buff, int blen, int do_sync=0)
XrdSysSemaphore WorkAvail
Definition: XrdScheduler.hh:107
int max_Workidl
Definition: XrdScheduler.hh:99
int num_Jobs
Definition: XrdScheduler.hh:79
int num_TCreate
Definition: XrdScheduler.hh:77
void hireWorker(int dotrace=1)
XrdSchedulerPID * firstPID
Definition: XrdScheduler.hh:114
int min_Workers
Definition: XrdScheduler.hh:97
XrdSysMutex DispatchMutex
Definition: XrdScheduler.hh:94
void Monitor()
XrdJob * WorkFirst
Definition: XrdScheduler.hh:105
void Schedule(XrdJob *jp, time_t atime)
void Schedule(XrdJob *jp)
int idl_Workers
Definition: XrdScheduler.hh:95
int canStick()
Definition: XrdScheduler.hh:52
XrdSysMutex ReaperMutex
Definition: XrdScheduler.hh:115
void TimeSched()
XrdScheduler(XrdSysError *eP, XrdOucTrace *tP, int minw=8, int maxw=8192, int maxi=780)
XrdSysError * XrdLog
Definition: XrdScheduler.hh:91
int stk_Workers
Definition: XrdScheduler.hh:101
XrdSysMutex TimerMutex
Definition: XrdScheduler.hh:112
XrdOucTrace * XrdTrace
Definition: XrdScheduler.hh:92
void Schedule(int num, XrdJob *jfirst, XrdJob *jlast)
void setParms(int minw, int maxw, int avlt, int maxi, int once=0)
void Cancel(XrdJob *jp)
void traceExit(pid_t pid, int status)
int num_JobsinQ
Definition: XrdScheduler.hh:102
int num_Layoffs
Definition: XrdScheduler.hh:103
XrdJob * TimerQueue
Definition: XrdScheduler.hh:110
void * Reaper()
XrdSysCondVar TimerRings
Definition: XrdScheduler.hh:111
int max_Workers
Definition: XrdScheduler.hh:98
XrdSysMutex SchedMutex
Definition: XrdScheduler.hh:108
int num_Limited
Definition: XrdScheduler.hh:81
int num_TDestroy
Definition: XrdScheduler.hh:78
static const char * TraceID
Definition: XrdScheduler.hh:120
pid_t Fork(const char *id)
XrdJob * WorkLast
Definition: XrdScheduler.hh:106
Definition: XrdSysPthread.hh:79
Definition: XrdSysError.hh:90
Definition: XrdSysPthread.hh:166
Definition: XrdSysPthread.hh:404