Datacenter Compute Rack#
In this tutorial we will calculate the yearly energy consumption of a 19in server rack.
Configurations:
16 2U servers with 230VAC input
Server power (maximum): 850W
PDU distribution resistance: 2.5mOhm
Three different versions of 80plus certified PSUs: Bronze, Gold and Titanium
The rack is operated as follows during a year:
1 day shutdown for maintenance
75% of active time operating at 100% power
20% of active time operating at 50% power
5% of active time operating at 5% of power
from sysloss.components import *
from sysloss.system import System
import pandas as pd
System definition#
The function create_rack() below is used to create a system with the PSU efficiency parameter as input.
The following load phases are defined as well:
“Service”
“Full load”
“Half load”
“Idle”
Note
sysLoss treats AC and DC voltages the same. This is valid when the rms AC voltage is used on single phase (power factor 1).
DAY_SECS = 24*60*60 # seconds in a day
rack_phases = {"Service": DAY_SECS, "Full load": 364*DAY_SECS*0.75, "Half load": 364*DAY_SECS*0.75, "Idle": 364*DAY_SECS*0.05}
def create_rack(psu_efficiency):
sys = System("Compute rack", source=Source("230VAC", vo=230.0))
sys.set_sys_phases(rack_phases)
for i in range(16):
idx = "[{}]".format(i+1)
sys.add_comp("230VAC", comp=RLoss("PDU resistance"+idx, rs=2.5e-3))
sys.add_comp("PDU resistance"+idx, comp=Converter("PSU"+idx, vo=12.0, eff=psu_efficiency))
sys.set_comp_phases("PSU"+idx, ["Full load", "Half load", "Idle"])
sys.add_comp("PSU"+idx, comp=PLoad("Blade"+idx, pwr=850.0))
sys.set_comp_phases("Blade"+idx, {"Full load": 850.0, "Half load": 425.0, "Idle": 42.5})
return sys
Define efficiency for the three different PSU ratings:
bronze_eff = {"vi": [230.0], "io":[3.55, 7.1, 14.2, 35.5, 71.0], "eff":[[.67, .79, .85, .88, .85]]}
gold_eff = {"vi": [230.0], "io":[3.55, 7.1, 14.2, 35.5, 71.0], "eff":[[.79, .86, .90, .92, .89]]}
titanium_eff = {"vi": [230.0], "io":[3.55, 7.1, 14.2, 35.5, 71.0], "eff":[[.84, .90, .94, .96, .91]]}
Analysis#
Analysis is straight forward - run solve() with each of the three PSU ratings.
Tip
Set the energy parameter in .solve() to True - the results table will then contain a new column with the 24h energy consumption.
raitings = {"Bronze": bronze_eff, "Gold": gold_eff, "Titanium": titanium_eff}
res = []
for r in raitings.keys():
rack = create_rack(raitings[r])
res += [rack.solve(tags={"Rating": r}, energy=True)]
df = pd.concat(res, ignore_index=True)
df.tail()
| Component | Type | Parent | Rating | Phase | Vin (V) | Vout (V) | Iin (A) | Iout (A) | Power (W) | Loss (W) | Efficiency (%) | 24h energy (Wh) | Warnings | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 598 | PDU resistance[1] | SLOSS | 230VAC | Titanium | Idle | 230.0 | 229.99945 | 0.21998 | 0.21998 | 50.595359 | 0.000121 | 99.999761 | 39.101297 | |
| 599 | PSU[1] | CONVERTER | PDU resistance[1] | Titanium | Idle | 229.99945 | 12.0 | 0.21998 | 3.541667 | 50.595238 | 8.095238 | 84.0 | 39.101203 | |
| 600 | Blade[1] | LOAD | PSU[1] | Titanium | Idle | 12.0 | 0.0 | 3.541667 | 0.0 | 42.5 | 0.0 | 100.0 | 32.845011 | |
| 601 | System total | Titanium | Idle | 3.519677 | 809.525745 | 129.525745 | 83.999799 | 625.620746 | ||||||
| 602 | System average | Titanium | 46.36919 | 10664.913806 | 789.513963 | 93.210233 | 255957.931346 |
Since we are interested in the yearly power consumption, a new column is created for this:
df["Annual power (kWh)"] = df["24h energy (Wh)"] * 365 / 1000
df[df.Component == "System average"][["Component", "Rating", "Power (W)", "Loss (W)", "Efficiency (%)", "Annual power (kWh)"]].style.hide(axis='index')
| Component | Rating | Power (W) | Loss (W) | Efficiency (%) | Annual power (kWh) |
|---|---|---|---|---|---|
| System average | Bronze | 11492.974920 | 1617.575080 | 85.894183 | 100678.460297 |
| System average | Gold | 10978.275298 | 1102.875456 | 90.146603 | 96169.691606 |
| System average | Titanium | 10664.913806 | 789.513963 | 93.210233 | 93424.644941 |
The power savings from using a Titanium certified PSU over a Bronze certified PSU is 7263kWh per year. Is there an economic gain to use higher rated PSUs? That depends on the lifetime of the rack, the energy prices and the cost difference between e.g. a Bronze PSU and Titanium PSU.
Summary#
This tutorial demonstrates how system energy consumption can be analyzed with sysLoss by enabling the energy parameter in solve().