VSP 360 REST API - Load balance MPB's on VSP One Block and VSP One Block High End.
When LDEVs are created they are assigned in a round robin fashion across all the MPB's [ Microprocessor Blades ]. Over time as LDEVs are created and deleted the number of LDEVs on each MPB may not be the same. Also as load shifts over time the MPB's may become unbalanced. Another scenario is when you upgrade a 2-node Block High End array to a 4-node etc.
VSP 360 shows this on the dashboard. Select "Processor Load Balance".
The python script at this GitHub Repository will help you to produce a report which allows you to see which LDEVs need to be moved across MPB's in order to acheive the balance.
https://github.com/visubramaniam/LDEV_MPB_Balancing
The process used is below:-
1. Ingest Read LDEV metrics + MPB assignments from JSON/API
2. Score Composite load = (IOPS × w₁) + (MB/s × w₂)
3. Balance Greedy migration: overloaded → underloaded MPBs
4. Report Before/after summary + migration plan
Sample usage is below:-
Run logs from a sample run are below :-
visubramaniam@MQ7HY4M9M0 LDEV_MPB_Balancing % python3 storage_array_balancer.py --fetch \
--host 192.168.180.60 \
--token $BEARER_TOKEN \
--storage-name "DC2-B28-840183" \
--start-time 20260110_000000 \
--end-time 20260217_000000
Fetching data from https://192.168.180.60 ...
Storage filter: DC2-B28-840183
Time range: 20260110_000000 → 20260217_000000
Received 190 LDEVs
Storage Array: 840183-00
MP Blades (2): MPU-010, MPU-020
LDEVs: 190 Tolerance: ±2.0%
Weights — per-LDEV adaptive (writes cost 2×):
LoadScore = RndR × (RdIOPS + 2×WrIOPS) + SeqR × (RdMBps + 2×WrMBps)
Random I/O threshold: ≤ 64 KB avg I/O size
================================================================================
BEFORE BALANCING
Total LDEVs: 190 MPBs: 2
Average composite load: 6844.16 Tolerance: ±2.0%
================================================================================
MPB LDEVs Tot IOPS Tot MB/s Load Score Dev% Avg Util Status
──────── ────── ────────── ────────── ─────────── ─────── ───────── ──────
MPU-010 99 8487.8 384.77 5937.89 -13.2% 4.55% ✗
MPU-020 91 5068.0 62.91 7750.42 +13.2% 5.78% ✗
Balanced: NO ✗
Top 15 busiest LDEVs:
LDEV ID Name MPB IOPS MB/s RndR SeqR w1(Rnd) w2(Seq) Score Util%
──────────────────── ────────────────────── ──────── ─────── ─────── ───── ───── ───────── ───────── ───────── ──────
840183-00:00:15 GAD-Workshop-Quorum MPU-020 4154.9 16.26 1.00 0.00 6924.1 0.0 6924.1 16.4%
840183-00:00:8A William MPU-010 3019.9 11.83 1.00 0.00 5032.6 0.0 5032.6 12.2%
840183-00:05:03 IDA_DataStore4 MPU-010 5118.1 369.25 0.00 1.00 0.0 372.1 372.1 54.2%
840183-00:05:01 IDA_DataStore2 MPU-020 209.6 1.70 0.93 0.07 364.9 0.2 365.1 17.6%
840183-00:00:45 GAD-Workshop MPU-010 208.5 1.03 0.98 0.02 341.0 0.0 341.1 7.5%
840183-00:05:02 IDA_DataStore3 MPU-010 101.2 1.86 0.75 0.25 133.3 0.8 134.2 15.1%
840183-00:05:00 IDA_DataStore1 MPU-020 86.7 1.85 0.70 0.30 110.9 1.0 111.9 13.2%
840183-00:00:0B cumulus_datastore MPU-020 380.5 39.07 0.00 1.00 0.0 77.8 77.8 68.9%
840183-00:00:76 JNL_4_HURDEMO MPU-020 60.7 0.03 1.00 0.00 60.7 0.0 60.7 1.2%
840183-00:05:04 IDA_DataStore5 MPU-020 26.2 0.29 0.88 0.12 45.8 0.1 45.9 7.3%
840183-00:00:81 Casino-Datastore MPU-020 30.3 0.58 0.74 0.26 35.7 0.2 35.9 3.3%
840183-00:00:0C CyberVR-DR-Datastore MPU-020 28.2 0.42 0.81 0.19 33.0 0.1 33.1 11.1%
840183-00:00:7B Casino-Datastore MPU-020 24.0 0.48 0.73 0.27 27.9 0.2 28.0 4.8%
840183-00:00:05 SpectrumProtect MPU-010 18.6 0.41 0.69 0.31 23.6 0.2 23.8 9.0%
840183-00:00:4D Casino-Datastore MPU-020 26.9 1.08 0.38 0.62 20.5 1.3 21.8 8.4%
================================================================================
AFTER BALANCING
Total LDEVs: 190 MPBs: 2
Average composite load: 6844.16 Tolerance: ±2.0%
================================================================================
MPB LDEVs Tot IOPS Tot MB/s Load Score Dev% Avg Util Status
──────── ────── ────────── ────────── ─────────── ─────── ───────── ──────
MPU-010 108 9360.9 430.27 6718.11 -1.8% 5.46% ✓
MPU-020 82 4194.9 17.41 6970.20 +1.8% 4.71% ✓
Balanced: YES ✓
──────────────────────────────────────────────────────────────────────────────────────────
Migration plan (9 LDEV moves):
──────────────────────────────────────────────────────────────────────────────────────────
# Action LDEV ID Name IOPS MB/s From → To
─── ──────── ──────────────────── ────────────────────── ─────── ─────── ──────── ─── ────────
1 move → 840183-00:05:01 IDA_DataStore2 209.6 1.70 MPU-020 → MPU-010
2 move → 840183-00:05:00 IDA_DataStore1 86.7 1.85 MPU-020 → MPU-010
3 move → 840183-00:00:0B cumulus_datastore 380.5 39.07 MPU-020 → MPU-010
4 move → 840183-00:00:76 JNL_4_HURDEMO 60.7 0.03 MPU-020 → MPU-010
5 move → 840183-00:05:04 IDA_DataStore5 26.2 0.29 MPU-020 → MPU-010
6 move → 840183-00:00:81 Casino-Datastore 30.3 0.58 MPU-020 → MPU-010
7 move → 840183-00:00:0C CyberVR-DR-Datastore 28.2 0.42 MPU-020 → MPU-010
8 move → 840183-00:00:7B Casino-Datastore 24.0 0.48 MPU-020 → MPU-010
9 move → 840183-00:00:4D Casino-Datastore 26.9 1.08 MPU-020 → MPU-010
Note that the script only produces a plan and does not execute the move.
2.
Modify LDEV MPB assignment using raidcom : 3.
Modify LDEV MPB assignment using PFREST API :Test Run on a VSP One BHE [ B85] Array :-
visubramaniam@MQ7HY4M9M0 LDEV_MPB_Balancing % python3 storage_array_balancer.py --fetch \
--host vsp360.storage.idc.coe.hv \
--token $BEARER_TOKEN \
--storage-name "DC2-B85"
Fetching data from https://vsp360.storage.idc.coe.hv ...
Storage filter: DC2-B85
Time range: 20260216_000000 → 20260217_000000
Received 160 LDEVs
Storage Array: 70128-00
MP Blades (4): MPU-010, MPU-020, MPU-110, MPU-120
LDEVs: 160 Tolerance: ±2.0%
Weights — IOPS: 1.0 Throughput: 1.0
================================================================================
BEFORE BALANCING
Total LDEVs: 160 MPBs: 4
Average composite load: 0.01 Tolerance: ±2.0%
================================================================================
MPB LDEVs Tot IOPS Tot MB/s Load Score Dev% Avg Util Status
──────── ────── ────────── ────────── ─────────── ─────── ───────── ──────
MPU-010 43 0.0 0.00 0.01 +33.3% 4.27% ✗
MPU-020 40 0.0 0.00 0.00 -55.6% 4.18% ✗
MPU-110 37 0.0 0.00 0.01 +33.3% 4.19% ✗
MPU-120 40 0.0 0.00 0.01 -11.1% 3.35% ✗
Balanced: NO ✗
Top 15 busiest LDEVs:
LDEV ID Name MPB IOPS MB/s Score Util%
──────────────────── ───────────────────────── ──────── ──────── ──────── ──────── ──────
70128-00:40:00 CS-B85 MPU-110 0.0 0.00 0.00 0.0%
70128-00:0A:11 DGR-TIA MPU-110 0.0 0.00 0.00 1.0%
70128-00:0A:10 DGR-TIA MPU-010 0.0 0.00 0.00 0.5%
70128-00:0A:14 DGR-TIA MPU-020 0.0 0.00 0.00 1.0%
70128-00:0A:15 DGR-TIA MPU-110 0.0 0.00 0.00 1.0%
70128-00:0A:13 DGR-TIA MPU-010 0.0 0.00 0.00 0.5%
70128-00:0A:12 DGR-TIA MPU-120 0.0 0.00 0.00 0.9%
70128-00:0A:17 DGR-TIA MPU-010 0.0 0.00 0.00 0.4%
70128-00:0A:16 DGR-TIA MPU-120 0.0 0.00 0.00 0.9%
70128-00:FE:B1 MPU-020 0.0 0.00 0.00 1.4%
70128-00:FE:D8 MPU-010 0.0 0.00 0.00 0.0%
70128-00:FE:D7 MPU-120 0.0 0.00 0.00 0.0%
70128-00:FE:B0 MPU-010 0.0 0.00 0.00 1.1%
70128-00:FE:D6 MPU-110 0.0 0.00 0.00 0.0%
70128-00:FE:F3 MPU-120 0.0 0.00 0.00 0.9%
================================================================================
AFTER BALANCING
Total LDEVs: 160 MPBs: 4
Average composite load: 0.01 Tolerance: ±2.0%
================================================================================
MPB LDEVs Tot IOPS Tot MB/s Load Score Dev% Avg Util Status
──────── ────── ────────── ────────── ─────────── ─────── ───────── ──────
MPU-010 43 0.0 0.00 0.01 +33.3% 4.27% ✗
MPU-020 40 0.0 0.00 0.00 -55.6% 4.18% ✗
MPU-110 37 0.0 0.00 0.01 +33.3% 4.19% ✗
MPU-120 40 0.0 0.00 0.01 -11.1% 3.35% ✗
Balanced: NO ✗
────────────────────────────────────────────────────────────────────────────────
Migration plan (0 LDEV moves):
────────────────────────────────────────────────────────────────────────────────
No migrations needed — already balanced!
#VSPOneBlock
#VSPOneBlockHighEnd
#VSP360
#VSPOneBlock80Series
#VSPOneBlockManagementSoftware