xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
XrdSsiScale.hh
Go to the documentation of this file.
1 #ifndef __XRDSSISCALE_HH__
2 #define __XRDSSISCALE_HH__
3 /******************************************************************************/
4 /* */
5 /* X r d S s i S c a l e . h h */
6 /* */
7 /* (c) 2013 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 <cstdint>
33 #include <cstring>
34 
35 #include "XrdSys/XrdSysPthread.hh"
36 
38 {
39 public:
40 
41 static const uint16_t defSprd = 4; // Initial spread
42 static const uint16_t maxSprd = 1024; // Maximum spread
43 static const uint16_t maxPend = 64000; // Maximum pending requests
44 static const uint16_t minTune = 3; // Minimum remaining channels to tune
45 static const uint16_t midTune = 64; // Quadratic tuning limit
46 static const uint16_t maxTune = 128; // Maximum linear increase
47 static const uint16_t zipTune = 512; // Channel count when maxTune applies
48 
49 int getEnt();
50 
51 void retEnt(int xEnt);
52 
53 bool rsvEnt(int xEnt);
54 
55 void setSpread(short sval);
56 
57  XrdSsiScale() : Active(0), reActive(0), begEnt(0), nowEnt(0),
58  curSpread(defSprd), autoTune(false), needTune(false)
59  {memset(pendCnt, 0, sizeof(uint16_t)*maxSprd);}
60 
62 
63 private:
64 
65 void Retune();
66 bool Tune(char *buff, int blen);
67 
69 uint32_t Active;
70 uint32_t reActive;
71 uint16_t begEnt;
72 uint16_t nowEnt;
73 uint16_t curSpread;
74 bool autoTune;
75 bool needTune;
76 uint16_t pendCnt[maxSprd];
77 };
78 #endif
uint16_t curSpread
Definition: XrdSsiScale.hh:73
uint16_t pendCnt[maxSprd]
Definition: XrdSsiScale.hh:76
uint16_t nowEnt
Definition: XrdSsiScale.hh:72
static const uint16_t midTune
Definition: XrdSsiScale.hh:45
~XrdSsiScale()
Definition: XrdSsiScale.hh:61
bool autoTune
Definition: XrdSsiScale.hh:74
static const uint16_t maxSprd
Definition: XrdSsiScale.hh:42
bool needTune
Definition: XrdSsiScale.hh:75
Definition: XrdSysPthread.hh:164
void retEnt(int xEnt)
static const uint16_t zipTune
Definition: XrdSsiScale.hh:47
void setSpread(short sval)
XrdSysMutex entMutex
Definition: XrdSsiScale.hh:68
void Retune()
static const uint16_t maxPend
Definition: XrdSsiScale.hh:43
Definition: XrdSsiScale.hh:37
XrdSsiScale()
Definition: XrdSsiScale.hh:57
bool rsvEnt(int xEnt)
uint16_t begEnt
Definition: XrdSsiScale.hh:71
bool Tune(char *buff, int blen)
static const uint16_t defSprd
Definition: XrdSsiScale.hh:41
static const uint16_t maxTune
Definition: XrdSsiScale.hh:46
static const uint16_t minTune
Definition: XrdSsiScale.hh:44
uint32_t Active
Definition: XrdSsiScale.hh:69
uint32_t reActive
Definition: XrdSsiScale.hh:70