001: /*
002:
003: * <copyright>
004: *
005: * Copyright 2002-2007 BBNT Solutions, LLC
006: * under sponsorship of the Defense Advanced Research Projects
007: * Agency (DARPA).
008: *
009: * You can redistribute this software and/or modify it under the
010: * terms of the Cougaar Open Source License as published on the
011: * Cougaar Open Source Website (www.cougaar.org).
012: *
013: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
014: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
015: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
016: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
017: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
018: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
019: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
020: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
021: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
022: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
023: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
024: *
025: * </copyright>
026:
027: */
028:
029: package org.cougaar.qos.qrs;
030:
031: /**
032: * Mean Value Analysis model for Latency This assumes that component latencies
033: * are separable.
034: */
035: public class MvaDS extends ResourceContext implements Constants {
036: static void register() {
037: ContextInstantiater cinst = new AbstractContextInstantiater() {
038: public ResourceContext instantiateContext(
039: String[] parameters, ResourceContext parent)
040: throws ResourceContext.ParameterError {
041: return new MvaDS(parameters, parent);
042: }
043:
044: };
045: registerContextInstantiater("MVA", cinst);
046: }
047:
048: private static final String MODELTYPE = "modelType";
049:
050: protected DataFormula instantiateFormula(String kind) {
051: if (kind.equals("CpuLatencyMean")) {
052: return new CpuLatencyMean();
053: } else {
054: return null;
055: }
056: }
057:
058: /**
059: * The parameters should contain one string, the type of model, in this case
060: * MVA
061: */
062: protected void verifyParameters(String[] parameters)
063: throws ParameterError {
064: if (parameters == null || parameters.length != 1) {
065: throw new ParameterError(
066: "MvaDS: wrong number of parameters");
067: } else {
068: // could canonicalize here
069: String modelType = parameters[0];
070: bindSymbolValue(MODELTYPE, modelType);
071:
072: }
073: }
074:
075: private MvaDS(String[] parameters, ResourceContext parent)
076: throws ParameterError {
077: super (parameters, parent);
078: }
079:
080: public static class CpuLatencyMean extends DataFormula {
081:
082: protected void initialize(ResourceContext context) {
083: super .initialize(context);
084: registerDependency(context, "EffectiveMJips");
085: registerDependency(context, "ReplySizeMean");
086: registerDependency(context, "ReplyInstPerByteMean");
087: registerDependency(context, "RequestSizeMean");
088: registerDependency(context, "RequestInstPerByteMean");
089: }
090:
091: protected DataValue doCalculation(DataFormula.Values values) {
092: // JAZ Need to make credibility a function of componant data's
093: // credibility
094: double credibility = values.minCredibility();
095:
096: double replySize = values.doubleValue("ReplySizeMean");
097: double replyIpb = values
098: .doubleValue("ReplyInstPerByteMean");
099: double requestSize = values.doubleValue("RequestSizeMean");
100: double requestIpb = values
101: .doubleValue("RequestInstPerByteMean");
102: double mjips = values.doubleValue("EffectiveMJips");
103:
104: double latency = (replySize * replyIpb + requestSize
105: * requestIpb) // requestinstructions
106: / mjips // Million Java Inst Per Sec
107: / 1000; // Million / millisec
108:
109: return new DataValue(latency, credibility);
110: }
111:
112: }
113:
114: }
|