01: /*
02: * Copyright (c) 2001 by Matt Welsh and The Regents of the University of
03: * California. All rights reserved.
04: *
05: * Permission to use, copy, modify, and distribute this software and its
06: * documentation for any purpose, without fee, and without written agreement is
07: * hereby granted, provided that the above copyright notice and the following
08: * two paragraphs appear in all copies of this software.
09: *
10: * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
11: * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
12: * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
13: * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14: *
15: * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
16: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17: * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
18: * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
19: * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
20: *
21: * Author: Matt Welsh <mdw@cs.berkeley.edu>
22: *
23: */
24:
25: package seda.sandStorm.internal;
26:
27: import seda.sandStorm.api.*;
28: import seda.sandStorm.api.internal.*;
29: import seda.sandStorm.core.*;
30: import seda.sandStorm.main.*;
31: import java.util.*;
32:
33: /**
34: * The ResponseTimeController attempts to keep the response time of
35: * a given stage below a given target by adjusting admission control
36: * parameters for a stage.
37: *
38: * @author Matt Welsh
39: */
40: public abstract class ResponseTimeController implements
41: ResponseTimeControllerIF {
42:
43: protected final static int INIT_THRESHOLD = 1;
44: protected final static int MIN_THRESHOLD = 1;
45: protected final static int MAX_THRESHOLD = 1024;
46:
47: protected StageWrapperIF stage;
48: protected EnqueuePredicateIF pred;
49: protected double targetRT;
50:
51: protected ResponseTimeController(ManagerIF mgr, StageWrapperIF stage)
52: throws IllegalArgumentException {
53: this .stage = stage;
54:
55: SandstormConfig config = mgr.getConfig();
56: this .targetRT = config.getDouble("stages."
57: + stage.getStage().getName()
58: + ".rtController.targetResponseTime");
59: if (this .targetRT == -1) {
60: this .targetRT = config
61: .getDouble("global.rtController.targetResponseTime");
62: if (this .targetRT == -1) {
63: throw new IllegalArgumentException(
64: "ResponseTimeController: Must specify targetResponseTime");
65: }
66: }
67: }
68:
69: public void setTarget(double target) {
70: this .targetRT = target;
71: }
72:
73: public double getTarget() {
74: return targetRT;
75: }
76:
77: public abstract void adjustThreshold(QueueElementIF fetched[],
78: long serviceTime);
79:
80: public abstract void enable();
81:
82: public abstract void disable();
83:
84: }
|