XRootD
Loading...
Searching...
No Matches
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;
41class XrdSysTrace;
42
43#define MAX_SCHED_PROCS 30000
44
45class XrdScheduler : public XrdJob
46{
47public:
48
49int Active() {return num_Workers - idl_Workers + num_JobsinQ;}
50
51void Cancel(XrdJob *jp);
52
53inline int canStick() {return num_Workers < stk_Workers
54 || (num_Workers-idl_Workers) < stk_Workers;}
55
56void DoIt();
57
58pid_t Fork(const char *id);
59
60void *Reaper();
61
62void Run();
63
64void Schedule(XrdJob *jp);
65void Schedule(int num, XrdJob *jfirst, XrdJob *jlast);
66void Schedule(XrdJob *jp, time_t atime);
67
68void setParms(int minw, int maxw, int avlt, int maxi, int once=0);
69
70void Start();
71
72int Stats(char *buff, int blen, int do_sync=0);
73
74void TimeSched();
75
76void setNproc(const bool limlower);
77
78// Statistical information
79//
80int num_TCreate; // Number of threads created
81int num_TDestroy;// Number of threads destroyed
82int num_Jobs; // Number of jobs scheduled
83int max_QLength; // Longest queue length we had
84int num_Limited; // Number of times max was reached
85
86// This is the preferred constructor
87//
89 int minw=8, int maxw=8192, int maxi=780);
90
91// This constructor is only maintained for ABI compatibility and will be
92// removed in a future major release. While syntactically compatible the
93// sematics now are slightly different and tracing might not occur.
94//
96 int minw=8, int maxw=8192, int maxi=780);
97
98// This constructor is used for a stand-alone scheduler.
99//
100 XrdScheduler(int minw=3, int maxw=128, int maxi=12);
101
103
104private:
105XrdSysError *XrdLog;
106XrdSysTrace *XrdTrace;
107XrdOucTrace *XrdTraceOld; // This is only used for ABI compatibility
108
109XrdSysMutex DispatchMutex; // Disp: Protects above area
110int idl_Workers; // Disp: Number of idle workers
111
112int min_Workers; // Sched: Min threads we need to have
113int max_Workers; // Sched: Max threads we can start
114int max_Workidl; // Sched: Max idle time for threads above min_Workers
115int num_Workers; // Sched: Number of threads we have
116int stk_Workers; // Sched: Number of sticky workers we can have
117int num_JobsinQ; // Sched: Number of outstanding jobs in the queue
118int num_Layoffs; // Sched: Number of threads to terminate
119
120XrdJob *WorkFirst; // Pending work
121XrdJob *WorkLast;
122XrdSysSemaphore WorkAvail;
123XrdSysMutex SchedMutex; // Protects private area
124
125XrdJob *TimerQueue; // Pending work
126XrdSysCondVar TimerRings;
127XrdSysMutex TimerMutex; // Protects scheduler area
128
129XrdSchedulerPID *firstPID;
130XrdSysMutex ReaperMutex;
131
132void Boot(XrdSysError *eP, XrdSysTrace *tP, int minw, int maxw, int maxi);
133void hireWorker(int dotrace=1);
134void Init(int minw, int maxw, int maxi);
135void Monitor();
136void traceExit(pid_t pid, int status);
137static const char *TraceID;
138};
139#endif
friend class XrdScheduler
Definition XrdJob.hh:44
XrdJob(const char *desc="")
Definition XrdJob.hh:51
int Stats(char *buff, int blen, int do_sync=0)
XrdScheduler(XrdSysError *eP, XrdSysTrace *tP, int minw=8, int maxw=8192, int maxi=780)
void Schedule(XrdJob *jp)
void setParms(int minw, int maxw, int avlt, int maxi, int once=0)
void Cancel(XrdJob *jp)
void * Reaper()
void setNproc(const bool limlower)
pid_t Fork(const char *id)