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