52 static const int tuneMLen = 80;
53 char tuneMsg[tuneMLen]; *tuneMsg = 0;
61 uint16_t endEnt = curSpread;
62 do {
for (uint16_t i = nowEnt; i < endEnt; i++)
63 {
if (pendCnt[i] < maxPend)
66 if (!begEnt || i < begEnt) Active++;
69 if (*tuneMsg)
Log.
Emsg(
"Scale", tuneMsg);
78 {
if (!autoTune || !Tune(tuneMsg, tuneMLen))
break;
80 }
else endEnt = nowEnt;
87 if (*tuneMsg)
Log.
Emsg(
"Scale", tuneMsg);
101 if (xEnt >= 0 && xEnt <
int(maxSprd))
105 if (!begEnt || xEnt < (
int)begEnt)
106 {
if (Active) Active--;
107 if (begEnt && needTune && Active <= (reActive + (reActive>>1)))
111 }
else if (reActive) reActive--;
124 void XrdSsiScale::Retune()
135 {uint32_t totReq = Active + reActive, spread = curSpread;
144 snprintf(buff,
sizeof(buff),
"retune %u requests; spread %u",
147 }
else entMutex.UnLock();
159 if (xEnt >= 0 && xEnt <
int(maxSprd))
161 if (pendCnt[xEnt] < maxPend)
181 if (sval < 0) sval = -sval;
183 autoTune = needTune =
false;
189 if (sval <
short(maxSprd)) newSpread =
static_cast<uint16_t
>(sval);
190 else newSpread = maxSprd;
191 if (autoTune && newSpread < curSpread)
195 curSpread = newSpread;
205 bool XrdSsiScale::Tune(
char *buff,
int blen)
211 if (curSpread >= maxSprd)
213 autoTune = needTune =
false;
220 if (curSpread < midTune) n = curSpread << 1;
221 else if (curSpread < zipTune) n = curSpread + midTune;
222 else n = curSpread + maxTune;
228 if (n <= maxSprd) nowEnt = begEnt = curSpread;
229 else {
if ((curSpread - maxSprd) < minTune)
231 autoTune = needTune =
false;
244 snprintf(buff, blen,
"tune %u requests; spread %u/%u", Active, n-begEnt, n);
void setSpread(short sval)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)