Appearance
Jump Event Types Object Reference
Demand
This Demand object defines a change to service demand.
json
{
"EventId": 1,
"EventType":"Demand",
"DemandType": "AbsTransitory",
"TriggerTime": 2,
"DemandPercent": 20,
"TransitoryDurationMonths": 2,
}
TIP
The code block above represents a 20% jump in demand, at 2 years, which is reversed 2 months later because the demand spike is consider transitory (e.g., retail sales event).
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type Demand.
DemandType - string - required
Type of demand change.
Demand Type Codes
Code | Description |
---|---|
GrowthPercent | Modifies the continuous service demand percentage in the ServiceDemandGrowthPercent property. |
AbsPermanent | A one-time, permanent change to absolute service demand. This shifts demand but doesn't change the ServiceDemandGrowthPercent value. |
AbsTransitory | A one-time, transitory change to absolute service demand. Zypr automatically adds a second Jump Event to reverse the first Jump Event per the duration specified in the TransitoryDurationMonths property. |
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
DemandPercent - numeric - required
Percentage increase in demand.
TransitoryDurationMonths - numeric - conditionally required
Time when absolute transitory change event is reversed. Require when DemandType is 'AbsTransitory'.
Configuration
This Configuration object modifies the NewServerConfiguration object. All racks or servers added at, or after, the trigger time will have this configuration. This object will be validated for consistency with the LotUnit property in the EvolutionRules object.
TIP
To change the performance rating of this new server configuration, add a Performance jump event with PerformanceType property set to 'Server' with the same trigger time.
This code block changes the configuration of inventory for a 'Server' lot unit.
json
{
"EventId": 2,
"EventType": "Configuration",
"Tag": "SX400",
"TriggerTime": 2.25,
"ServerCost": 10000,
"ServerWatts": 435,
"ServerSize": 1,
"ProcessorSetSize": 2,
"CoreSetSize": 12,
}
This code block changes the configuration of inventory for a 'Rack' lot unit.
json
{
"EventId": 2,
"EventType": "Configuration",
"Tag": "RX400",
"TriggerTime": 2.25,
"RackSize": 42,
"RackServerQty": 42,
"RackCost": 420000,
"ServerWatts": 435,
"ServerSize": 1,
"ProcessorSetSize": 2,
"CoreSetSize": 12
}
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type Configuration.
Tag - string - optional
A user-determined value to identify a hardware unit (e.g., model) or cross-reference to a user-maintained master inventory list.
Hardware identification
Zypr is indifferent to server or rack model numbers or any other description (e.g., mfg serial number, fixed asset accounting number, etc.). Zypr uniquely identifies an inventory item by physical attributes.
However, IT planners may need to account for a pool's server or rack inventory ingress, balance, and egress from a pool. This Tag property provides that capability. Zypr objects, that describe server or rack inventory, like Configuration, include the Tag property.
To group inventory transactions and balances by the Tag property, use the HardwareDetail object.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
RackSize - integer - conditionally optional
Quantity of available rack units using rack unit 'U' rating. Required when LotUnit property of EvolutionRules object is 'Rack'.
RackServerQty - integer - conditionally optional
Quantity of servers that populate the rack. Required when LotUnit property of EvolutionRules object is 'Rack'.
RackCost - integer - conditionally optional
Unit cost of a populated rack added to inventory. Required when LotUnit property of EvolutionRules object is 'Rack'.
ServerCost - integer - conditionally optional
Unit cost of a server added to inventory. Required when LotUnit property of EvolutionRules object is 'Server'.
ServerWatts - integer - required
Electrical power consumption rating in watts.
ServerSize - integer - required
Represents a "rack unit." Valid values are 1,2,4.
ProcessorSetSize - integer - required
Quantity of physical processors contained in a server's cpu socket.
CoreSetSize - integer - required
Quantity of cores contained in physical processor.
Performance
This Performance object defines a change to server performance.
Why Performance is separated from hardware Configuration
Hardware performance ratings are scalar values that are interpreted by Zypr as relative values (e.g., server A's rate of computation is 50% better than server B). Zypr separates performance from hardware because performance is subject to change, which Zypr treats as just another discrete event to the pool that is evaluated.
For example, a network upgrade (i.e., an extraneous discrete event) that meaningfully reduces I/O latency.
Optimization using relative values is not a complexity unique to IT. Passenger airlines have long dealt with similar challenges to "system-wide" efficiency. For example, airlines might modify aircraft seating capacity, up or down, to more efficiently move people (versus electrons) within their network.
json
{
"EventId": 1,
"EventType":"Performance",
"TriggerTime": 2,
"PerformanceType": "Server",
"PerformanceJumpPercent": 100
}
INFO
The code example represents a 100% jump in performance at 2 years from the model run date. All new servers added at 2 years and later will have this performance rating, unless a subsequent performance jump event exists.
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type Performance.
EventId - integer - required
Unique number to identify jump event.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
PerformanceType - string - required
Scope of performance change.
Performance Type Codes
Code | Description |
---|---|
Server | Modifies the performance rating of a new server added to pool. |
Pool | Modifies the performance rating of all existing servers in pool. |
TIP
Jumps in performance to an entire pool may arise from a variety of extraneous technologies — from workload optimization software to network or storage upgrades, or adding accelerators that offload work.
PerformanceJumpPercent - numeric - optional
Percentage to adjust server performance/efficiency rating in ServerUnitCapacity property.
Process
This Process object injects an interval into the evolution process (and therefore the time-series output) at the trigger time with no state change other than spawning a new interval. The trigger time must be exclusive of all other jump events. This jump event may only be used with SimulationType 'Optimal'.
Three properties provide options by which certain inventory behaviors may be introduced to try to shape hardware inventory.
json
{
"EventId": 6,
"EventType": "Process",
"TriggerTime": 1.75,
"AttemptServerReplacement": false,
"ReplacePercentageOfServers": null,
"IgnoreReplacementExchangeRate": false,
}
INFO
The code block above does nothing other than trigger a new interval.
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type Process.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked. Trigger time must be exclusive of all other jump events.
AttemptServerReplacement - boolean - optional
Instructs simulation engine to attempt forcing a target server replacement rate, as indicated in ReplacePercentageOfServers, at trigger time. Default value is false.
ReplacePercentageOfServers - numeric - optional
Percentage of servers to replace. Reaching the desired percentage is not guaranteed.
IgnoreReplacementExchangeRate - boolean - optional
Feasible remove/add transactions are only generated when an exchange produces a net gain in performance per hardware unit (i.e., increases concentrate). A value set to 'true', will ignore this rule. There is no guarantee the quantity of servers or racks removed will be greater than if the exchange rate rule was not ignored.
Utilization Boundaries
This UtilizationBoundaries object modifies the upper and/or lower percent in the EvolutionRules object.
TIP
Shifting utilization boundaries upward has the effect of making more capacity available within a pool that, conceptually, should result in delaying (or reducing the amount) when additional capacity is next added to the pool. That will be true when the SimulationType is 'Fixed'.
When the SimulationType is 'Optimal', delayed capacity addition is one feasible solution among many. It is not necessarily the lowest cost solution available. Other solutions will be evaluated.
If the objective is let excess capacity "run-out" until reaching the new, higher upper utilization rate boundary, try setting a constraint that doesn't permit server inventory balance to decrease for the time period that approximates your expectation of a run-out time.
json
{
"EventId": 1,
"EventType":"UtilizationBoundaries",
"TriggerTime": 1.00,
"PoolUtilizationBoundaryPercentLower": 63.5,
"PoolUtilizationBoundaryPercentUpper": 65.5,
"RemoveServers": true
}
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type UtilizationBoundaries.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
ServerUtilizationPercentBase - numeric - required
Targeted aggregate minimum utilization percent for pool.
ServerUtilizationPercentPeak - numeric - required
Targeted aggregate maximum utilization percent for pool.
Utilization Boundary Change Rules
- New lower boundary percent must be greater than or equal to existing lower boundary percent
- New upper boundary must be greater than the new lower boundary percent.
RemoveServers - boolean - optional
Attempt to remove excess capacity from pool if boundary change results in negative incremental capacity requirement for interval. Default is false. Can only be used with SimulationType 'Optimal'.
What's a negative incremental capacity requirement?
The duration of time intervals are bound by lower and upper utilization rates with respect to demand growth. However, the length of this duration is not guaranteed. Other jump events may exist that shorten an interval's duration in order to accept an injected state change to the pool.
Whatever the duration, how much incremental capacity is required is calculated in order to satisfy future demand for the time interval.
A negative incremental capacity requirement occurs when the additional capacity available, caused by an upward utilization boundary shift, exceeds the expected service demand growth for the expected time interval.
Software Stack Add
This SoftwareStackAdd object adds one or more software items to a pool's software stack.
json
{
"EventId": 1,
"EventType": "SoftwareStackAdd",
"TriggerTime": 2.0,
"LicenseIds": [5]
}
INFO
The code block above adds the terms for SoftwareItem, for LicenseId 5, to the software stack at 2 years.
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type SoftwareStackAdd.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
LicenseIds - integer list - required
One or more license ids.
Is this software item defined?
All software that compose the initial stack, or any that may be added later using this jump event, need to be defined in the SoftwareInventoryTerms array.
Software Stack Remove
This SoftwareStackRemove object removes one or more SoftwareItem terms from the software stack registry.
json
{
"EventId": 1,
"EventType": "SoftwareStackRemove",
"TriggerTime": 2.0,
"LicenseIds": [2]
}
INFO
The code example removes the terms for SoftwareItem, with LicenseId property value of 2, from the software stack at 2 years.
Attributes
EventId - integer - required
Unique number to identify jump event.
EventType - string - required
Jump Event object of type SoftwareStackRemove.
TriggerTime - numeric - required
Future time in time-series when jump event is invoked.
LicenseIds - integer list - required
One or more license ids.
Software Price Change
This jump event is only for software items that do not use the CostRules array object to specify detail cost rules. Therefore, the CostRule array object, for the targeted software item, must either be omitted from the model or its value must be an empty array.
json
{
"EventId": 1,
"EventType":"SoftwarePriceChange",
"TriggerTime": 1.5,
"LicenseId":"4",
"Fee": 750,
"PerpetualSupportPercent": 28
}
INFO
The code block above modifies the SoftwareItemTerms object for license id 4 at 1.5 years. Properties Fee and PerpetualSupportPercent may be changed from their original values.