<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Nikolay Kulikov</title><subtitle>Hey! Hi all, this is a resource where I plan to put my findings and materials on IT and primarily on cloud services and storage technologies.</subtitle><author><name>Nikolay Kulikov</name></author><id>https://teletype.in/atom/nkulikov</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/nkulikov?offset=0"></link><link rel="alternate" type="text/html" href="https://nkulikov.com/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/nkulikov?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T01:01:34.077Z</updated><entry><id>nkulikov:WhatsNew_vSAN80U3</id><link rel="alternate" type="text/html" href="https://nkulikov.com/WhatsNew_vSAN80U3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMware vSAN 8.0 Update 3 - What's New (Complete and in-depth list)</title><published>2024-06-26T13:39:27.278Z</published><updated>2024-06-27T15:50:42.085Z</updated><category term="v-mware-v-san" label="VMware vSAN"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7e/c7/7ec7f687-7683-40d6-971a-4325870f5e81.png&quot;&gt;VMware vSAN 8.0 Update 3 - Whats New (Complete and in-depth list)</summary><content type="html">
  &lt;figure id=&quot;if6L&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/c7/7ec7f687-7683-40d6-971a-4325870f5e81.png&quot; width=&quot;576&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;dkiu&quot;&gt;VMware vSAN Data Protection&lt;/h2&gt;
  &lt;p id=&quot;vaWa&quot;&gt;I think that vSAN Data Protection deserves a separate article, but let&amp;#x27;s briefly describe what it is, how it works and why it is needed.&lt;br /&gt;One of the major improvements to the vSAN ESA architecture was the introduction of new B-tree snapshots. Snapshots that could be created, in theory, in any number, that have no impact on performance either at runtime or at deletion. But before vSAN 8.0U3 the maximum number of snapshots per VM was limited to 32, all workflows remained the same, and you could notice the benefits of the new snapshots either when you made them manually or when some external system (like a backup that uses VADP) created them.&lt;br /&gt;But that has changed in vSAN 8.0 Update 3. VMware vSAN Data Protection is now introduced. It&amp;#x27;s essentially an orchestrator on top of the existing ESA snapshot system that adds new workflows.&lt;br /&gt;The first and most obvious (even by name) use case is to automatically protect data on  vSAN ESA cluster from accidental or malicious deletion.&lt;br /&gt;How it works:&lt;br /&gt;1.) You create a Protection Group (PG) that includes number of VMs. You can form the list by VM name pattern or select them manually. In this case 1 VM can belong up to 3 different PGs.&lt;br /&gt;2.) Specify for this Protection Group the schedule of snapshot creation (up to 10 schedules per PG), retention period (specify fixed date of snapshot deletion, number of retention days or indefinite retention) and immutability (impossibility to manually delete a snapshot before retention period expires). &lt;br /&gt;3.) vSAN Data Protection creates crush-consistent snapshots (up to 200 per VM) according to the schedule and stores them on the vSAN ESA datastore. Please note that at this point, snapshots for all VMs within the PG are not created at absolutely the same time. &lt;br /&gt;4.) If vSAN datastore is 70%+ full, scheduled snapshot creation is stopped to prevent the datastore from filling up.&lt;br /&gt;5.) At any time, you can restore a VM to a state from any stored snapshot or create a VM clone from it. Even if the VM is deleted from vCenter/ESXi, it will still be stored on the vSAN datastore and you can restore and register it again. &lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;eBjq&quot;&gt;The second big use case I see is creating test landscapes from a production environment. You can create a Linked Clone of a production service consisting of one or more VMs for our developers, testers, DBAs or support team to work on. And these snapshots and clones have zero performance impact on the production environment. &lt;/p&gt;
  &lt;p id=&quot;egDL&quot;&gt;Also, vSAN Data Protection integrates with VMware Live Cyber Recovery (ex-VCDR), which allows us to send snapshots there, start VMs from them in a clean Isolated Recovery Environment (IRE), and accelerate Failback.&lt;/p&gt;
  &lt;p id=&quot;bmte&quot;&gt;&lt;br /&gt;That said, vSAN Data Protection as a service is an additional VM on the cluster that needs to be deployed from ova. But the important thing is that it is stateless and all snapshots and metadata are stored on vSAN itself, so even if this VM is also deleted, you just need to deploy a new one and all snapshots will be rediscovered and ready for recovery.  &lt;/p&gt;
  &lt;p id=&quot;p3AP&quot;&gt;Finally, I want to highlight that ESA snapshots are local to the datastore there is why if something goes wrong with vSAN datastore itself snapshots may be lost with the source VM. Thus, you have to consider vSAN Data Protection not as replacement of classical backup and DR solutions but extension of data protection with ultra-fast recovery after breakdowns within the VM and/or operator mistakes or the actions of an intruder.&lt;/p&gt;
  &lt;h2 id=&quot;6cAD&quot;&gt;vSAN Management and Monitoring Improvements&lt;/h2&gt;
  &lt;h3 id=&quot;oMAE&quot;&gt;&lt;strong&gt;Capacity-based licensing support&lt;/strong&gt;. &lt;/h3&gt;
  &lt;p id=&quot;4gxl&quot;&gt;Added support for new subscription licences for vSAN, which, I remind you, are now per-TiB RAW. VCF licences include 1 TiB per core, which can be extended with additional vSAN per-TiB licences, and VVF includes 100GiB promo licences per core (if this is not enough, you have to buy licences for the whole required volume, and these 100GiB are not counted).&lt;br /&gt;The old perpetual licences still work as usual.&lt;/p&gt;
  &lt;h3 id=&quot;bCQ5&quot;&gt;Proactive Hardware Management&lt;/h3&gt;
  &lt;p id=&quot;KU8B&quot;&gt;This functionality facilitates the collection of detailed telemetry data from storage devices across various server vendors. The system utilizes this data to identify potential hardware issues in advance of failure. Server vendors can now integrate their storage device telemetry data through a standardized interface, allowing vSAN to aggregate and analyze this information. The collected data is then processed and presented to system administrators in a structured format, providing insights into the health and performance of storage devices. This approach aims to enhance predictive maintenance capabilities and reduce unexpected downtime by enabling administrators to address potential hardware problems before they escalate into critical issues.&lt;/p&gt;
  &lt;p id=&quot;mR9M&quot;&gt;&lt;br /&gt;The one important thing to understand is that Proactive Hardware Management (PHM) is an optional extension and API that hardware vendors can (but are not required to) use. PHM uses the Hardware Support Manager (HSM) plugin for its operation, which all together are part of the vLCM framework.&lt;/p&gt;
  &lt;p id=&quot;8ZCh&quot;&gt;So far, Dell, HPE and Lenovo have announced support, but you will be able to see for sure in the HCL - there is a separate section that indicates such support.&lt;/p&gt;
  &lt;h3 id=&quot;9G6M&quot;&gt;Customizable Endurance Alerts&lt;/h3&gt;
  &lt;p id=&quot;UG0u&quot;&gt;Starting with vSAN 8.0 Update 2, SMART values for NVMe drives are monitored for ESA clusters. One of the parameters that is often paid attention to is the Endurance of the drives. In vSAN 8.0U2 there are two automatic Alerts - Warning at 90% and Critical at 100%.&lt;br /&gt;In vSAN 8.0 Update 3, the ability to customise these values has been added. Now you can specify your own thresholds and also specify which clusters/hosts/disks to apply them to (ESA only). For example, you can set the alert threshold for a production cluster to 75% and for a test cluster to 85%. Or you can set one threshold for Read-Intensive disks of vendor A and another for Mixed-Used disks of vendor B. This is done by creating a custom alert:&lt;/p&gt;
  &lt;figure id=&quot;PLGS&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/f0/3ff05563-3915-482e-8002-d0b41b7b58e6.jpeg&quot; width=&quot;702&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;cNHX&quot;&gt;Multi-VM I/O Trip Analyzer&lt;/h3&gt;
  &lt;p id=&quot;LZtL&quot;&gt;Previously, I/O Trip Analyzer could only be run for a single VM. Now you can select up to 8 VMs, for example, all the VMs that make up a service that is experiencing problems. Works for both OSA and ESA, requires both vCenter and ESXi to be version 8.0U3&lt;/p&gt;
  &lt;figure id=&quot;SmlL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/82/4a821cc3-f062-4076-b3bd-7fda2fb7c332.jpeg&quot; width=&quot;709&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;dA2g&quot;&gt;New RDMA NIC/FW/Drivers Health Check&lt;/h3&gt;
  &lt;p id=&quot;i9uL&quot;&gt;Now vSAN Health Check have added a NIC check when RDMA is enabled on the cluster. It checks that the NIC is certified for your version of ESXi, certified for your version of vSAN, and also checks that the drivers and firmware match those specified in the HCL.&lt;/p&gt;
  &lt;figure id=&quot;eGn1&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fd/a1/fda10cda-fa08-4f99-a1ac-6c9b74adc02f.jpeg&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;TijR&quot;&gt;VCF Operations support vSAN Max&lt;/h3&gt;
  &lt;p id=&quot;TMZB&quot;&gt;VCF Operations (ex-vRops, ex-Aria Operations) has added support for vSAN Max, within which you can see the connectivity topology (which clusters/hosts vSAN Max is connected to), added Alerting and capacity management. In general, VCF Operations now realises that there is such a thing as vSAN Max and that it is not just another standard vSAN cluster. Although the work is not yet complete (and on many dashboards vSAN Max cannot be distinguished from a regular cluster), this is the first step towards supporting vSAN Max within VCF Operations.&lt;/p&gt;
  &lt;h3 id=&quot;FooF&quot;&gt;&lt;strong&gt;Federated vSAN health monitoring in VCF Operations&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Release-Note-Item-58127&quot;&gt;The latest VCF Operations (ex-Aria Operations) introduces federated vSAN cluster health monitoring for clusters spanning across multiple vCenters.&lt;/p&gt;
  &lt;h3 id=&quot;JMqh&quot;&gt;Security Configuration Guide for vSAN&lt;/h3&gt;
  &lt;p id=&quot;eiDq&quot;&gt;Widely used in critical and secured infrastructures, the vSphere Security Configuration &amp;amp; Hardening Guide now includes vSAN guidance as well.&lt;/p&gt;
  &lt;h3 id=&quot;id-6f73e117-3af3-4316-bec3-b80d714cb7ab&quot;&gt;&lt;strong&gt;Merging the vSAN Management SDK with the Python SDK for the VMware vSphere API&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Tq6H&quot;&gt;Starting with vSphere 8.0 Update 3, the &lt;a href=&quot;https://developer.broadcom.com/sdks/vsan-management-sdk-for-python/latest&quot; target=&quot;_blank&quot;&gt;vSAN Management SDK for Python&lt;/a&gt; is integrated into the Python SDK for the VMware vSphere API (&lt;a href=&quot;https://developer.broadcom.com/sdks/pyvmomi/latest&quot; target=&quot;_blank&quot;&gt;pyVmomi&lt;/a&gt;). From the Python Package Index (&lt;a href=&quot;https://pypi.org/&quot; target=&quot;_blank&quot;&gt;PyPI&lt;/a&gt;), you can download a single package to manage vSAN, vCenter, and ESXi. This integration streamlines the discovery and installation process and enables automated pipelines instead of the series of manual steps previously.&lt;/p&gt;
  &lt;h2 id=&quot;CKPt&quot;&gt;Other vSAN Improvements&lt;/h2&gt;
  &lt;h3 id=&quot;id-9fe120cb-5f0b-43ac-bbde-b4f76711e673&quot;&gt;&lt;strong&gt;Congestion remediation&lt;/strong&gt;. &lt;/h3&gt;
  &lt;p id=&quot;ybp7&quot;&gt;&lt;em&gt;vSAN 8.0 Update 3 enhances vSAN OSA&amp;#x27;s ability to detect and remediate various types of congestion early, preventing cluster-wide I/O latencies.&lt;/em&gt; &lt;/p&gt;
  &lt;p id=&quot;FYvo&quot;&gt;There was actually some very deep and extensive work done here, but its details are not published because they are very low-level. But the key point is that for a very large number of Congestions (they are of different types) at the LSOM level (OSA) has been added technology for early detection of congestion, as well as fixing it if possible. This has the potential to dramatically reduce the number of cases where a congestion is triggered and creates significant back pressure in the cluster, resulting in increased latency and performance degradation.&lt;/p&gt;
  &lt;h3 id=&quot;id-d995b2df-4fe9-4393-b4fe-7e83a0dcf5b6&quot;&gt;&lt;strong&gt;Adaptive delete congestion&lt;/strong&gt;. &lt;/h3&gt;
  &lt;p id=&quot;kOxM&quot;&gt;&lt;em&gt;vSAN now provides adaptive delete congestion for compression-only disk groups in vSAN OSA, improving IOPS performance and delivering more predictable application responses.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;S2tJ&quot;&gt;In short, there is a &amp;quot;Delete congestion&amp;quot; (one of many types of Congestion in vSAN) at the LSOM level, the purpose of which is to prevent the disk from completely filling up in scenarios where the average load is high + we get Heavy Write Burst traffic on a single component. This is relevant for Compression-only disc groups (because in a group with deduplication data is written to all discs in DG more or less evenly), and we also have to take into account the (unknown) degree of compression and incoming zeros.&lt;br /&gt;Past versions of vSAN used static thresholds and current fill, hence the static Congestion values (i.e. two fixed backpressure values). Hence, in some cases, two things could happen - a sharp spike in latency (when Congestion turns on), and also in some extreme cases, Congestion might not have time to react correctly, and the SSD would still fill.&lt;br /&gt;In vSAN 8.0 U3, a forecast is made for the fill rate, and Congestion varies linearly over some range.&lt;/p&gt;
  &lt;h3 id=&quot;id-08a7a1e7-8fe6-49ec-b2bc-621c2e1544ae&quot;&gt;&lt;strong&gt;Device level unmap support for vSAN ESA&lt;/strong&gt;. &lt;/h3&gt;
  &lt;p id=&quot;Kwoq&quot;&gt;&lt;em&gt;This release enhances vSAN ESA to send UNMAP commands when space is freed, improving SSD garbage collection efficiency and overall I/O performance.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;ogVQ&quot;&gt;Most modern SSDs support the UNMAP/Deallocate command, which helps Garbage Collection work on SSDs. This command sends a list of blocks to the disk that can be cleaned/emptied by the SSD controller. To do this, the controller moves data blocks between pages and then clears the free pages. This allows the next time write to a clean block, rather than having to clean it beforehand. And yes, while Garbage Collection on Enterprise SSDs (unlike Consumer-grade SSDs) works always in the background and allows on-the-fly parsing of writes, for Write Intensive workloads and especially on Read Intensive SSDs, pre-clearing space via UNMAP can somewhat increase write speed and write consistency.&lt;br /&gt;Until now, vSAN did not send to the disks a list of blocks to be cleared, thus UNMAP/Deallocate was not used. Now in vSAN 8.0 Update 3, when using ESA, the UNMAP/Deallocate command is sent to the SSD (provided the disk supports it and it has correctly reported it to ESXi) to help SSDs controller and its Garbage Collection mechanisms.&lt;/p&gt;
  &lt;h3 id=&quot;BR5T&quot;&gt;&lt;strong&gt;vSAN File Services now support up to 250 NFS File Shares per cluster.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;aKpX&quot;&gt;It&amp;#x27;s pretty self-explanatory. Now you can create up to 250 NFS shares per vSAN Cluster. This is useful for two main scenarios - if you just need more NFS Shares, but most relevant for K8s where Read-Write-Many Persistent Volumes (RWM PV) is a separate NFS Share. These limits have now increased by 150% from 100 NFS Shares to 250.&lt;br /&gt;Things to note:&lt;br /&gt;1.) This is ONLY for ESAs. For OSAs, the limits are the same as there were (100).&lt;br /&gt;2.) The maximum number of SMB Shares is still 100. &lt;br /&gt;3.) In vSAN 8.0U3, each container can serve up to 25 NFS Shares. But several containers can be running on each host/FSVM, which allows you to get a large number of available NFS Shares even on small clusters, but here you need to take into account the balancing of containers on FSVM and the resources available to them.&lt;/p&gt;
  &lt;h3 id=&quot;nk5t&quot;&gt;As well as many other small improvements under the hood that didn&amp;#x27;t make it into Release Notes and announcements.&lt;/h3&gt;
  &lt;p id=&quot;JGXv&quot;&gt;I&amp;#x27;ll add them if I see public mentions of them.&lt;/p&gt;
  &lt;h2 id=&quot;bL36&quot;&gt;VCF Related Improvements&lt;/h2&gt;
  &lt;h3 id=&quot;pjVT&quot;&gt;VMware Cloud Foundation brownfield ingest.&lt;/h3&gt;
  &lt;p id=&quot;9WHQ&quot;&gt;VMware Cloud Foundation now lets users import existing vSphere and vSAN clusters, including stand-alone vSAN deployments. It simplifies onboarding, speeds up integration, and reduces migration complexity for users upgrading to a full-stack private cloud platform. &lt;/p&gt;
  &lt;figure id=&quot;TqGW&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f2/94/f294310d-62d2-449f-b176-470b39af2223.png&quot; width=&quot;1500&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ADq1&quot;&gt;VMware vSAN ESA Stretched Cluster Support in VMware Cloud Foundation&lt;/h3&gt;
  &lt;p id=&quot;MT6P&quot;&gt;You can now use an ESA-based vSAN Stretched Cluster in the same way that you could previously use an OSA-based Stretched Cluster in VCF environments. The operation/enabling processes, limitations and so on are the same for OSA and ESA. The only nuance is that vSAN MAX in Stretched Cluster configuration is not supported in 5.2&lt;/p&gt;
  &lt;h3 id=&quot;Y3Pw&quot;&gt;VMware vSAN Max Support with VMware Cloud Foundation&lt;/h3&gt;
  &lt;p id=&quot;pXmf&quot;&gt;You can now use vSAN Max as Primary Storage for Workload Domains (including compute-only clusters). The creation and management processes are integrated into the VMware Cloud Foundation workflows and console.  &lt;/p&gt;
  &lt;h2 id=&quot;9Xu1&quot;&gt;Kubernetes Related Improvements&lt;/h2&gt;
  &lt;h3 id=&quot;hUMX&quot;&gt;Use CNS on TKGs on Stretched vSAN&lt;/h3&gt;
  &lt;p id=&quot;8R6G&quot;&gt;&lt;em&gt;Support Stretched vSAN Cluster for TKGs to ensure High Availability.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;eLUJ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/91/35/91355eae-52e9-4147-8676-7b1a710f5a6a.png&quot; width=&quot;954&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NXCh&quot;&gt;Everything is obvious here too, although some specifics should be noted - Control Plane must live in one site (because etcd uses an odd number of nodes and needs quorum), then you use Affinity/Anti-Affinity rules and vSAN Storage Policy to distribute data, workers and control plane between sites correctly and properly.&lt;/p&gt;
  &lt;h3 id=&quot;ywU8&quot;&gt;Enable PV Migration Across Non-shared Datastores within the Same VC&lt;/h3&gt;
  &lt;p id=&quot;M8Xz&quot;&gt;&lt;em&gt;Ability to move a PV either attached or detached from vSAN to vSAN where there is no common host. An example for this would be the ability to move K8s workload from a vSAN OSA cluster to a vSAN ESA cluster.&lt;/em&gt;&lt;/p&gt;
  &lt;h3 id=&quot;gqRV&quot;&gt;Use CNS on vSAN Max&lt;/h3&gt;
  &lt;p id=&quot;dzmF&quot;&gt;&lt;em&gt;Enable support for vSphere Container Storage Plug-in consumers to deploy CSI Volumes to vSAN Max deployments.&lt;/em&gt;&lt;/p&gt;
  &lt;h3 id=&quot;3OmQ&quot;&gt;Enable File Volume in HCI Mesh Topology within a Single Center.&lt;/h3&gt;
  &lt;p id=&quot;S3BJ&quot;&gt;Enable file volume in HCI Mesh with topology within a single VC.&lt;/p&gt;
  &lt;h3 id=&quot;l249&quot;&gt;Up to 250 RWM PV per Cluster&lt;/h3&gt;
  &lt;p id=&quot;ZQGm&quot;&gt;To be honest, this is a repeat because I already wrote about it above in the vSAN File Services enhancements section, but I thought it was important to note it here as well. Because of the increase in the maximum number of NFS File Shares per cluster to 250, you will now be able to use up to 250 RWM PVs per cluster. Again, please note that this is for ESA only. You can see the details above.&lt;/p&gt;
  &lt;h2 id=&quot;eA9R&quot;&gt;vSphere/vCenter Related Improvements&lt;/h2&gt;
  &lt;p id=&quot;OMwk&quot;&gt;This set of features is not directly related to vSAN, but since vSAN and ESXi are two parts of the same whole, I can&amp;#x27;t help but mention them in one line. For details and other new features in vSphere 8.0 Update 3, go &lt;a href=&quot;https://core.vmware.com/resource/whats-new-vsphere-8-update-3&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;h4 id=&quot;h-faster-upgrades-and-no-downtime-with-esxi-live-patching&quot;&gt;ESXi Live Patching&lt;/h4&gt;
  &lt;p id=&quot;iQm1&quot;&gt;With vSphere 8.0 Update 3 we can address critical bugs in the virtual machine execution environment (vmx) without the need to reboot or evacuate the entire host. Examples of fixes include those in the virtual devices space.&lt;/p&gt;
  &lt;p id=&quot;aQU3&quot;&gt;Virtual machines are fast-suspend-resumed (FSR) as part of the host remediation process. This is non-disruptive to most virtual machines. A virtual machine FSR is a non-disruptive operation and is already used in virtual machine operations when adding or removing virtual hardware devices to powered-on virtual machines.&lt;/p&gt;
  &lt;h3 id=&quot;iPbS&quot;&gt;&lt;strong&gt;vCenter Reduced Downtime&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;sou4&quot;&gt;Patch and update vCenter with minimal downtime now includes complete topology support and the ability to automatically perform the switchover phase.&lt;/p&gt;
  &lt;h3 id=&quot;ofCj&quot;&gt;&lt;strong&gt;vSphere Configuration Profiles&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;TgQk&quot;&gt;Manage the configuration of vSphere clusters now including support for clusters using baselines, formerly Update Manager, that have not yet transitioned to cluster images using vSphere Lifecycle Manager. Now supporting baseline-managed clusters in vSphere 8 U3.&lt;/p&gt;
  &lt;h3 id=&quot;sec36129-sub3&quot;&gt;Enhanced Image Customization&lt;/h3&gt;
  &lt;p id=&quot;oQ1z&quot;&gt;You can now exclude individual vendor components from Vendor Addon, VMware Tools, and Host Client from the image. This can reduce the size of the image and also eliminate unnecessary components on the host.&lt;/p&gt;
  &lt;figure id=&quot;ox9i&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/85/15/85156eee-75a7-4cf4-986c-ed71f8dcd315.png&quot; width=&quot;584&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;sec36135-sub1&quot;&gt;Embedded vSphere Cluster Service&lt;/h3&gt;
  &lt;p id=&quot;qn17&quot;&gt;vCLS is becoming more and more convenient and seamless. Now you only need two VMs, but, most importantly, they are now built into ESXi (rather than pulled from vCenter) in form of CRX Runtime, and also run directly in RAM rather than on datastore.&lt;/p&gt;

</content></entry><entry><id>nkulikov:VMC_Instances_Update</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMC_Instances_Update?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>UPDATE: VMware Cloud on AWS (VMC/A) Host Types Comparison </title><published>2024-01-09T12:27:59.759Z</published><updated>2024-01-09T12:27:59.759Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/5e/43/5e433323-3732-4318-a254-19b9a32fd980.png"></media:thumbnail><category term="vmc" label="VMC"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/21/cc/21cc9224-dc8b-42d7-908d-ae72b5f524e1.png&quot;&gt;Due to updates, I've refreshed the comparison table of available node types. The main changes are:
1.) New nodes M7i.metal-24xl
2.) Available vSAN architecture (ESA and/or OSA)
3.) i3.metal are no longer available for new contracts as Reserved Instances.</summary><content type="html">
  &lt;p id=&quot;RGn1&quot;&gt;Due to updates, I&amp;#x27;ve refreshed the comparison table of available node types. The main changes are:&lt;br /&gt;1.) New nodes M7i.metal-24xl&lt;br /&gt;2.) Available vSAN architecture (ESA and/or OSA)&lt;br /&gt;3.) i3.metal are no longer available for new contracts as Reserved Instances.&lt;/p&gt;
  &lt;p id=&quot;CNCQ&quot;&gt;You are welcome to take advantage of this! &lt;/p&gt;
  &lt;figure id=&quot;D6ei&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/21/cc/21cc9224-dc8b-42d7-908d-ae72b5f524e1.png&quot; width=&quot;1995&quot; /&gt;
    &lt;figcaption&gt;VMC/A Instances&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>nkulikov:VMC_Storage_Optimizations_Part2</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMC_Storage_Optimizations_Part2?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMware Cloud on AWS Optimizations in Storage-bounded environments. Part 2. Optimize VMC on AWS infrastructure.</title><published>2023-12-18T17:43:50.767Z</published><updated>2024-04-23T23:10:53.954Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/3f/1c/3f1cb7d7-7445-4d1a-a4f2-50e5f8366b92.png"></media:thumbnail><category term="vmc-storage-optimizations" label="VMC Storage Optimizations"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7e/77/7e776454-5a9d-42e5-9d04-690f1c61ccde.png&quot;&gt;So, we come to the second part. You've done all the steps in part one, but you still need more space (or you realize that you can reduce the number of hosts from a Compute perspective, but not Storage). Then you need to start optimizing the VMC on AWS infrastructure itself. There will be 3 main steps here, just like in the last article - optimize storage policies, optimize host types and vSAN, and optimize clusters.</summary><content type="html">
  &lt;p id=&quot;4bm3&quot;&gt;So, we come to the second part. You&amp;#x27;ve done all the steps in &lt;a href=&quot;https://nkulikov.com/VMC_Storage_Optimizations_Part1&quot; target=&quot;_blank&quot;&gt;part one&lt;/a&gt;, but you still need more space (or you realize that you can reduce the number of hosts from Compute perspective, but not Storage). Then you need to start optimizing the VMC on AWS infrastructure itself. There will be three main steps here, just like in the last article - optimize storage policies, optimize host types and vSAN type, and optimize clusters.&lt;/p&gt;
  &lt;h2 id=&quot;D7ej&quot; data-align=&quot;center&quot;&gt;Storage Policies.&lt;/h2&gt;
  &lt;h3 id=&quot;ZeWP&quot; data-align=&quot;center&quot;&gt;SLA-compliant storage policies.&lt;/h3&gt;
  &lt;p id=&quot;nSDt&quot;&gt;Note: This part is dedicated exclusively to vSAN OSA based clusters as the main architecture used at the moment. I will talk about vSAN ESA later.&lt;/p&gt;
  &lt;p id=&quot;Q9B6&quot;&gt;Many customers use &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vsphere.vmc-aws-manage-data-center-vms.doc/GUID-EDBB551B-51B0-421B-9C44-6ECB66ED660B.html&quot; target=&quot;_blank&quot;&gt;Managed Storage Policies&lt;/a&gt; by default. This is a Storage Policy that is created (and changed) automatically, depending on the size of your cluster, to meet SLAs. This is convenient, but not always optimal in terms of storage efficiency. The fact is that the default policy is as follows:&lt;br /&gt;&lt;/p&gt;
  &lt;ul id=&quot;e3IU&quot;&gt;
    &lt;li id=&quot;ihJu&quot;&gt;Single AZ - Mirror FTT=1 if hosts from 2 to 5, and RAID6 for 6+ hosts. &lt;/li&gt;
    &lt;li id=&quot;Um09&quot;&gt;Multi AZ (Stretched Cluster) - if there are less than 4 hosts (i.e. Up to two in each AZ) then no local copies, if there are more than 6 hosts (i.e. From 3 in each AZ) then Mirror FTT=1 within each AZ. Plus of course a copy between AZs.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9Gl9&quot;&gt;Now if you look at the &lt;a href=&quot;https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/support/vmw-cloud-aws-service-level-agreement.pdf&quot; target=&quot;_blank&quot;&gt;VMC/A SLA document&lt;/a&gt;, it says the following:&lt;/p&gt;
  &lt;ul id=&quot;kGz9&quot;&gt;
    &lt;li id=&quot;YA5m&quot;&gt;&lt;em&gt;For non-stretched clusters, you must have a minimum configuration for all VM storage policy Numbers of Failures to Tolerate (FTT) = 1 when the cluster has 2 to 5 hosts, and a minimum configuration of FTT = 2 when the cluster has 6 to 16 hosts. &lt;strong&gt;This is not dependent on RAID levels&lt;/strong&gt;.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;gmpW&quot;&gt;&lt;em&gt;For stretched clusters with four hosts or less, spanning across more than one availability zone, you must have a minimum configuration for all VM storage policy Site Disaster Tolerance (PFTT) = Dual Site Mirroring.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;0bis&quot;&gt;&lt;em&gt;For stretched clusters with six hosts or more, spanning across more than one availability zone, you must have a minimum configuration for all VM storage policy Site Disaster Tolerance (PFTT) = Dual Site Mirroring and Secondary level of failures to tolerate (SFTT) = 1. &lt;strong&gt;This is not dependent on RAID levels&lt;/strong&gt;.&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mXP4&quot;&gt;Note the phrase &amp;quot;&lt;strong&gt;This is not dependent on RAID levels&lt;/strong&gt;&amp;quot;, i.e. you can change the FTT Method (between Mirroring and Erasure Coding) as you like and meet the SLA requirements, as long as the FTT is not less than the required for your cluster size.&lt;/p&gt;
  &lt;p id=&quot;AGYt&quot;&gt;Let&amp;#x27;s start with Single AZ case and now turn &lt;a href=&quot;https://core.vmware.com/resource/vmware-vsan-design-guide#sec6854-sub5&quot; target=&quot;_blank&quot;&gt;to the table&lt;/a&gt; where we can see the available vSAN Storage Policies for Single AZ for each number of nodes and the capacity overhead from each of them:&lt;/p&gt;
  &lt;figure id=&quot;1NPB&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/77/7e776454-5a9d-42e5-9d04-690f1c61ccde.png&quot; width=&quot;1794&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yKiJ&quot;&gt;&lt;br /&gt;We can clearly see that for 6+ nodes, the most efficient policy used (since we need FTT=2) is RAID 6 with overhead 1.5. But for small clusters of 2 to 5 nodes, Mirror with x2 overhead is used, even though RAID5 with 1.33 is available for cluster sizes of 4-5 nodes.&lt;/p&gt;
  &lt;p id=&quot;8ifF&quot;&gt;Now for Multi-AZ (Stretched Cluster) a similar table&lt;a href=&quot;https://core.vmware.com/resource/vsan-stretched-cluster-guide#per-site-policies&quot; target=&quot;_blank&quot;&gt; is here&lt;/a&gt;. I won&amp;#x27;t give you the whole table because it&amp;#x27;s quite long, but it&amp;#x27;s obvious that for clusters larger than 8 nodes (i.e. 4+ in each AZ) we can use RAID5 instead of Mirror. This will reduce our total overhead (including copies between AZs) from x4 to x2.66, i.e. almost by half. &lt;/p&gt;
  &lt;p id=&quot;pQOt&quot;&gt;I realize that numbers in this form can be hard to take in, so I made a spreadsheet for clarity:&lt;/p&gt;
  &lt;figure id=&quot;7MuN&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/9d/0c9da066-a07d-407d-b63b-4d4fbd257e6d.png&quot; width=&quot;2408&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TnOc&quot;&gt;As a result, if your cluster size is within the range marked in green, you can gain additional capacity simply by changing your storage policy. But of course, everything has a price, so I&amp;#x27;ll point out the disadvantages of this approach:&lt;/p&gt;
  &lt;ul id=&quot;o6Xt&quot;&gt;
    &lt;li id=&quot;GjrB&quot;&gt;For Single AZ, you will have to manually monitor cluster size and change the policy if your cluster grows to 6 nodes or more to meet SLA requirements.&lt;/li&gt;
    &lt;li id=&quot;rIWE&quot;&gt;Performance of RAID5 in OSA is lower than for Mirror (especially in terms of latency). Therefore, the most performance and latency critical workloads may need to be left on Mirror. As always, mileage may vary and look at your workloads and test.&lt;/li&gt;
    &lt;li id=&quot;SpYp&quot;&gt;Changing the policy from Mirror to Erasure Coding (RAID5, RAID6) can take a relatively long time, while putting additional load on vSAN. So, the general recommendation is the quite standard - apply the policy not to all VMs at once, but one by one and do it not at the time of peak workloads.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;whnO&quot; data-align=&quot;center&quot;&gt;Storage policies non-compliant with SLA requirements.&lt;br /&gt;&lt;/h3&gt;
  &lt;p id=&quot;NMpE&quot;&gt;Another way (however risky and not always appropriate) is to break the SLA requirements and make the storage policy even more cost-effective. Here again we will refer to the document describing SLA in VMC on AWS. The following line can be found there:&lt;br /&gt;&lt;em&gt;&amp;quot;If an SLA Event occurs for your SDDC Infrastructure, it applies to a cluster within the SDDC. For each SLA Event for a cluster, you are entitled to an SLA Credit proportional to the number of hosts in that cluster.&amp;quot;&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;hr2q&quot;&gt;&lt;br /&gt;I.e. SLA for workloads is evaluated for each cluster separately. This means that we can create a separate cluster for our non-critical workloads or those workloads where we are not interested in SLA compliance and are ready to take risks. At the same time, the workloads on the main/production clusters will still be subject to SLA conditions, if Storage Policy there is complaint. For sure we can do this for main/production cluster as well but it&amp;#x27;s even more extreme scenario. &lt;/p&gt;
  &lt;p id=&quot;VW2i&quot;&gt;I will not repeat all the calculations I did above, simply because they are completely similar, and I will give you the final table separately for Single AZ and Multi AZ. In it I have &lt;strong&gt;marked in red the fields where we don&amp;#x27;t have any data protection and in green where we have at least one copy&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;Qy0b&quot; data-align=&quot;center&quot;&gt;&lt;br /&gt;&lt;strong&gt;Non-complaint Storage Policies for Single AZ&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;J41y&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/24/f4/24f49536-a70c-4629-adf5-82b6bd3ca24b.png&quot; width=&quot;1559&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ge3Q&quot;&gt;You can clearly see that the only way to save capacity in any meaningful way is to switch to FTT0, since the other options do not provide any significant savings and also break the SLA. As a reminder, FTT0 means that you will only have a single copy of your data. This means that in case of any failure (disk failure, node failure) you will lose your data with no possibility to recover it. Moreover, since data placement on disks/nodes is done automatically by vSAN itself based on the current disks utilization and you cannot control it (vSAN Host Affinity feature is not available in VMC on AWS), you can&amp;#x27;t protect workloads also at the application level. The disks of two VMs of the software cluster can be located on the same node and if it fails, you will lose both copies. And the only way to protect the service/data is to place VMs of the software cluster on different vSAN clusters, which is not always convenient and makes sense, and also you will have to manually recreate VMs and rebuild the software cluster. While this is possible, I suggest agreeing on that all VMs/services hosted with FTT0 policy will lose data if any failure happen. &lt;/p&gt;
  &lt;p id=&quot;eQlI&quot;&gt;In this case, this means that there are fundamentally several main types of candidates to be placed on FTT0 - stateless services, workloads that can be easily recreated or that are unimportant, and their failure does not have any impact on the operation. &lt;/p&gt;
  &lt;p id=&quot;0nU7&quot;&gt;As an example of stateless services, I can mention caching stateless services or data analysis that is performed on a copy of the data (and the original data is stored in a durable storage). In this scenario, if a failure occurs, we risk either losing some performance or just the time it takes to restart the job, which in some cases is quite acceptable. Test environments for automated testing can also be considered as an example of suitable workloads. For them similarly, in case of failure it will be enough to restart the test. Other &amp;quot;unimportant workloads&amp;quot; include various test environments, temporary workloads, etc. In general, a good indicator of applicability are two factors - whether a backup of this system doesn&amp;#x27;t exist (or rather is not needed) or how long it will take to redeploy the VM to restore its function.&lt;/p&gt;
  &lt;p id=&quot;HmH4&quot;&gt; &lt;br /&gt;But as usual, evaluation criteria and their importance are different for everyone, so carefully and individualistically approach this task and consult with the application/service owner. The last thing I would like to point out is that using FTT0 not only saves a lot of space, but also allows for significant performance improvements, even compared to Mirror FTT1. So that may be an additional factor.&lt;/p&gt;
  &lt;p id=&quot;XVKP&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Non-complaint Storage Policies for Multi AZ&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;DIiw&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e5/f7/e5f74dce-5308-46dc-9845-5d5d24af156f.png&quot; width=&quot;1560&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Fs0l&quot;&gt;But in the stretched cluster scenario, we see that the situation is fundamentally different. The point is that in VMC on AWS, all clusters within a single SDDC must be of the same type - either all MultiAZ or all Single AZ. Having said that, it is obvious that availability requirements can vary significantly and not all workloads in a company may require AZ failure protection. Also, in a stretched cluster, SLA compliance requires mirroring between AZs, which is not space efficient (x2) and also adds latency to writes due to synchronous replication to the second AZ. &lt;/p&gt;
  &lt;p id=&quot;IedA&quot;&gt;So, first of all, you can of course use FTT=0, but the considerations are completely similar to the last paragraph, so I won&amp;#x27;t dwell on that again, but instead consider the scenario where we still want data protection, but we are happy with protection against any single failure or even two.&lt;/p&gt;
  &lt;p id=&quot;Cugq&quot;&gt;In the first case, for clusters larger than 6 nodes (3 at each site) you may not use local copies (within AZs), but only replicate between AZs. So, it works out like a normal Mirror FTT=1 (and similar to the scenario where you have less than 6 nodes in the stretched cluster), and the systems will still be available if one of the AZs fails. If a separate host failure occurs, the data will be available from the second AZ (but keep in mind this will add latency on reads equal to RTT because there will be no more local read until the rebuild is complete).&lt;/p&gt;
  &lt;p id=&quot;Mo3K&quot;&gt;In the second case, we don&amp;#x27;t protect the data from AZ failure, but we store local copies within the AZ. And you can store them not only as a mirror, but also using Erasure Coding (RAID5, RAID6) if you have enough nodes to do so (4+). This means that you can use the space more efficiently and also provide protection against up to two failures. Also, in terms of performance you have no additional latency due to writing to the remote AZ. The downside to this approach (aside from the obvious lack of AZ crash protection) is that you have to manually monitor the capacity in each AZ and manually place VMs on one or another AZ. Also, to avoid reads from a remote AZ, use &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-41F54C2A-7C1C-4BE2-8C66-717EC4991BD4.html&quot; target=&quot;_blank&quot;&gt;VM-Host Affinity Compute Profiles&lt;/a&gt; to ensure that VMs are running where their data resides.&lt;/p&gt;
  &lt;p id=&quot;cc8S&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;cn4l&quot; data-align=&quot;center&quot;&gt;Migrate to vSAN ESA-based clusters.&lt;/h2&gt;
  &lt;p id=&quot;Sn5V&quot;&gt;VMC on AWS 1.24 introduced support for vSAN Express Storage Architecture (ESA). An overview of this biggest change since vSAN version 1.0/5.5 is &lt;a href=&quot;https://core.vmware.com/blog/introduction-vsan-express-storage-architecture&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;, but I&amp;#x27;ll give the main differences:&lt;/p&gt;
  &lt;ul id=&quot;E92M&quot;&gt;
    &lt;li id=&quot;g0ak&quot;&gt;New architecture for local disk handling (LSOM) - no more Disk Groups with separate cache and capacity disks. Now all host disks are a single pool, each providing both usable capacity and performance.&lt;/li&gt;
    &lt;li id=&quot;lMDv&quot;&gt;New Erasure Coding (RAID5/6). All writes go first to the small Performance-leg components in Mirror, then the data from them is written full stripe to the Capacity-leg in the EC. In short, this allows for performance (in terms of both latency and IOPS) similar to Mirror for EC.&lt;/li&gt;
    &lt;li id=&quot;NgW1&quot;&gt;Data Services such as compression and encryption now operate at the individual object level (DOM-layer) rather than at the disk group level. This allows for a significant reduction in overhead, as well as more granular management.&lt;/li&gt;
    &lt;li id=&quot;I4xb&quot;&gt;Very long-awaited performance penalty-free snapshots. Now there is no impact from creating, storing a chain of snapshots, as well as deleting them.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;j1Mg&quot;&gt;I&amp;#x27;ve deliberately simplified a lot of things and also left a lot out, but if you&amp;#x27;re interested in the details go &lt;a href=&quot;https://core.vmware.com/vsan-esa&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;FyYy&quot;&gt;Getting back to our topic of optimizing storage capacity in VMC on AWS, here are the following advantages that ESA has over OSA:&lt;/p&gt;
  &lt;ul id=&quot;Dc5Z&quot;&gt;
    &lt;li id=&quot;jtmQ&quot;&gt;Each disk in the host now provides capacity, which increases the total available capacity. Previously some of the disks only acted as a write buffer and did not contribute to persistent storage.&lt;/li&gt;
    &lt;li id=&quot;uHlt&quot;&gt;The new Erasure Coding allows it to be used for all workloads without exception from performance point of view. And since Erasure Coding is more efficient than Mirror, it allows you to gain additional space if previously some data was stored in Mirror due to performance considerations.&lt;/li&gt;
    &lt;li id=&quot;qIA6&quot;&gt;Introduced a new RAID5 level with a 2 data + 1 parity scheme. This allows to use R5 (2+1) with x1.5 overhead already on three nodes, where previously only Mirror with x2 was available and RAID5 required a minimum of four nodes. There is also available R5 (4+1) scheme with x1.2 overhead.&lt;/li&gt;
    &lt;li id=&quot;nLbF&quot;&gt;Much more efficient compression. In ESA, each 4K is compressed in 512b increments. I.e. 4K, 3.5K, 3K, ..., 512b are possible. This significantly increases compression efficiency, because in OSA the mechanism is different - if a 4K block is compressed by 50% or more, exactly 2K is written, and if less, the original 4K block is written. In ESA we not only get the possibility to increase the maximum compression up to 8x (against 2x in OSA), but also because of intermediate values the average compression ratio increases significantly.&lt;/li&gt;
    &lt;li id=&quot;0Xws&quot;&gt;As I wrote in the last article, TRIM/UNMAP is enabled by default. &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dI5c&quot;&gt;If we compare the available usable capacity on the first/main ESA-based cluster (so counting capacity for management components) with an OSA-based (with the most efficient SLA-compliant storage policy) with the same compression efficiency, we get the following values:&lt;/p&gt;
  &lt;figure id=&quot;PpGT&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c7/2c/c72c5780-2742-4593-9f10-648d7fd5c05c.png&quot; width=&quot;1236&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9K9m&quot;&gt;You can clearly see that the largest effect (almost 60%) is on the 3-host cluster due to the new Erasure Coding 2+1.  For all clusters starting with 6 hosts there is about 12% more available space due to the absence of dedicated cache disks (in both cases using RAID6 4+2). However, for four and five hosts clusters there is almost no difference (technically minus ~1%) - this is due to the fact that ESA has no 3+1 RAID5 scheme, so the efficiency for ESA is 1.5 vs. 1.33 in OSA, which compensates for more raw storage available.&lt;/p&gt;
  &lt;p id=&quot;JkJg&quot;&gt;In addition, you can get better compression efficiency on top. Unfortunately, there are no public numbers on average compression ratios yet and VMware is still gathering data based on the early real customer installations of ESA-based clusters in VMC on AWS, but it&amp;#x27;s pretty clear that it will be better than OSA and the question is just how much better. Also note that compression is now a storage policy level setting, not a cluster-wide setting. So, you can disable it for individual VMs where you don&amp;#x27;t expect any compression - such as already compressed databases, media files, data encrypted at the guest OS or application level.&lt;/p&gt;
  &lt;p id=&quot;KSHz&quot;&gt;It&amp;#x27;s hard to think of any particular disadvantages of vSAN ESA over OSA that would be relevant for use in VMC on AWS, but there are limitations that may currently make it impossible to use:&lt;br /&gt;&lt;/p&gt;
  &lt;ul id=&quot;zN0B&quot;&gt;
    &lt;li id=&quot;aSkt&quot;&gt;SDDC must be updated to the latest currently available version 1.24&lt;/li&gt;
    &lt;li id=&quot;7Y9o&quot;&gt;Only i4i nodes are supported. ESA is not available on i3, i3en and of course on M7i (because there are no disks at all).&lt;/li&gt;
    &lt;li id=&quot;cI1F&quot;&gt;Stretched cluster / Multi-AZ including the particular case of a 2-node cluster is not supported at the moment.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;E2j5&quot;&gt;If you don&amp;#x27;t fall within these limitations, the obvious recommendation is to go to ESA.&lt;/p&gt;
  &lt;h3 id=&quot;62qx&quot; data-align=&quot;center&quot;&gt;Migration from OSA to ESA&lt;/h3&gt;
  &lt;p id=&quot;Wjb5&quot;&gt;Currently, in-place migration is not supported, so there are two ways to migrate data from OSA to ESA.&lt;/p&gt;
  &lt;p id=&quot;LHeT&quot;&gt;&lt;br /&gt;The first is to create a new separate cluster based on ESA, migrate (vMotion, Cold Migration, etc) VMs from the current clusters to the new one, then remove nodes from the OSA-based clusters. This works fine for not the primary/first cluster, but all those that were created additionally. And for the primary cluster, there&amp;#x27;s the problem that you cannot migrate management components this way. In this case, you can do the following - move all (or almost all, to make the most efficient use of available resources) the productive workloads and leave the first cluster on OSA as the minimum possible management cluster (e.g., two nodes). This usually makes sense if you have a large enough number of hosts in VMC on AWS and/or if the benefit of moving to ESA (and reducing the number of nodes required as a result) outweighs the cost of creating a dedicated management cluster (but don&amp;#x27;t forget that if you place management components on a shared cluster, resources are still consumed there and therefore cannot be allocated to workloads and this should be taken into account). There are other benefits to building a dedicated management cluster, such as isolating production workloads from management workloads, but that is a bit beyond the scope of this article. Great document about planning management cluster in VMC on AWS is &lt;a href=&quot;https://vmc.techzone.vmware.com/resource/designlet-vmware-cloud-aws-management-cluster-planning#summary-and-considerations&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;93cn&quot;&gt;The second option, which is particularly well suited for smaller VMC on AWS installations, is to create a new SDDC based on ESA. While this is noticeably more time-consuming (because at a minimum, you&amp;#x27;ll need to migrate network settings, security, etc.), if the infrastructure in VMC on AWS is simple and/or small enough, it can make sense. When you need it and what it can give you:&lt;br /&gt;&lt;/p&gt;
  &lt;ul id=&quot;ZTFS&quot;&gt;
    &lt;li id=&quot;kUdW&quot;&gt;You can migrate your entire infrastructure to an ESA, including the first/primary cluster.&lt;/li&gt;
    &lt;li id=&quot;jwdX&quot;&gt;You need or want to run VMC on AWS in a different region (due to price or business requirements).&lt;/li&gt;
    &lt;li id=&quot;POYg&quot;&gt;You need or want to move from Single-AZ SDDC to Multi-AZ SDDC or vice versa. &lt;/li&gt;
    &lt;li id=&quot;NWU0&quot;&gt;You see the value or need to change Subnets for Management network and/or AWS VPC. &lt;/li&gt;
    &lt;li id=&quot;ZE32&quot;&gt;You need or want to change the host type. Although you &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-41A16A95-CFC5-4F02-8B92-1D294ADE3564.html&quot; target=&quot;_blank&quot;&gt;can do this in the current cluster/SDDC as well&lt;/a&gt;, here it will be done at the same time.&lt;/li&gt;
    &lt;li id=&quot;3hyG&quot;&gt;First, you don&amp;#x27;t have to wait for your SDDC to be updated to 1.24. &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1dW8&quot;&gt;A document that describes one option for such a migration is available &lt;a href=&quot;https://vmc.techzone.vmware.com/resource/designlet-vmware-cloud-aws-hcx-cloud-cloud-c2c-migration-between-sddcs#introduction&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;
  &lt;h2 id=&quot;y7kk&quot; data-align=&quot;center&quot;&gt;Optimize Host Type. &lt;/h2&gt;
  &lt;p id=&quot;lkFc&quot;&gt;There are currently four node types available* in VMC on AWS:&lt;/p&gt;
  &lt;ol id=&quot;Yg7i&quot;&gt;
    &lt;li id=&quot;VfKK&quot;&gt;i3 is the very first and probably still the most popular node type. These are General Propose nodes with a balanced ratio of capacity and compute resources. But in January 2023 it was &lt;a href=&quot;https://blogs.vmware.com/cloud/2023/01/13/announcement-of-the-end-of-sale-end-of-support-and-end-of-life-timeline-of-the-i3-metal-instance-type-of-vmware-cloud-on-aws/&quot; target=&quot;_blank&quot;&gt;announced&lt;/a&gt; that these nodes are no longer available as Reserved Instances, but many customers are still using them as they were purchased before and are still in use.&lt;/li&gt;
    &lt;li id=&quot;qYJI&quot;&gt;i4i - these nodes came to replace &lt;a href=&quot;https://blogs.vmware.com/cloud/2022/08/30/announcing-a-new-instance-type-for-vmware-cloud-on-aws-i4i-metal/&quot; target=&quot;_blank&quot;&gt;i3 in summer 2022&lt;/a&gt;. In terms of resources this is a doubled i3, but based on much more modern hardware. You could say that these are now the main type of hosts and are being migrated to from i3.&lt;/li&gt;
    &lt;li id=&quot;R3wb&quot;&gt;i3en - Storage-heavy hosts. They are popular with customers who need to store a lot of data relative to compute resource requirements.&lt;/li&gt;
    &lt;li id=&quot;6ILK&quot;&gt;M7i - The newest nodes that were &lt;a href=&quot;https://blogs.vmware.com/cloud/2023/11/28/announcing-leading-edge-architectural-innovation-for-vmware-cloud-on-aws-to-support-next-gen-workloads/&quot; target=&quot;_blank&quot;&gt;announced&lt;/a&gt; in November 2023. The distinguishing feature is that they do not use local SSDs and vSAN but storage resources are provided based on &lt;a href=&quot;https://www.vmware.com/products/vmc-flex-storage.html&quot; target=&quot;_blank&quot;&gt;VMware Flex Storage&lt;/a&gt; or &lt;a href=&quot;https://aws.amazon.com/blogs/apn/amazon-fsx-for-netapp-ontap-with-vmware-cloud-on-aws-virtual-machines/&quot; target=&quot;_blank&quot;&gt;FSx for NetApp ONTAP&lt;/a&gt;. At the time of this writing, they are in Tech.Preview and are only available in a limited number of regions. &lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;uYnJ&quot;&gt;It is sometimes the situation that when VMC on AWS infrastructure is calculated, the resource requirements are not yet fully known, or they may have changed since the project started. Also, at the time of original host procurement, some host types (e.g. i4i or m7i) may not be available yet, so current clusters may not be built on the optimal host type. &lt;br /&gt;Second, after making optimizations in terms of storage capacity, your requirements may have decreased as well as your Compute to Capacity ratio.&lt;br /&gt;And finally, as you use VMC on AWS, your competency has grown, as well as your understanding of your workloads and how VMC on AWS matches them.&lt;/p&gt;
  &lt;p id=&quot;Ip3B&quot;&gt;Therefore, one way to further optimize costs is to distribute your workloads across the most optimal types of nodes and clusters. And while for relatively small VMC on AWS installations you should consider simply converting the cluster to other nodes in the first place, for larger installations it makes sense to create separate clusters for different tasks based on different types of nodes.&lt;/p&gt;
  &lt;p id=&quot;fQQ4&quot;&gt;Therefore, one way to further optimize costs is to distribute your workloads across the most optimal types of nodes and clusters. And while for relatively small VMC on AWS installations you should consider simply converting the cluster to other nodes in the first place, for larger installations it makes sense to create separate clusters for different tasks based on different types of nodes.&lt;/p&gt;
  &lt;p id=&quot;e3UX&quot;&gt;Unfortunately, there is no one-size-fits-all solution on how to do this optimization, but I will show you a way that will allow you to simplify this task a bit:&lt;br /&gt;&lt;/p&gt;
  &lt;ol id=&quot;2hRc&quot;&gt;
    &lt;li id=&quot;u7o7&quot;&gt;Make an inventory of all VMs in your VMC on AWS. You can do this by doing a custom report in Aria for Operations or RVTools and upload it to an excel file. There should be a list of VMs and the main characteristics of the VM (vCPU, RAM, Usable Storage).&lt;/li&gt;
    &lt;li id=&quot;WAuy&quot;&gt;Divide all workloads into several classes. Obviously, it makes sense to classify by workload type - Production, Test/Dev, VDI, etc, but from the point of view of capacity optimization it is interesting to understand the requirements for the storage subsystem. I propose to categorize them as follows:&lt;/li&gt;
    &lt;ol id=&quot;xRx8&quot;&gt;
      &lt;li id=&quot;bvZp&quot;&gt;Large (in terms of capacity) VMs, but which do not have special requirements for disk subsystem performance, as well as Compute. These are candidates for migrating to External NFS (I will cover this in the next article) with i4i or possibly M7i (if they are already available in your region).&lt;/li&gt;
      &lt;li id=&quot;NkvD&quot;&gt;Large VMs (in terms of capacity footprint), but which require a fast storage subsystem and/or have tight latency requirements. For example, Databases. These are candidates for i3en type nodes.&lt;/li&gt;
      &lt;li id=&quot;G3is&quot;&gt;VMs with high requirements in terms of Compute, but minimal requirements for the storage subsystem. These are candidates for i4i or M7i&lt;/li&gt;
      &lt;li id=&quot;06zM&quot;&gt;All other VMs without any special requirements.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;oL21&quot;&gt;Calculate the total resource requirements for each type.&lt;/li&gt;
    &lt;li id=&quot;65Wx&quot;&gt;Try to allocate them to clusters of different types. Use &lt;a href=&quot;https://vmc.vmware.com/sizer/&quot; target=&quot;_blank&quot;&gt;VMC Sizer&lt;/a&gt; for this purpose. Great guide about VMC Sizer is &lt;a href=&quot;https://vmc.techzone.vmware.com/resource/feature-brief-vmware-cloud-sizer&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. Your task is to minimize the total cost of all nodes. You can usually achieve this by utilizing all resources on each cluster as evenly as possible. I would suggest that you start with i4i to check if everything can be placed there. If not, remove storage intensive workloads (as candidates for i3en) and check again. If you see that the amount of workloads is enough to make sense to dedicate a separate cluster, then try that. And further, to fill evenly, both in terms of compute resources and capacity, then add individual workloads from category 4 until you achieve more or less even utilization.&lt;/li&gt;
    &lt;li id=&quot;GKew&quot;&gt;Evaluate the cost of all the resulting nodes. If it is lower than it is now, then consider how much it makes sense to shift the workloads (taking into account the increased complexity of infrastructure management, scaling, etc). If this does not reduce the cost, then look at what is making a noticeable contribution and try redistributing again. &lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;ix1L&quot;&gt;&lt;br /&gt;In general, it&amp;#x27;s such an interactional process and with no guarantees that optimization will actually work. As a rule, it works only on sufficiently large infrastructures, when it is possible and makes sense to create several large clusters.&lt;/p&gt;

</content></entry><entry><id>nkulikov:VMC_Storage_Optimizations_Part1</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMC_Storage_Optimizations_Part1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMware Cloud on AWS Optimizations in Storage-bounded environments. Part 1. Reduce amount of data you store.</title><published>2023-12-04T12:05:45.295Z</published><updated>2024-04-23T23:01:28.157Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/eb/4e/eb4ec3f4-445f-427c-b6fc-76be0c67bfd4.png"></media:thumbnail><category term="vmc-storage-optimizations" label="VMC Storage Optimizations"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/83/4b/834bb2f7-9f7c-43f0-b2ac-6c6744df1957.png&quot;&gt;It's no secret that many infrastructures in VMC on AWS are bounded by storage capacity rather than compute resources. That is, the number of hosts is determined by the usable capacity requirements on the cluster, while there are spare/free compute resources. This relationship follows directly from the fact that VMC on AWS utilizes VMware vSAN-based hyperconverged infrastructure as its primary storage, and therefore there is an explicit capacity/compute resource ratio. That said, there are three types of nodes available in VMC on AWS (or even two if we're talking about Reserved Instances since i3 is now available only on demand) and these ratios are not always exactly what is required. Within this article I would like to talk about what...</summary><content type="html">
  &lt;h2 id=&quot;A11m&quot; data-align=&quot;center&quot;&gt;Intro&lt;/h2&gt;
  &lt;p id=&quot;swOU&quot;&gt;It&amp;#x27;s no secret that &lt;strong&gt;many infrastructures in VMC on AWS are bounded by storage capacity rather than compute resources&lt;/strong&gt;. That is, the number of hosts is determined by the usable capacity requirements on the cluster, while there are spare/free compute resources. This situation follows directly from the fact that VMC on AWS use VMware vSAN hyperconverged infrastructure as its primary storage, and therefore there is an explicit capacity/compute resource ratio. That said, there are four types of nodes available in VMC on AWS (or even two if we&amp;#x27;re talking about Reserved Instances since i3 is now available only on demand and M7i is in tech.preview and diskless in principle) and these ratios are not always exactly what is required. &lt;br /&gt;Within this article I would like to talk about what you can use and what approaches you can take to optimize your VMC on AWS infrastructure, reduce the number of nodes, and thus &lt;strong&gt;pay less&lt;/strong&gt; money to VMware and AWS. 😊&lt;/p&gt;
  &lt;p id=&quot;PuDB&quot;&gt;I will describe the various steps in the order I &lt;strong&gt;personally&lt;/strong&gt; &lt;strong&gt;recommend&lt;/strong&gt;. &lt;/p&gt;
  &lt;h2 id=&quot;zWQw&quot; data-align=&quot;center&quot;&gt;Reduce amount of data you store&lt;/h2&gt;
  &lt;p id=&quot;W622&quot;&gt;First step is related to basic IT hygiene. You don&amp;#x27;t need any additional solutions or technology, but you will need time to figure it out, as well as perhaps some organizational efforts.&lt;/p&gt;
  &lt;p id=&quot;NWfm&quot;&gt;The main point of them is to keep only what you really need and get rid of various waste. Following will be a few examples and the most popular and effective steps to reduce the amount of data stored.&lt;/p&gt;
  &lt;h2 id=&quot;VBcD&quot; data-align=&quot;center&quot;&gt;Get rid of all unnecessary VMs/vmdks and snapshots&lt;/h2&gt;
  &lt;p id=&quot;TMNq&quot;&gt;I don&amp;#x27;t want to populate on this for too long simply because I think it&amp;#x27;s pretty obvious, but the main thing is that there are already a lot of &lt;a href=&quot;https://www.vmwareopsguide.com/operations-management/chapter-3-capacity-management/1.3.11-reclamation/&quot; target=&quot;_blank&quot;&gt;great papers written on this topic&lt;/a&gt; and there are pretty well-known ways to do it.&lt;/p&gt;
  &lt;p id=&quot;g6Cy&quot;&gt;&lt;br /&gt;It is well known that in particularly large infrastructures &lt;strong&gt;there are many VMs that are forgotten, were created by mistake, or are not doing any useful work anymore at all&lt;/strong&gt; but are still stored or even running on the infrastructure. &lt;/p&gt;
  &lt;p id=&quot;L39t&quot;&gt;&lt;br /&gt;The first correct step is to get rid of such workloads. The easiest and fastest way is to run an analysis of your infrastructure using &lt;a href=&quot;https://docs.vmware.com/en/vRealize-Operations/8.10/com.vmware.vcom.user.doc/GUID-7DBBF4C4-D4A0-4212-80DE-31E8EA1BB4F0.html&quot; target=&quot;_blank&quot;&gt;Aria Operations (ex vRealize Operations) to find such VMs&lt;/a&gt;. After some time (yes, it is necessary to avoid false positive errors, so the sooner you run the analysis the better) you &lt;a href=&quot;https://www.brockpeterson.com/post/vmware-vrealize-operations-capacity-reclamation&quot; target=&quot;_blank&quot;&gt;will get a detailed list of such powered off, orphaned and idle VMs&lt;/a&gt;. You need to make sure that these VMs are really no longer needed and remove them. Similarly, you should do the same with orphaned vmdks, snapshots, etc.&lt;/p&gt;
  &lt;figure id=&quot;rTlv&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/83/4b/834bb2f7-9f7c-43f0-b2ac-6c6744df1957.png&quot; width=&quot;3980&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ISTe&quot;&gt;&lt;br /&gt;It is a good idea to go through the entire list of VMs on your infrastructure to see who needs them and why. Yes, it can be really long and annoying, but it will give you a better understanding of your infrastructure and will also be useful for further optimization and/or better response in case of any incidents. I encourage you to actively use tags, VM comments, folders, etc. - so that this information can be easily retrieved anytime and by anyone in the organization who needs it. &lt;/p&gt;
  &lt;p id=&quot;hXap&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;HwR1&quot; data-align=&quot;center&quot;&gt;Thin/Thick Disks&lt;/h2&gt;
  &lt;p id=&quot;X6Hg&quot;&gt;Many IT administrators, especially those who have been working with vSphere for a long time, are somewhat cautious of thin disks. I have even observed a number of companies where the use of Thick disks has been written into IT policy as a default policy requirement. Historically, this is because when &lt;strong&gt;using&lt;/strong&gt; &lt;strong&gt;thin disks on VMFS volumes, there &lt;a href=&quot;https://www.vmware.com/pdf/vsp_4_thinprov_perf.pdf&quot; target=&quot;_blank&quot;&gt;could be a performance degradation&lt;/a&gt; of thin disks as they grow/expand&lt;/strong&gt; (note that in a normal and steady state, there is generally no difference between thick and thin disks). Although &lt;a href=&quot;https://kb.vmware.com/s/article/83363&quot; target=&quot;_blank&quot;&gt;this effect was gradually reduced&lt;/a&gt; in the subsequent vSphere versions, the principle remains unchanged if we are talking about VMFS datastore.&lt;/p&gt;
  &lt;p id=&quot;BGJj&quot;&gt;But in the case of VMC you have to remember that VMFS is not used there at all. And the main type of storage is vSAN, which is an object storage system, and which does not use VMFS. For this reason, vmdk growth is not an issue and &lt;a href=&quot;https://blogs.vmware.com/virtualblocks/2020/11/16/thick-vs-thin-on-vsan-2020-edition/&quot; target=&quot;_blank&quot;&gt;the performance for Thin and Thick disks for vSAN is the same&lt;/a&gt;. Therefore, &lt;strong&gt;there is no reason to use thick disks in VMC/A from a performance perspective&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;bZxe&quot;&gt;&lt;strong&gt;The second global reason for using thick disks is to simplify capacity management in the infrastructure.&lt;/strong&gt; Roughly speaking, using thin disks can (and usually does) lead to capacity oversubscription (&lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/8.0/vsan-monitoring-troubleshooting/GUID-6F7F134E-A6F7-4459-8C31-C021FF2B1F54.html#:~:text=Oversubscription%20reports%20the%20vSAN%20capacity,with%20the%20total%20available%20capacity.&quot; target=&quot;_blank&quot;&gt;Here&amp;#x27;s how you can check this value for vSAN&lt;/a&gt;). And in case when amount of data will start growing inside VMs for one reason or another, we can face lack of space on datastore and, consequently, I/O freeze for many VMs located on it. Of course, this can have catastrophic consequences for the operation of productive workloads. &lt;/p&gt;
  &lt;p id=&quot;IVOD&quot;&gt;&lt;br /&gt;The main way to avoid this is to monitor datastore occupancy and manage capacity efficiently and promptly. Using thick disks allows you to completely eliminate such risks at the cost of decreased storage efficiency. &lt;/p&gt;
  &lt;h3 id=&quot;25eN&quot; data-align=&quot;center&quot;&gt;vSAN Object Space Reservation&lt;/h3&gt;
  &lt;p id=&quot;hZWD&quot;&gt;&lt;br /&gt;But for vSAN, there is a separate way to manage capacity oversubscription with Storage Policy - &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vsphere.vmc-aws-manage-data-center-vms.doc/GUID-EDBB551B-51B0-421B-9C44-6ECB66ED660B.html&quot; target=&quot;_blank&quot;&gt;Object Space Reservation&lt;/a&gt; - to address this issue. At a more granular level, it allows you to set the oversubscription factor in advance by allocating 0/25/50/75/100% of capacity for selected vmdk on vSAN Datastore. This setting makes sense for Business-Critical workloads, where we want to minimize the risk of running out of free space or ensure that critical VMs always get the capacity they need even if the datastore is full and their IO does not stop. The main reason for this is that &lt;strong&gt;expanding a vSAN cluster in an on-premises infrastructure is time consuming&lt;/strong&gt;. It can be hours-days (if we have spare nodes and disks, which is usually quite rare) or even weeks-months (if we have to order new hardware, install it in the datacenter, configure it, etc.). Thus, we will not be able to react quickly to a sudden and unexpected increase in data and carries risks of infrastructure availability. &lt;/p&gt;
  &lt;p id=&quot;lAF4&quot;&gt;&lt;strong&gt;But the fundamental difference with VMC/A is that it takes only MINUTES (10-20 minutes in most cases) to expand the infrastructure instead of days and weeks&lt;/strong&gt;. Adding a new node or multiple nodes is just a couple of clicks in the Cloud Console, and then the new nodes will be added to the cluster, which of course results in an expansion of available capacity.&lt;/p&gt;
  &lt;p id=&quot;oOFY&quot;&gt;&lt;br /&gt;What&amp;#x27;s more, you don&amp;#x27;t even need to monitor datastore occupancy to avoid capacity overflow. VMC/A has a default (and this cannot be disabled) Elastic DRS behavior that when the vSAN datastore is 70% full you will be notified of a high level of utilization, and when it reaches 80% utilization the host will be added automatically. &lt;strong&gt;Thus, the probability of vSAN datastore run-off capacity in VMC/A is practically zero.&lt;/strong&gt; Although to be fair, it should be noted that if all your clusters already have a maximum size of 16 nodes, then further expansion will be impossible and such risks remain, but the solution is quite trivial - do not use clusters of maximum size and leave a reserve for the addition of at least a couple of nodes by splitting one large cluster to two smaller ones.&lt;/p&gt;
  &lt;p id=&quot;ziFU&quot;&gt;Last important thing to mention - &lt;strong&gt;TRIM/UNMAP feature&lt;/strong&gt; (I will talk about it later) is available/&lt;strong&gt;makes sense only with thin disks&lt;/strong&gt;. &lt;/p&gt;
  &lt;h3 id=&quot;tWKT&quot; data-align=&quot;center&quot;&gt;Identifying thick disks in the infrastructure&lt;/h3&gt;
  &lt;p id=&quot;flQN&quot;&gt;&lt;br /&gt;So, I hope I have convinced you that &lt;strong&gt;using thick disks (or Object space reservation) in VMC/A does not make enough sense from either a performance or capacity management perspective&lt;/strong&gt; to pay for it in terms of reduced efficiency and paying for more nodes. &lt;/p&gt;
  &lt;p id=&quot;lBD1&quot;&gt;So, the first thing I urge you to do is to &lt;strong&gt;check your VMC infrastructure for thick disks or Object space reservation and seriously evaluate&lt;/strong&gt; whether they are really required in your case for each specific VM.  &lt;/p&gt;
  &lt;p id=&quot;pqyy&quot;&gt;To do this you can follow the steps below:&lt;/p&gt;
  &lt;p id=&quot;yPOW&quot;&gt;1.) Make a list of all vmdk/VMs that use thick disks. You can use the following tools to do this:&lt;/p&gt;
  &lt;ul id=&quot;CukF&quot;&gt;
    &lt;li id=&quot;wQwC&quot;&gt;Built-in check in &lt;a href=&quot;https://kb.vmware.com/s/article/66758&quot; target=&quot;_blank&quot;&gt;vSAN/Skyline Health Check&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;MPcH&quot;&gt;Check the vSAN Storage Polices in use for Object space reservation customizations. &lt;/li&gt;
    &lt;li id=&quot;OtKY&quot;&gt;Build the report in PowerShell(&lt;a href=&quot;https://virtual-simon.co.uk/vmware-powershell-how-to-detect-thick-disks/&quot; target=&quot;_blank&quot;&gt;example&lt;/a&gt;), Aria Operations/vRops (&lt;a href=&quot;https://docs.vmware.com/en/vRealize-Operations/8.10/com.vmware.vcom.metrics.doc/GUID-E68037C7-7FC3-41F6-9AAC-1DE6D0D36213.html&quot; target=&quot;_blank&quot;&gt;VM properties&lt;/a&gt;) or any other tools like RVTools, LiveOptics, etc.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;tvDj&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3d/0b/3d0bba23-b676-4a3a-8144-07b9eb00dbac.png&quot; width=&quot;4096&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PyOL&quot;&gt;2.) Review whether you really need to use thick disks or Object space reservation for them. &lt;/p&gt;
  &lt;figure id=&quot;sKoG&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9c/56/9c562bdf-4d77-4ce9-9aea-e677f7bdff20.png&quot; width=&quot;624&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TUHp&quot;&gt;3.) Change Object space reservation in the Storage Policy. To avoid a massive rebuild, it is better to create a new Storage Policy and attach it to VMs one at a time.&lt;/p&gt;
  &lt;p id=&quot;zd9K&quot;&gt;4.) &lt;a href=&quot;https://kb.vmware.com/s/article/2014832&quot; target=&quot;_blank&quot;&gt;Convert from thick to thin.&lt;/a&gt; This may require secondary cluster or additional temporary &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-AE7EB54A-E445-4060-A0F2-DC6742CB68A6.html&quot; target=&quot;_blank&quot;&gt;external NFS datastore&lt;/a&gt; (Flex Storage or FSxN) or cloning the VM. &lt;/p&gt;
  &lt;h2 id=&quot;iqTB&quot; data-align=&quot;center&quot;&gt;TRIM/UNMAP&lt;/h2&gt;
  &lt;h3 id=&quot;1nvb&quot; data-align=&quot;center&quot;&gt;General overview of TRIM/UNMAP&lt;/h3&gt;
  &lt;p id=&quot;Uue9&quot;&gt;The next point that follows the discussion of thin disks (the size of which, remember, is equal to the actual utilized amount of data, not the allocated amount) is: what is the actual utilized storage and to define it? Let me give you the simplest example - you have created a thin vmdk of size 1TB, but you haven&amp;#x27;t written anything to it yet. Then its size will be equal to zero (formally, of course, not strictly zero, but a few tens of MB for metadata, but it is not essential in this case). Then our guest OS will write 500GB of data there. Then the vmdk size will become 500GB, which is obvious. But, if we at the guest OS level remove 300GB of this data, what will be the size of the vmdk? In the general case, it can remain the same 500GB because the storage subsystem of the &lt;strong&gt;hypervisor has no idea what blocks have been deleted by the Guest OS&lt;/strong&gt; and it can free them up for other uses by other VMs.&lt;/p&gt;
  &lt;p id=&quot;ebfB&quot;&gt;To solve this problem, the TRIM/UNMAP/DEALLOCATE commands were added to the block storage protocols. TRIM/UNMAP/DEALLOCATE are ATA, SCSI, and NVMe commands respectively that allow to &lt;strong&gt;send information that previously allocated and occupied data blocks have been cleared and are no longer in use&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;4BVp&quot;&gt;First of all, when we talk about Space Reclamation, we need to clarify that for virtualization environments there are fundamentally two levels at which it can be performed.&lt;/p&gt;
  &lt;p id=&quot;Szwf&quot;&gt;&lt;strong&gt;The first level is when we free up space at the hypervisor level itself&lt;/strong&gt;, for example when we delete a VM/vmdk or reduce the size of the vmdk and we want that space to be freed up on the datastore/storage. In case of VMFS, &lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.storage.doc/GUID-BC1A172C-E649-4812-B8B2-A9E45AC97051.html&quot; target=&quot;_blank&quot;&gt;ESXi acts as an initiator and sends the list of freed blocks via the UNMAP command to the external storage&lt;/a&gt;. But because VMC on AWS does not use block-level datastores and the primary storage is vSAN, it works even easier. Since vSAN is fundamentally an object storage system that stores your objects (mostly vmdk and snapshot files in terms of capacity contribution, although there are other types of objects as well) in the format of multiple components distributed across the nodes and disks of the cluster, the moment we delete an object all its associated components are automatically deleted and that space becomes available for other data. Thus, when &lt;strong&gt;a vmdk is deleted or downsized, space on the vSAN datastore is freed up automatically&lt;/strong&gt; and almost instantly (although on i3 clusters where dedupe is enabled this can take some time due to updates to the metadata tables and block map on the disk groups). &lt;/p&gt;
  &lt;p id=&quot;Fr1G&quot;&gt;The second level, and partly more complex, is often referred as &lt;strong&gt;Guest UNMAP&lt;/strong&gt;. The idea behind this is to make it possible to reduce the size of the vmdk itself, while freeing up blocks within the guest OS. For sure vmdk should be thin as there is no sense to do this on thick vmdks. But I hope you&amp;#x27;ve already converted all your thick disks by now, as we discussed earlier. This will lead to freeing up capacity on the storage, as described in the previous paragraph. So, we want to make sure that &lt;strong&gt;when data is deleted inside the guest OS, the space on the storage system is freed up&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;TKvX&quot;&gt;It is especially important to note that quite often we can observe a very unpleasant effect where the thin disk size gradually grows to the allocated vmdk size, despite the fact that we never filled it completely from the OS point of view. This is due to the behavior of some OS/file systems that prefer to write to new/empty or random blocks instead of previously filled (but previously freed up) blocks. Thus, it can almost always be observed that &lt;strong&gt;the longer a VM runs, the more we have such unused data stored&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;vAEN&quot;&gt;An important point to discuss is the &lt;strong&gt;potential side effects &lt;/strong&gt;of including TRIM/UNMAP. Here, if we don&amp;#x27;t talk about configuration efforts (more on that later), the only possible downside is the &lt;strong&gt;impact on storage performance&lt;/strong&gt;, i.e. vSAN in the case of VMC on AWS. The point is that when the guest OS receives commands from the guest OS to clean blocks, the storage system must start cleaning and deleting them at its own level. This creates additional &amp;quot;&lt;strong&gt;background pressure&lt;/strong&gt;&amp;quot; on the storage system by processing such requests. In the case of vSAN, this load is somewhat greater with deduplication enabled, as each deletion needs to be additionally reflected in the hash-map and metadata table and recalculated if necessary. In VMC on AWS, deduplication is only enabled on i3-based clusters, and i3en and i4i-based clusters only have compression enabled, which has minimal impact compared to a configuration without Space Efficiency. Also, obviously, the impact depends on the size of the vSAN payload as well as the amount of data that needs to be deleted - &lt;strong&gt;the more data should be cleaned, the longer it will take&lt;/strong&gt;. &lt;br /&gt;Thus, it is extremely difficult or even impossible to give even an indication of the impact on performance in general, but in my personal experience, in the &lt;strong&gt;vast majority of cases it does not have any noticeable impact&lt;/strong&gt;, and in rare cases, it can be observed only at initial startup, when the amount of data to be freed is particularly large. But, I can&amp;#x27;t help but advise you to test on your infrastructure and with your workload if possible to be absolutely comfortable and confident.&lt;br /&gt;Finally, I would like to point out that TRIM/UNMAP is a &lt;strong&gt;vmdk-level setting&lt;/strong&gt;. And you can turn off TRIM/UNMAP for individual VMs or disks by specifying disk.scsiUnmapAllowed = false in the Advanced Settings of the VM. So, largely due to the fact that each vmdk on vSAN is processed relatively independently of the others (especially on clusters without deduplication), this &lt;strong&gt;can minimize the impact of TRIM/UNMAP for a particular VM&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;si5M&quot; data-align=&quot;center&quot;&gt;Assessing the efficiency of enabling TRIM/UNMAP&lt;/h3&gt;
  &lt;p id=&quot;3QUK&quot;&gt;The next obvious question that arises is &lt;strong&gt;exactly how much data I can save by doing this&lt;/strong&gt;. While this of course depends on your infrastructure, the answer is usually A LOT. It is not uncommon for the amount of data stored after TRIM/UNMAP to be reduced by &lt;strong&gt;50% or even up to two times or more&lt;/strong&gt;. Fortunately, there are very simple and quick ways to verify this and get accurate numbers specific to your infrastructure. To do this, you need to compare two metrics - the size of the thin vmdk and the amount of usable data, from a guest OS perspective. Fortunately, both of these metrics are available through the regular vCenter API (but you need VMware Tools installed for utilization information within the guest OS), so many monitoring and inventory tools have this information. The only point at which the accuracy of the data can be spoiled is shared and network disks. The thing is that from VMware&amp;#x27;s perspective, it&amp;#x27;s one vmdk, but each OS will see it as its own and write a fill percentage. Because of this, the total amount of usable data from the guest OS perspective may be slightly larger than it actually is. So, this gives a conservative estimate for savings - you can definitely free up that amount of space, but in reality, it may be even more.&lt;/p&gt;
  &lt;p id=&quot;sRs4&quot;&gt;As an example of such tools that will help to capture the necessary data, I would like to point out some of the most popular ones - &lt;a href=&quot;https://www.liveoptics.com/&quot; target=&quot;_blank&quot;&gt;LiveOptics&lt;/a&gt;, &lt;a href=&quot;https://www.robware.net/rvtools/&quot; target=&quot;_blank&quot;&gt;RVTools&lt;/a&gt;, &lt;a href=&quot;https://www.vmware.com/uk/products/aria-operations.html&quot; target=&quot;_blank&quot;&gt;Aria Operations&lt;/a&gt; (ex vRealize Operations).&lt;br /&gt;In &lt;strong&gt;LiveOptics&lt;/strong&gt;, once you run the assessment (in this case, the analysis time doesn&amp;#x27;t matter), you will immediately see a comparison of the two metrics:&lt;/p&gt;
  &lt;figure id=&quot;gzRe&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b9/5a/b95a1f93-d132-41e4-af90-1b4c540d8e7b.png&quot; width=&quot;773&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Wdo1&quot;&gt;&lt;br /&gt;In &lt;strong&gt;RVTools&lt;/strong&gt;, you need to compare two columns - &amp;quot;In Use&amp;quot; from the &amp;quot;vInfo&amp;quot; tab (this is the vmdk size) and &amp;quot;Consumed MiB&amp;quot; from the &amp;quot;vPartitions&amp;quot; tab (this is utilization from the guest OS perspective).&lt;/p&gt;
  &lt;p id=&quot;3ZtI&quot;&gt;&lt;strong&gt;Aria Operations&lt;/strong&gt; unfortunately doesn&amp;#x27;t have a built-in report or View, but we can make one very quickly ourselves:&lt;/p&gt;
  &lt;figure id=&quot;BmXi&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/3c/ba3cf6df-f5b8-48e3-8055-6d290811f5d9.png&quot; width=&quot;3846&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;UuBv&quot; data-align=&quot;center&quot;&gt;How to enable TRIM/UNMAP&lt;/h3&gt;
  &lt;p id=&quot;wRQX&quot;&gt;In order for everything to work as it should we need two main factors - for the OS to send TRIM/UNMAP/Deallocate commands (depending on the virtual controller used) and for the storage system (vSAN in our case) to properly manage them. &lt;/p&gt;
  &lt;p id=&quot;ksNQ&quot;&gt;If we are talking about vSAN itself, TRIM/UNMAP support was introduced in it quite a bit more than 5 years ago in vSAN 6.7U1. In VMC on AWS &lt;strong&gt;minimal versions that support TRIM/UNMAP is 1.18v12 or 1.20v4&lt;/strong&gt;. For vSAN, &lt;strong&gt;TRIM/UNMAP is a cluster level feature&lt;/strong&gt; and is disabled by default in OSA (in ESA, which I will talk about later, it is enabled immediately), but since vSAN 8 it can now be enabled via a single button in the vSphere Client. But since in VMC on AWS you don&amp;#x27;t have permissions to change the cluster configuration, you &lt;a href=&quot;https://kb.vmware.com/s/article/85590&quot; target=&quot;_blank&quot;&gt;just need to contact support/CSM and ask them to enable it, specifying the cluster where you want to do it.&lt;/a&gt; If you have any doubts about whether it is enabled or not, you can just &lt;a href=&quot;https://kb.vmware.com/s/article/82020&quot; target=&quot;_blank&quot;&gt;look it up in the vSphere Client or with PowerCLI&lt;/a&gt;. &lt;/p&gt;
  &lt;p id=&quot;OwMF&quot;&gt;The second part of this task is to make the OS send commands to free up space. TRIM/UNMAP is supported for both Linux and Windows and require &lt;strong&gt;Virtual Machine Hardware version 11 for Windows and 13 for Linux&lt;/strong&gt; (nevertheless &lt;a href=&quot;https://www.codyhosterman.com/2018/04/whats-new-in-core-storage-in-vsphere-6-7-part-iv-nvme-controller-in-guest-unmap-support/&quot; target=&quot;_blank&quot;&gt;for vNVMe controllers the minimal version is v14&lt;/a&gt; for both Windows and Linux). As a reminder, the default version for all new VMs for all current VMC versions is 14, so it shouldn&amp;#x27;t be a problem, but when migrating from on-premise, some machines may have an older version, so it&amp;#x27;s &lt;strong&gt;worth checking and upgrade vHW if needed&lt;/strong&gt;. &lt;/p&gt;
  &lt;p id=&quot;QuGY&quot;&gt;Second, the guest operating system must detect that the block device (vmdk in that case) supports TRIM/UNMAP. If the VMs are already running on a cluster that did not have TRIM/UNMAP, this flag is not active because it is set when the VM starts up. Thus, a &lt;strong&gt;Power Cycle (not just a reboot) will need to be performed for all VMs&lt;/strong&gt;. On the one hand, this may look hard and complicated, but the good news is that VMs can safely continue to run on the cluster after TRIM/UNMAP is enabled without any consequences, just Space Reclamation will not work for them. &lt;strong&gt;And during the next scheduled updates, maintenance, etc perform Power Cycle&lt;/strong&gt;. To keep this out of your head, you can &lt;a href=&quot;https://blogs.vmware.com/vsphere/2019/10/vmx-reboot-powercycle-makes-cpu-vulnerability-remediation-easy.html&quot; target=&quot;_blank&quot;&gt;set an additional parameter vmx.reboot.PowerCycle=True&lt;/a&gt; for the VMs, which will do a full Power Cycle on the next reboot operation instead (BTW, I wrote above about the possible need to raise the vHW version, so you can use &lt;a href=&quot;https://williamlam.com/2022/09/power-off-vm-from-guest-os-reboot-capability-in-vsphere-8.html&quot; target=&quot;_blank&quot;&gt;a somewhat similar function that shuts down the VM on the next reboot&lt;/a&gt;). After the following Power Cycle, this value is automatically reset to the default state (False). &lt;strong&gt;For all new VMs created on the cluster after TRIM/UNMAP is enabled, it will work immediately&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;HDO6&quot;&gt;The last step is for the operating system to transmit a list of freed blocks. I don&amp;#x27;t want to go into detail here, because it&amp;#x27;s better to refer to your OS manual instead. &lt;br /&gt;I will only mention that &lt;strong&gt;starting from Windows Server 2012 automatic space clearing is enabled by default&lt;/strong&gt;, but it is worth checking, for example, via PowerShell (Get-ItemProperty -Path &amp;quot;HKLM:\System\CurrentControlSet\Control\FileSystem&amp;quot; -Name DisableDeleteNotification). You can also run the cleanup manually by running Defrag or Optimize-Volume, but of course it is better to let it run automatically. &lt;br /&gt;&lt;strong&gt;For Linux, this is usually done by running fstrim&lt;/strong&gt;. The availability of automatic cleanup depends on the distro - some of them (e.g. Ubuntu, SUSE, etc) have it enabled by default, and the frequency can be customized in the corresponding configuration files. Of course, you can also run it manually as well.&lt;/p&gt;
  &lt;p id=&quot;TvNL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;vv7F&quot;&gt;So, if you enable TRIM/UNMAP on the cluster, run Power Cycle on the VM, and make sure that the cleanup is scheduled and executed automatically at the guest OS level, then after some time (usually 1-7 days), you will see additional space &amp;quot;magically&amp;quot; appear on vSAN. Note that at first this can be quite an active process (simply because a rather large list of freed blocks may have been accumulated), but then it is usually not a massive process, but rather a background process that keeps the thin disks of the VMs from further growth.&lt;/p&gt;
  &lt;h2 id=&quot;MZIJ&quot; data-align=&quot;center&quot;&gt;Summary and Next Steps&lt;/h2&gt;
  &lt;p id=&quot;gw1j&quot;&gt;Surprisingly, it turns out that following these steps is more than enough in many cases. And further optimization may not be necessary because vSAN already provides you with all the capacity you need. &lt;/p&gt;
  &lt;p id=&quot;u7ic&quot;&gt;&lt;br /&gt;But if that&amp;#x27;s not the case, let&amp;#x27;s talk about other ways to ensure even greater storage efficiency in VMC on AWS in the &lt;a href=&quot;https://nkulikov.com/VMC_Storage_Optimizations_Part2&quot; target=&quot;_blank&quot;&gt;Part2&lt;/a&gt;.&lt;/p&gt;

</content></entry><entry><id>nkulikov:VMwareCloudRegionsMap</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMwareCloudRegionsMap?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMware Cloud Regions Map</title><published>2023-03-17T15:13:13.267Z</published><updated>2023-11-17T11:45:26.673Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/37/9d/379dd75c-7324-4765-bd3a-b9c14439a08f.png"></media:thumbnail><category term="v-mware-cloud" label="VMware Cloud"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/8e/97/8e976633-d470-44f3-a31a-17ec989265f8.png&quot;&gt;I have created a map with every region available for VMware Cloud on AWS (VMC on AWS), Azure VMware Solution (AVS), Google Cloud VMware Engine (GCVE) and Oracle Cloud VMware Solution (OVS). These are cloud services that allow you to run VMware workloads natively on different cloud platforms.</summary><content type="html">
  &lt;figure id=&quot;LfwH&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8e/97/8e976633-d470-44f3-a31a-17ec989265f8.png&quot; width=&quot;568&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;D2l3&quot;&gt;I have created a map with every region available for VMware Cloud on AWS (VMC on AWS), Azure VMware Solution (AVS), Google Cloud VMware Engine (GCVE) and Oracle Cloud VMware Solution (OVS). These are cloud services that allow you to run VMware workloads natively on different cloud platforms. &lt;/p&gt;
  &lt;p id=&quot;wO7P&quot;&gt;This map is based on the latest information from the official websites of these cloud providers as of November 2023.&lt;/p&gt;
  &lt;p id=&quot;aGkc&quot;&gt;&lt;a href=&quot;https://www.google.com/maps/d/edit?mid=1TbcSUvRhHxaOlQhccdzpAQC8NtIus6g&amp;usp=sharing&quot; target=&quot;_blank&quot;&gt;Here is the link to it. &lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;XlX7&quot;&gt;Here is a brief overview of each solution:&lt;/p&gt;
  &lt;p id=&quot;gtDG&quot;&gt;- VMC on AWS: This is a service that delivers a VMware SDDC on AWS infrastructure. You can use the same tools and processes as on-premises, and benefit from AWS services and global reach.&lt;/p&gt;
  &lt;p id=&quot;vu3Y&quot;&gt;- AVS: This is a Microsoft service, verified by VMware, that runs on Azure infrastructure. You can migrate or extend your VMware workloads to Azure without refactoring or rearchitecting them.&lt;/p&gt;
  &lt;p id=&quot;BYgd&quot;&gt;- GCVE: This is a fully managed service that lets you run the VMware platform in Google Cloud. You can use Google&amp;#x27;s high-performance infrastructure and networking services, and access Google Cloud services such as AI/ML and Big Data.&lt;/p&gt;
  &lt;p id=&quot;Ms0j&quot;&gt;- OVS: This is your implementation of VMware running on top of Oracle Cloud Infrastructure (OCI). You have full control over your VMware SDDC, and you can leverage OCI&amp;#x27;s security, scalability and price-performance advantages.&lt;/p&gt;

</content></entry><entry><id>nkulikov:VMC_Regions</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMC_Regions?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMC on AWS Regions</title><published>2022-12-07T11:43:33.074Z</published><updated>2023-03-21T12:59:29.879Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/6a/52/6a525397-6063-4045-b8bd-587ac6816571.png"></media:thumbnail><category term="vmc" label="VMC"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/11/08/110801a4-58a1-4841-9d4d-4f185abfe181.png&quot;&gt;I created the spreadsheet with all the available regions for VMware Cloud on AWS (VMC-A), including the services available there (like VSR, VCDR, etc), node types (i3, i3en, i4i), and other characteristics (like stretched cluster support and compliance). Also add plans from public roadmaps for both AWS and VMC-A. </summary><content type="html">
  &lt;figure id=&quot;MBPd&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/08/110801a4-58a1-4841-9d4d-4f185abfe181.png&quot; width=&quot;2376&quot; /&gt;
    &lt;figcaption&gt;VMC on AWS Regions&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k0zt&quot;&gt;I created the &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1ivRqRzFv94lEITHYC53ogL2w4NTOjHT9HrLL9Jt89yA/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;spreadsheet&lt;/a&gt; with all the available regions for VMware Cloud on AWS (VMC-A), including the services available there (like VSR, VCDR, etc), node types (i3, i3en, i4i), and other characteristics (like stretched cluster support and compliance). Also add plans from public roadmaps for both AWS and VMC-A. &lt;/p&gt;
  &lt;p id=&quot;hnui&quot;&gt;All this information is publicly available, but unfortunately sometimes described in various places, which requires time to search and check. &lt;/p&gt;
  &lt;p id=&quot;feuH&quot;&gt;I am planning to keep this table up to date (I have already added the newest VMC region, Cape Town) and having a single pane of glass. Also, as new services come out, I will add them to this table. &lt;/p&gt;
  &lt;p id=&quot;FfDD&quot;&gt;&lt;br /&gt;If you notice any inaccuracies, missed updates, or would like to see any additional information (for example VMware Cloud on other Hyperscalers) - let me know in the comments to this post, in the comments in the table itself or in the &lt;a href=&quot;https://t.me/VMware_VMC&quot; target=&quot;_blank&quot;&gt;unofficial VMC Telegram channel.&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;CLr6&quot;&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1ivRqRzFv94lEITHYC53ogL2w4NTOjHT9HrLL9Jt89yA/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;The link to Google Spreadsheet. &lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>nkulikov:VMC_Instances</id><link rel="alternate" type="text/html" href="https://nkulikov.com/VMC_Instances?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>VMware Cloud on AWS (VMC-A) Host Types Comparison</title><published>2022-10-29T13:34:53.269Z</published><updated>2022-10-29T13:34:53.269Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e2/b7/e2b74e2d-dcdd-4158-91be-a859f42d71df.png"></media:thumbnail><category term="vmc" label="VMC"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a1/62/a1620e9e-1269-4474-bcce-7b6cb40e1a35.png&quot;&gt;With the appearance of i4i nodes in VMC, I realized that I was missing a table in which I could compare all available nodes (i3, i3en, i4i) in details. </summary><content type="html">
  &lt;p id=&quot;nTRh&quot;&gt;With the appearance of i4i nodes in VMC, I realized that I was missing a table in which I could compare all available nodes (i3, i3en, i4i) in details. &lt;/p&gt;
  &lt;p id=&quot;7tDg&quot;&gt;Despite the fact that an excellent description of each type is available &lt;a href=&quot;https://vmc.techzone.vmware.com/resource/feature-brief-sddc-host-types#section3&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and a simplified version of the table is available &lt;a href=&quot;https://docs.vmware.com/en/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-98FD3BA9-8A1B-4500-99FB-C40DF6B3DA95.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;, I decided to create an extended version of such a table myself. And then I thought that maybe it will be useful for someone else.&lt;br /&gt;So, I&amp;#x27;m laying it out below as a picture - enjoy!&lt;/p&gt;
  &lt;p id=&quot;RMTz&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;pwNA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a1/62/a1620e9e-1269-4474-bcce-7b6cb40e1a35.png&quot; width=&quot;1874&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>nkulikov:StorageBenchmarkPart3</id><link rel="alternate" type="text/html" href="https://nkulikov.com/StorageBenchmarkPart3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>Enterprise Storage Synthetic Benchmarking Guide and Best Practices. Part 3. Practical Illustration based on Benchmarking VMware vSAN Case.</title><published>2022-04-27T14:56:07.098Z</published><updated>2022-04-27T18:05:24.983Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c4/eb/c4ebcde7-bcbc-4758-9614-ea8256cac2e7.png"></media:thumbnail><category term="enterprise-storage-benchmarking-guide" label="Enterprise Storage Benchmarking Guide"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/d6/81/d6818eb9-eab9-4a1e-97d5-26bfed60f47e.png&quot;&gt;Well, let's go through the points outlined in Part 1 and Part 2 and look at an example of how testing might look end-to-end.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#icM8&quot;&gt;Scenario and definition of objectives.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rABh&quot;&gt;Workers VMs&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#O9a6&quot;&gt;Size Of the Virtual Disk and the Overall Capacity Utilization.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#G1H9&quot;&gt;Active Workload Set Performance Impact Tests&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#PoUi&quot;&gt;Analyzing Test and Warm-up Duration Impact&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rN6H&quot;&gt;Test the OIO Impact&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ngH5&quot;&gt;IOPS Limits.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#vmwG&quot;&gt;Testing Results&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#WtCq&quot;&gt;Conclusion.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#cnxi&quot;&gt;Special Thanks.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Ug4w&quot;&gt;Appendix A.&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;eWtD&quot;&gt;Well, let&amp;#x27;s go through the points outlined in &lt;a href=&quot;https://nkulikov.com/StorageBenchmarkPart1&quot; target=&quot;_blank&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;https://nkulikov.com/StorageBenchmarkPart2&quot; target=&quot;_blank&quot;&gt;Part 2&lt;/a&gt; and look at an example of how testing might look end-to-end.&lt;/p&gt;
  &lt;p id=&quot;Ap9O&quot;&gt;As I said, it is always worth starting with defining the goals and objectives. The true purpose of further benchmarks is to demonstrate with the specific example the process of conducting tests, as well as to illustrate the influence of individual parameters on test’s results. To make it closer to reality, let&amp;#x27;s come up with some kind of hypothetical, but still realistic situation.&lt;/p&gt;
  &lt;h2 id=&quot;icM8&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Scenario and definition of objectives.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;5pkW&quot;&gt;For starters, let’s imagine a company that built a VMware-based private cloud infrastructure some time ago. But it is used exclusively for software development and testing tasks, and even then, it provides only a partial coverage. The rest of the services run on a conventional VMware vSphere virtualization platform outside of the private cloud. Private cloud infrastructure, as well as the production environment, was built according to the traditional 3-tier architecture with blade servers, FC-network, SAN storage arrays and external hardware-defined network and security solutions.&lt;/p&gt;
  &lt;p id=&quot;bHdr&quot;&gt;It&amp;#x27;s been in use like this for quite a while, but, at some point in time, business stakeholders started to push for more speed and flexibility on the IT side. Responding to business needs, several strategic decisions were made:&lt;/p&gt;
  &lt;ul id=&quot;zivs&quot;&gt;
    &lt;li id=&quot;grJP&quot;&gt;Cloud-first approach. All and every resource should be provisioned from the cloud management platform.&lt;/li&gt;
    &lt;li id=&quot;FFrC&quot;&gt;Enable hybrid-cloud. Apps will be deployed both in the VMware-based private cloud infrastructure and in public clouds.&lt;/li&gt;
    &lt;li id=&quot;UBd7&quot;&gt;Self-governance. Application owners can choose where to provision their workloads, factoring in compliance, security, cost, availability, and other requirements.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;OueF&quot;&gt;At the same time, there was a need to refresh the private cloud infrastructure under, as it was already deprecated, and no longer met the requirements. When developing the new platform’s architecture, the following key requirements were identified:&lt;/p&gt;
  &lt;ul id=&quot;5zvl&quot;&gt;
    &lt;li id=&quot;2viK&quot;&gt;Flexible and fast scaling that can be done in small steps. This is important because it is difficult to predict where developers will deploy their applications and how many, so infrastructure must be able to adapt fast. &lt;/li&gt;
    &lt;li id=&quot;Pl2J&quot;&gt;Cost efficiency. Onprem infrastructure must offer competitive resource costs when compared to public clouds.&lt;/li&gt;
    &lt;li id=&quot;FFiD&quot;&gt;Significant simplification of infrastructure operation, as many IT specialists will be reassigned to create a set of new high-value easy-to-consume onprem services similar to those available in the public clouds.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wrKu&quot;&gt;To meet those requirements, VMware hyper-converged infrastructure was considered as the primary option for the next generation of private cloud infrastructure. The next task was to draft a design and size clusters running the new private cloud, including the underlying hardware. With that in mind, the existing infrastructure was analyzed to obtain the averaged ratio of VMs’ vCPU/vRAM/Disk. That allows to make a coarse dimensioning for the new cluster. But &lt;strong&gt;storage performance assessment absolutely required confirmation and refinements. &lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;khgq&quot;&gt;So, the benchmark &lt;strong&gt;goals were defined as follows:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;dSYi&quot;&gt;
    &lt;li id=&quot;U9p2&quot;&gt;Determine how many “averaged” VMs could be deployed on the cluster from the storage performance perspective to assess an averaged VM’s TCO for the new private cloud and to achieve a better hardware utilization.&lt;/li&gt;
    &lt;li id=&quot;DdnN&quot;&gt;Understand the cluster&amp;#x27;s performance potential.&lt;/li&gt;
    &lt;li id=&quot;Jf5W&quot;&gt;Admins need to learn the specifics of the hyper converged platform, its behavior in different situations and under different loads, as well as potential bottlenecks.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yfAc&quot;&gt;&lt;strong&gt;Synthetic tests were chosen as a testing method&lt;/strong&gt; because the workloads are expected to be very diverse, there are no workloads identified as particularly critical to be assessed individually, and, moreover, most workloads do not exist yet. The second reason is related to the fact that the use of synthetic benchmarks allows for the most flexible testing process and storage system’s behavior understanding.&lt;/p&gt;
  &lt;p id=&quot;Kmj7&quot;&gt;It was decided to leverage &lt;strong&gt;HCIBench&lt;/strong&gt; for the tests. The first reason for this was because the new private cloud platform will be built with VMware solutions. Another reason was that the test program included a large number of more or less standard tests that &lt;strong&gt;HCIBench fitted very well with.&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;7Mn7&quot;&gt;Once we have decided on the benchmarking goals and methods, we need to collect some key metrics allowing us to define the success criteria. First, we need to understand from which segment of the infrastructure we can get them and which tools to use. As you remember, the company’s legacy private cloud platform hosts mostly lightly loaded test environments. And this will continue in the future, due to the expected growth in volume of test environments. That said, we are going to use the existing monitoring system (VMware vRealize Operations Manager) to assess the load’s profile, as well as to extract average and peak load values from the last year. After that, we will evaluate similar metrics for the existing mixed production clusters, because production workloads are also expected to be hosted in a new private cloud.&lt;/p&gt;
  &lt;p id=&quot;Kef5&quot;&gt;Let&amp;#x27;s say we get the following results:&lt;/p&gt;
  &lt;ul id=&quot;X8Sf&quot;&gt;
    &lt;li id=&quot;1NeI&quot;&gt;8K 70/30 Read/Write 90% Random — close to the average numbers from the test/dev environments.&lt;/li&gt;
    &lt;li id=&quot;o8Tq&quot;&gt;64K 50/50 Read/Write 90% Random — some sort of worst case obtained from the analysis of production clusters.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vW4t&quot;&gt;Thus, our success criteria should be set as follows:&lt;/p&gt;
  &lt;ol id=&quot;q38J&quot;&gt;
    &lt;li id=&quot;vMns&quot;&gt;Each node of the hyper converged platform must have a performance of at least 25,000 IOPS (observed year high from current production clusters) with a 64K 60/40 90% Random profile with the latency below 3 ms.&lt;/li&gt;
    &lt;li id=&quot;vP82&quot;&gt;Each node of the hyper converged platform must have a performance of at least 50,000 IOPS with an 8K 70/30 90% Random profile with the latency below 3 ms.&lt;/li&gt;
    &lt;li id=&quot;g0SD&quot;&gt;Testing conditions - ~10-20 vmdks per host, normal operational state, capacity utilization in line with the vendor’s best practices, the active workload set of 10%.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;okIx&quot;&gt;We will also specifically add several types of synthetic load profiles, which are rarely seen in the infrastructure as they are, but which will be valuable for a better behavior analysis of the storage system:&lt;/p&gt;
  &lt;ul id=&quot;6vFH&quot;&gt;
    &lt;li id=&quot;fC8k&quot;&gt;4K 100% Read 100% Random — it is a synthetic workload that is commonly used to generate maximum IOPS from storage and stress storage controllers/processors. Random IO pattern is selected to make it appear more &amp;quot;realistic&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;poVE&quot;&gt;512K 100% Read 100% Sequential — workload heavily uses the bandwidth and reveals batch read operations performance. &lt;/li&gt;
    &lt;li id=&quot;w2ln&quot;&gt;512K 100% Write 100% Sequential — write-heavy workload, washes out controllers’ write buffers and reveals batch upload operations performance.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;6frI&quot;&gt;To replicate the scaled-in future production environment, the testbed consisted of 6 all-flash vSAN 7.0U2 nodes.&amp;quot; in a configuration almost similar to the target (except for the compute resources).  At the same time, we have evidence that performance scaling occurs linearly, provided that both the number of nodes and the number of VMs increase at the same time. Six nodes are required in order to run tests in various configurations, including tests with the enabled Erasure Coding FTT=2 (aka RAID 6), which requires a minimum of 6 nodes. But for sake of this guide’s conciseness, all tests in this document will refer to the storage policy FTT=1 Mirror (aka RAID1). You can find the detailed configuration of the testbed in Appendix A. &lt;/p&gt;
  &lt;h2 id=&quot;rABh&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Workers VMs&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;Q2E5&quot;&gt;Based on existing infrastructure’s assessment, about 16 vmdks per host are required. Since the computing resources on each node are quite limited, I decided to place 4 VMs with 4 vmdk on each node. Preliminary tests, as well as observations during the main tests, showed that 4vCPU is enough to avoid a bottleneck.&lt;/p&gt;
  &lt;p id=&quot;zMFy&quot;&gt;Further scaling-out the number of VMs or scaling up VMs themselves can only worsen the results due to the high compute oversubscription and CPU resources competition between the VMs.&lt;/p&gt;
  &lt;h2 id=&quot;O9a6&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Size Of the Virtual Disk and the Overall Capacity Utilization.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;cQOX&quot;&gt;In the test conditions, it is said that it is necessary to fill the storage to the recommended levels that are used when designing the future infrastructure.&lt;/p&gt;
  &lt;p id=&quot;5ton&quot;&gt;VMware recommends keeping the free capacity of vSAN at &lt;a href=&quot;https://core.vmware.com/blog/understanding-%E2%80%9Creserved-capacity%E2%80%9D-concepts-vsan&quot; target=&quot;_blank&quot;&gt;about 15–30%&lt;/a&gt;, depending on the cluster size and configuration. So, I calculated the size of vmdk to achieve the total capacity utilization of ~75% (~420GB) and this value was taken as a baseline.&lt;/p&gt;
  &lt;p id=&quot;PMxm&quot;&gt;Before that, I ran the test with capacity utilization increased from 17% to 98,7% with every workload profile to understand the impact. The most important part here — &lt;strong&gt;I did not change the absolute active workload size set in TB&lt;/strong&gt; during the tests. Also, tests were executed in the steady state (this means data was written and some time passed so no rebalance active operations were running in the cluster). On the graph, the performance at 75% capacity utilization was set as 100%.&lt;/p&gt;
  &lt;figure id=&quot;KMJX&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d6/81/d6818eb9-eab9-4a1e-97d5-26bfed60f47e.png&quot; width=&quot;1676&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance impact of datastore capacity utilization.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;X2gt&quot;&gt;We can see that there is no significant performance impact of the higher utilization regardless of the workload profile for the VMware vSAN. The interesting thing found out here is some 7–17% performance degradation at the lowest utilization (17%). The reason for this is because at this level most of the data resides at the write buffer SSDs without destaging to the capacity tier leading to a decreased number of SSDs proceeding the IO requests.&lt;/p&gt;
  &lt;p id=&quot;cLfa&quot;&gt;For all next tests 75% capacity utilization will be used. &lt;/p&gt;
  &lt;h2 id=&quot;G1H9&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Active Workload Set Performance Impact Tests&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;mzXX&quot;&gt;Now let’s investigate how the Workload Set dimensioning affects the performance of the vSAN Cluster. I varied the workload set size from 1% to 100% and measured IOPS and latency for every workload profile.&lt;/p&gt;
  &lt;figure id=&quot;yFnR&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c2/fe/c2fe5766-23ac-4856-84e1-20b224278d97.png&quot; width=&quot;1986&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance impact of the active workload set during a random read workload.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q8Ar&quot;&gt;At 4K 100% Reads we observe almost no impact of the active workload set size. The reason for this is because it was an All-flash vSAN Cluster and it serves reads right from its Capacity Tier without any overhead and SSDs in Capacity Tier can process them really fast. The same picture goes for the sequential read test.&lt;/p&gt;
  &lt;p id=&quot;625z&quot;&gt;At the same time, it is quite obvious that for a hybrid cluster there would be a very sharp performance drop since running out of the SSD cache.&lt;/p&gt;
  &lt;figure id=&quot;b1Y0&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/7d/a97d95f2-c73d-4dab-ac62-4be053b0afa4.png&quot; width=&quot;1918&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance impact of the active workload set during a sequential write workload.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FlP5&quot;&gt;With the 512K Seq Write test, the picture has dramatically changed. You can see two performance layers — active workload set 1–10% and 30%+. At 1–10% level the system responds at a write buffer speed. We can write data into the write buffer really fast (with the Write Intensive Optane SSD), but once our active data no longer fits into the Write Buffer, the destaging process is triggered. This process affects our front-end performance — vSAN needs to free up some space in the buffer by destaging data to the capacity tier to process new data coming from the worker VM. Beyond 30%+ the destaging becomes continuous and massive, however the system achieves a balanced and steady state.&lt;/p&gt;
  &lt;figure id=&quot;VTip&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/87/9b/879bbaa3-b47f-4e99-814b-fbd4734d09a5.png&quot; width=&quot;1896&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance impact of the active workload set during a mixed workload.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sLsG&quot;&gt;The mixed workload test is obviously a mix of 100% Read and 100% Write test. Every read is processed fast without any impact, writes are not that massive, hence the destaging process is not so intensive. It impacts the performance but does not limit it. This led to a smoother graph and less performance impact overall.&lt;/p&gt;
  &lt;p id=&quot;YN5z&quot;&gt;&lt;strong&gt;Conclusions About Workload Set&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;iPqT&quot;&gt;
    &lt;li id=&quot;k2L1&quot;&gt;Active Workload Set can always affect the performance. So, you should test it.&lt;/li&gt;
    &lt;li id=&quot;SCvz&quot;&gt;Performance impact varies with different workload profiles as well as with different storage settings (Deduplication, Compression, Tiering, Caching, etc).&lt;/li&gt;
    &lt;li id=&quot;B5WJ&quot;&gt;Honestly, you should not care much about the exact amount of cache/tier in the storage system in case the cache/capacity ratio is the same as in your target system. Think about it as black-box tests.&lt;/li&gt;
    &lt;li id=&quot;fmba&quot;&gt;It is smart to analyze two cases — normal or expected with an active workload set of ~10% (or whatever number you got by assessing your existing environment) and a reasonable worst case of ~30%.&lt;/li&gt;
    &lt;li id=&quot;OOfQ&quot;&gt;Be accurate and change only one variable at a time.&lt;/li&gt;
    &lt;li id=&quot;XvGh&quot;&gt;Test duration must be sufficient (I will demonstrate this later in the document) to achieve the system’s steady state when caches are warmed up and buffers are full.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;6mtf&quot;&gt;For the next tests, I will use 10% WS (“Normal WS”) and 50% WS (“Huge WS”) also for a more holistic view.&lt;/p&gt;
  &lt;h2 id=&quot;PoUi&quot;&gt;&lt;strong&gt;Analyzing Test and Warm-up Duration Impact&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;ywEU&quot;&gt;Here are some examples of vSAN cluster performance behavior. For this test I’ve used a “Huge” 50% workload set for better visibility:&lt;/p&gt;
  &lt;figure id=&quot;U2DV&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1f/a4/1fa4651d-9721-4b38-9ea0-db1da438d731.png&quot; width=&quot;1999&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance over time during random read testing.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gkSh&quot;&gt;For the reads, we can see that the system achieves a steady state in a few minutes and the difference is quite small. This happens because All-Flash vSAN does not have a sizable read cache (well, technically, it does have a small RAM cache, but it is miniscule compared to the “Huge” workload set of 50%, so the RAM cache hit ratio is close to zero, leading to no-cache warm-up behavior).&lt;/p&gt;
  &lt;figure id=&quot;k2lL&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c7/ef/c7ef7b95-e746-45b9-b554-93f6db6bae04.png&quot; width=&quot;1638&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Performance over time during the seq write and mixed workload testing.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k5mZ&quot;&gt;For the writes, the behavior changes dramatically. Because of the write buffer and destaging process, which I explained before, at first, we fill the buffer (and achieve a maximum performance), and, once the buffer is full, vSAN starts destaging. vSAN manages the destaging intensity over time and its performance impact is usually manifested within 1800–3600 seconds (30–60 minutes).&lt;/p&gt;
  &lt;p id=&quot;hNZq&quot;&gt;&lt;strong&gt;Conclusions About Test and Warm-up Duration&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;lmdR&quot;&gt;On the one hand, the longer test and warm-up durations provide more confidence over the results quality:&lt;/p&gt;
  &lt;ul id=&quot;bb3q&quot;&gt;
    &lt;li id=&quot;z1GJ&quot;&gt;Impact and volatility vary significantly, depending on the test’s configuration, storage system, its settings, etc.&lt;/li&gt;
    &lt;li id=&quot;ZUA7&quot;&gt;The performance difference between the beginning of the test and its end can be significant.&lt;/li&gt;
    &lt;li id=&quot;3Zm5&quot;&gt;The longer you test the clearer you see any volatility in the 95/98 percentile.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;FKu3&quot;&gt;But if we run each individual test for many hours or days the total time, we need to invest becomes enormous. So, we need to find out the right balance and ways to optimize:&lt;/p&gt;
  &lt;ul id=&quot;BC4j&quot;&gt;
    &lt;li id=&quot;63ZL&quot;&gt;Look through the data point for the tests to evaluate its steadiness.&lt;/li&gt;
    &lt;li id=&quot;BYOe&quot;&gt;You can significantly decrease the test’s duration in case you are running a set of related tests. For instance, the same workload but with a different number of outstanding IO. The only side effect is — opening tests might not be relevant because of a small warm-up duration, so you should include some “dummy tests” before recording the results.&lt;/li&gt;
    &lt;li id=&quot;kgIS&quot;&gt;You can use shorter tests (like 15-30 minutes) as warm-up pre-runs and, once you understand the needed parameters, you proceed to the final long test and record its result.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;SQZg&quot;&gt;The tests in this guide were run with 15 min of warm-up + 30 minutes of test or with 30 minutes of warm-up + 1-hour of test.&lt;/p&gt;
  &lt;h2 id=&quot;rN6H&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Test the OIO Impact&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;y3U5&quot;&gt;Now we are approaching the main stages of testing, namely, determining the performance of the storage system on the necessary workload profiles. To do this, we run tests at various OIO values, recording performance and latency. As a result, we will get two graphs (in fact, the latency vs IOPS graph is enough for us, but for clarity, I will leave both). Now drawing a line that indicates our latency threshold or adequate maximum if it bellows the threshold and so, we can understand how much IOPS the system can issue under the required conditions:&lt;/p&gt;
  &lt;figure id=&quot;I271&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/a2/94a21b00-4069-481a-92c4-896a86a6b156.png&quot; width=&quot;1784&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Absolute values of vSAN cluster performance at different OIOs under 8K mixed workload&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vjuq&quot;&gt;For an 8K 70/30 workload profile six node cluster could achieve ~730K IOPS at ~1.1ms latency. Or 115K IOPS per node which is more than required.&lt;/p&gt;
  &lt;figure id=&quot;Mv8Z&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d2/cb/d2cbeecb-d201-40ec-b5f6-ae902e3a9f8d.png&quot; width=&quot;1814&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Absolute values of vSAN cluster performance at different OIOs under 64K mixed workload&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;iwuh&quot;&gt;For an 64K 70/30 workload profile six node cluster could achieve ~200K IOPS at ~1.5ms latency and ~220K at 2.8ms. Or ~35K IOPS per node which is also more than required.&lt;/p&gt;
  &lt;p id=&quot;a7iC&quot;&gt;Additionally, we will conduct tests for all other workload profiles:&lt;/p&gt;
  &lt;figure id=&quot;cYkR&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/4c/9d4c985e-d7bf-40f7-b0f0-5e90fdf798e0.png&quot; width=&quot;1720&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Absolute values of vSAN cluster performance at different OIOs under 4K read workload &lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;sMmc&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c2/81/c28155d5-59a3-4ac2-be92-6e71070dbba7.png&quot; width=&quot;1636&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Absolute values of vSAN cluster performance at different OIOs under Seq Write workload &lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;GM3V&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8b/d0/8bd02131-4342-4381-b83e-19c59ebcf2da.png&quot; width=&quot;1722&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Absolute values of vSAN cluster performance at different OIOs under Seq Read workload &lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bNLb&quot;&gt;&lt;strong&gt;Conclusions about OIO&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;KsFd&quot;&gt;
    &lt;li id=&quot;Wno8&quot;&gt;In case you want to understand the storage potential, run the benchmark with different values for OIO to get OIO/IOPS/Latency dependency graphs.&lt;/li&gt;
    &lt;li id=&quot;aOB8&quot;&gt;From the IOPS/Latency graphs get the value of the maximum IOPS achievable with the latency equal to or below your requirements.&lt;/li&gt;
    &lt;li id=&quot;jTaF&quot;&gt;You should do this for every workload profile or storage setting because the optimal OIO value will vary.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;ngH5&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;IOPS Limits.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;7zxM&quot;&gt;As an example, I will run tests with the optimal number of OIO, but different values of IOLimit, which will allow me to build a more accurate dependence of the latency vs IOPS and, at the same time, evaluate from almost zero values to the maximum:&lt;/p&gt;
  &lt;figure id=&quot;B2MC&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/17/b4/17b477a2-8919-4aa6-b4e3-72217dd628de.png&quot; width=&quot;1806&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Latency and IOPS graph at various IOPS limits for random read workload.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;MOcc&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/70/7d/707d9262-c5f0-445e-b660-69dd5b13ec8f.png&quot; width=&quot;1794&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Latency and IOPS graph at various IOPS limits for mixed workloads.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;vmwG&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Testing Results&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;dkAo&quot;&gt;Summarizing the intermediate results of the testing, we confirmed the viability of placing the required number of workloads on the vSAN cluster in the planned configuration at normal operational state if RAID 1 storage policy without Space Efficiency is used.&lt;/p&gt;
  &lt;p id=&quot;OMeL&quot;&gt;We also learned and understood how each of the parameters can affect the test results, as well as what you should pay attention to and in what cases you can expect an additional drop in performance. Further we do not need to carry out all these tests (such as the utilization, workload set, etc) it will be enough for us to use individual selected parameters.&lt;/p&gt;
  &lt;p id=&quot;hgzU&quot;&gt;Now it&amp;#x27;s worth testing against the required load profiles for other storage policies to determine if they can be used to accommodate different workloads. But I will not include these tests in this guide for the sake of brevity since the method will be exactly the same. &lt;/p&gt;
  &lt;h2 id=&quot;WtCq&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Conclusion.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;qBFQ&quot;&gt;I hope I was able to show you how the general approaches outlined in the first part can be applied in practice. You could be convinced that by consistently approaching the task, you can relatively easily conduct benchmarking and, most importantly, get a meaningful result.&lt;/p&gt;
  &lt;p id=&quot;ABse&quot;&gt;Also, this material may be of particular interest to those of you who are looking at and planning to use VMware vSAN in their infrastructure. This guide refers to a fairly popular hardware configuration that can be found in a large number of vSAN installations.&lt;/p&gt;
  &lt;p id=&quot;HRxI&quot;&gt;Thanks to those who had the time and energy to read such long articles. I invite everyone to the discussion and please share your own experiences and recommendations. So, we can further improve these articles together and bring more value to the IT pros community!&lt;/p&gt;
  &lt;p id=&quot;WCBR&quot;&gt;Happy Benchmarking!&lt;/p&gt;
  &lt;h2 id=&quot;cnxi&quot;&gt;&lt;strong&gt;Special Thanks.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;T3zA&quot;&gt;I would like to express my special thanks to &lt;a href=&quot;https://www.linkedin.com/in/adarchenkov/&quot; target=&quot;_blank&quot;&gt;Alexey Darchenkov&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/mikhailmikheev/&quot; target=&quot;_blank&quot;&gt;Mikhail Mikheev&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/in/ageniev/&quot; target=&quot;_blank&quot;&gt;Artem Geniev&lt;/a&gt; for a huge amount of their time, experience, competencies, and invaluable support while creating this guide. Without them it would not have been possible.&lt;/p&gt;
  &lt;p id=&quot;LTkJ&quot;&gt;I also express my gratitude to &lt;a href=&quot;https://www.asbis.com/&quot; target=&quot;_blank&quot;&gt;Asbis&lt;/a&gt; and especially Nikolay Neuchev for providing vSAN demo stand and allowing these tests to be carried out.&lt;/p&gt;
  &lt;h2 id=&quot;Ug4w&quot;&gt;&lt;strong&gt;Appendix A.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;vbTe&quot;&gt;The Hardware BOM:&lt;/p&gt;
  &lt;figure id=&quot;e0o8&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/50/07/5007a3c0-067b-4ee3-81f0-725e490af10e.png&quot; width=&quot;1333&quot; /&gt;
    &lt;figcaption&gt;Hardware Bill of Materials&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IV4t&quot;&gt;The software BOM:&lt;/p&gt;
  &lt;ul id=&quot;UgXf&quot;&gt;
    &lt;li id=&quot;KwIN&quot;&gt;ESXi 7.0 Update 2a (build 17867351) + vCenter 7.0.2.00100 (build 17920168)&lt;/li&gt;
    &lt;li id=&quot;gZKA&quot;&gt;Drivers and Firmware — latest certified from VMware HCL in May 2021&lt;/li&gt;
    &lt;li id=&quot;TFWd&quot;&gt;HCIBench 2.5.3 with FIO&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;osEv&quot;&gt;The vSAN settings:&lt;/p&gt;
  &lt;ul id=&quot;bvAy&quot;&gt;
    &lt;li id=&quot;oYNo&quot;&gt;Storage Policy — FTT-1 Mirror&lt;/li&gt;
    &lt;li id=&quot;hDM9&quot;&gt;RDMA = off&lt;/li&gt;
    &lt;li id=&quot;xnK3&quot;&gt;Adaptive Resync — On&lt;/li&gt;
    &lt;li id=&quot;XbEd&quot;&gt;All other settings are set in the default.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>nkulikov:StorageBenchmarkPart2</id><link rel="alternate" type="text/html" href="https://nkulikov.com/StorageBenchmarkPart2?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>Enterprise Storage Synthetic Benchmarking Guide and Best Practices. Part 2. Success Criteria and Benchmarking Parameters.</title><published>2022-04-27T14:54:21.539Z</published><updated>2022-04-27T18:06:13.196Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c4/eb/c4ebcde7-bcbc-4758-9614-ea8256cac2e7.png"></media:thumbnail><category term="enterprise-storage-benchmarking-guide" label="Enterprise Storage Benchmarking Guide"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/19/93/199307b3-9c8d-4c62-b1d2-1e207e4ea45c.png&quot;&gt;As I mentioned in the first part of the guide, defining the goals and success criteria is a mandatory step for a successful POC. Of course, success criteria will vary, but they all have something in common — they should follow the S.M.A.R.T. rules:</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#o8E4&quot;&gt;Define the Success Criteria for the Synthetic Benchmark.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#uUjf&quot;&gt;Initial data and inputs.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#5cwt&quot;&gt;Collecting Metrics from Existing Systems.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#1WEw&quot;&gt;The List of Parameters to Be Defined.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#2hsB&quot;&gt;Workload profile&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ohas&quot;&gt;Worker VMs&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#c4HJ&quot;&gt;Size Of the Virtual Disk and the Overall Capacity Utilization.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#YkHp&quot;&gt;Active Workload Set&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ivtF&quot;&gt;Test and Warm-Up Durations.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#o8Ml&quot;&gt;Outstanding IO or iodepth (OIO).&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#O8ZD&quot;&gt;IOPS Limits.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#1ROi&quot;&gt;Conclusion. &lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;o8E4&quot;&gt;Define the Success Criteria for the Synthetic Benchmark.&lt;/h2&gt;
  &lt;p id=&quot;8Mtd&quot;&gt;As I mentioned in &lt;a href=&quot;https://nkulikov.com/StorageBenchmarkPart1&quot; target=&quot;_blank&quot;&gt;the first part&lt;/a&gt; of the guide, defining the goals and success criteria is a mandatory step for a successful POC. Of course, success criteria will vary, but they all have something in common — they should follow the S.M.A.R.T. rules:&lt;/p&gt;
  &lt;ul id=&quot;DHA6&quot;&gt;
    &lt;li id=&quot;ginE&quot;&gt;Specific — the goal should be specific and clear for everyone involved in testing. There should be no misaligned or ambiguous interpretations or “it goes without saying”.&lt;/li&gt;
    &lt;li id=&quot;lPDl&quot;&gt;Measurable — this means there is a metric or number, which can unequivocally decide pass/not-pass or the result A is better than B.&lt;/li&gt;
    &lt;li id=&quot;AkKF&quot;&gt;Attainable — the requirements should be realistic and achievable (at least in theory) by every participant. Otherwise, there is no reason to spend time on it.&lt;/li&gt;
    &lt;li id=&quot;tO3S&quot;&gt;Relevant — it is the most important item here. You should be able to clarify and very clearly show why such goals and metrics were chosen. How are they linked to the business needs? Why exactly this metric or number and not another? And be careful with references to the “industry standards,” “this is how we did it previously,” “experience in other companies.” It is too easy to make a mistake and lose relevance to your specific business needs.&lt;/li&gt;
    &lt;li id=&quot;J3zm&quot;&gt;Time-bound — your POC plan should have explicitly and upfront defined timelines and deadlines.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;V2cJ&quot;&gt;&lt;strong&gt;The goals, as well as a detailed benchmark program (that describes exactly how the tests will be done), should be written BEFORE the beginning of the POC and approved/confirmed by every participant.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;I6Vf&quot;&gt;I also recommend sending the draft of the program to the participants, often they can provide some useful advice, recommendations, or comments and in order to get them ready. As well as to be in touch with vendors/partners in the process of the benchmarking especially if there are some issues or the system could not achieve the goals. Often, the issues can be easily solved just with the proper setup and tuning.&lt;/p&gt;
  &lt;p id=&quot;fGDl&quot;&gt;A simplified example of the success criteria could look like this: “The latency in guest OSes running on the storage system under normal conditions and fully operational state should be less than 1.5ms at 95th percentile while providing 100K IOPS with profile 8K 70/30 Read/Write 90% Random. The workload is generated by 12 VMs with 5 virtual disks in each, storage utilization (total amount of data stored by these VMs) should be 70% of the useful storage capacity, active workload set size is 10%, test duration 2 hours after 1 hour of the warm-up”.&lt;/p&gt;
  &lt;h2 id=&quot;uUjf&quot;&gt;&lt;strong&gt;Initial data and inputs.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;hSth&quot;&gt;The first and the biggest challenge of the benchmarking that appears at the preparation phase is to gather data and the metrics to specify the goals. In the above example there were a lot of numbers, like workload profile, workload sets, required response time, etc. The question is “How, Where, and from Whom can I get all of these numbers?”&lt;/p&gt;
  &lt;p id=&quot;n2dE&quot;&gt;In your specific situation, you can explore various ways to collect the data, but the most common are:&lt;/p&gt;
  &lt;ol id=&quot;HsNu&quot;&gt;
    &lt;li id=&quot;M0Jr&quot;&gt;Get the data directly from the application owners. In theory, they know the best about their app’s requirements. Practically, it is quite rare for the application team to be that much aware and be able to provide infrastructure-related metrics. But at the same time, they have other extremely valuable information - peak periods, components and processes that have a key impact on business users, response time objectives, types of services that run inside the application, etc.&lt;/li&gt;
    &lt;li id=&quot;M14C&quot;&gt;Profiling. We can describe the required business services and deconstruct them down to the elements they consist of. Then pick the most critical and/or heavily loaded components and conduct the in-depth analysis of such. We do that by collecting the workload profile stats related to those components. At this point, you should get an accurate application load profile, response time objectives, and an estimate of performance requirements (which can either be equal to the current load or scaled up). This way we can reproduce the workload on the tested system as close as possible. The results will indicate if a particular service is able to run on the tested system or not (from the performance point of view). Having done with one service we will then move to the next one. Just mind the possibility of workload interference if your storage is shared amongst multiple services and explore the options to neutralize or minimize the potential impact in advance.&lt;/li&gt;
    &lt;li id=&quot;BWey&quot;&gt;Averaging and generalization. With this approach, we look at the problem from the other side — apps and services are the “black boxes” which create the load onto your storage infrastructure. They show the overall load profile that comes to the storage system from applications as well as current average response time and performance. We can analyze the workload profile and patterns from the storage point of view and try to reproduce the load. Just be aware that it will be harder to notice finer performance issues hidden within this mass, while those can have a significant impact on a particular service.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;aY6o&quot;&gt;I recommend combining these approaches for achieving the best results. It makes sense to join forces with app teams to analyze separately the Business-critical apps and services consuming a major part of the storage infrastructure. And augment this analysis with the more generic infrastructure tests if there is a possibility to do so.&lt;/p&gt;
  &lt;p id=&quot;3xZe&quot;&gt;Based on my experience, I would recommend the following course of action to you:&lt;/p&gt;
  &lt;ol id=&quot;g8xH&quot;&gt;
    &lt;li id=&quot;2B7m&quot;&gt;Define the list of most business-critical workloads, services and apps that are planned to be deployed on the storage system.&lt;/li&gt;
    &lt;li id=&quot;pxjk&quot;&gt;Have a discussion with the applications’ owners on apps’ components, specifics, key requirements and what you should pay special attention to.&lt;/li&gt;
    &lt;li id=&quot;Cmwt&quot;&gt;Accurately analyze the load profile of these applications in low-level details.&lt;/li&gt;
    &lt;li id=&quot;oULL&quot;&gt;Analyze overall metrics from the infrastructure.&lt;/li&gt;
    &lt;li id=&quot;4FoX&quot;&gt;Create a table showing the workload profile for every business-critical app and for infrastructure overall. &lt;/li&gt;
    &lt;li id=&quot;4JUv&quot;&gt;Specify the success criteria for each of them (which usually contain acceptable response time and required performance in IOPS).&lt;/li&gt;
    &lt;li id=&quot;WxMs&quot;&gt;Agree criteria with application owners and vendors.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;eLeZ&quot;&gt;Once the workload profile is captured there are several ways to reproduce it. Subject to your goals and objectives, one option is to generate exactly the same amount of load (bandwidth, IOPS with the same block size) and measure the response time to confirm if it is below the required level. This is an effective way for constant and stable infrastructure. Alternatively, you can measure the maximum load that the system can handle. You do so by setting the response time goal and gradually increasing the workload corresponding to the production one till the latency hits the threshold.&lt;/p&gt;
  &lt;p id=&quot;pst4&quot;&gt;Finally, it is also important to analyze a reasonable worst-case scenario. The most obvious example is to test storage in a degraded state. We all know that disks and nodes will fail during the operations, this leads to performance degradation and rebuilds. Another example would be massive trim/unmap requests due to the bulk deletion of data / VMs, or dedup metadata recalculation, or low-level block management, etc. The idea here is to ensure that the system can always provide the required performance, even in the partially degraded or impaired state. But keep it reasonable, in most situations there is little sense in testing the absolutely worst-case scenario, where everything blows-up and all the bad things happen simultaneously (unless it is a mission-critical nuclear reactor safety system or something like this).&lt;/p&gt;
  &lt;h2 id=&quot;5cwt&quot;&gt;&lt;strong&gt;Collecting Metrics from Existing Systems.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;Glrc&quot;&gt;Ok, so you have chosen the benchmarking approach, and defined which systems and components to analyze. Now you need to collect the data and metrics from these components and infrastructure to create workload profiles, so let’s discuss the popular options. For my example I am going to leverage VMware virtualization platform, however most tools are cross-platform or have an equivalent for other platforms, so the approach will be remarkably similar. I will start from the high-level data and then move to low-level statistics.&lt;/p&gt;
  &lt;p id=&quot;HnKK&quot;&gt;First of all, investigate existing monitoring dashboards. Probably there is some amount of required and important data there. Discuss with application owners and infrastructure teams the metrics they pay attention to and that are critical for them. But highly likely, you’ll have to augment that data using additional sources.&lt;/p&gt;
  &lt;p id=&quot;3y3p&quot;&gt;Various infrastructure assessment tools can serve as such additional data sources. One of the fastest and easiest assessment tools, wherein providing most of the required metrics is Live Optics. I frequently use Live Optics as it is a free and cross-platform tool. It collects required metrics from 1 to 7 days with absolutely minimal effort to configure. Just download a portable app, run it on any machine that has access to the infrastructure, provide read-only credentials, select the infrastructure segment and analysis’ duration. That’s it. When it is done, you download the report from the cloud portal directly. If your environment is air-gapped and the Live Optics machine has no Internet access, you can manually upload the source data into the portal. The main benefits of Live Optics are ease of use, good enough selection of metrics, including averages and peaks, configurable analysis duration (up to one-week). On the other hand, it is not customizable, and 7 days sometimes are not enough to capture possible spikes or peaks. &lt;/p&gt;
  &lt;figure id=&quot;CXDN&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/19/93/199307b3-9c8d-4c62-b1d2-1e207e4ea45c.png&quot; width=&quot;1999&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Example of the Live Optics Summary Report. &lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;TS4L&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/87/71/8771264c-66f7-4171-b985-f37a363ffda6.png&quot; width=&quot;1184&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Example of Live Optics Block Size Chart.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;s6Fe&quot;&gt;If you need a more flexible tool, you can leverage custom dashboards or reports in your existing monitoring system. It is great if you already have most of the historical values available in your monitoring system, but if not — you can install it fresh and start analyzing the data. One of the commonly used monitoring solutions for VMware Software-Defined Datacenter is vRealize Operations (vRops). It stores most of all required data by default for a long time but lacks out-of-the-box dashboards and reports that immediately fit the storage benchmarking purposes. However, it is not a big deal to create custom dashboards and reports with the required metrics in vRops. You can also create filters for a specific service or a subset of VMs. Just be aware that by default vRops averages metrics’ values collected over 20 seconds intervals into a single five minute data point, so it is sometimes hard to discover short spikes and peaks. This, however, doesn’t create any major challenges for a longer-term analysis.&lt;/p&gt;
  &lt;p id=&quot;G7hb&quot;&gt;Ideally, you need both high-resolution metrics (about 20-60 seconds), at least for a few days or weeks, as well as a large amount of historical data, which should take into account periodic peaks (closing quarters, seasonal sales, regular reports, etc.). If it is difficult to obtain both at the same time, then a compromise can be found in the form of metrics of lower resolution (for example, 1-5 minutes), but for an extended period such as a year.&lt;/p&gt;
  &lt;figure id=&quot;V2c6&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/01/340139f5-572c-4809-9dc8-f02a550559dd.png&quot; width=&quot;1130&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Example of the Custom Metrics Chart in vRops.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Qg2m&quot;&gt;Finally, if averages are not good enough for your purposes, you can use traces. For the VMware platform, there is a great tool called vscsiStats. It is collecting data at the vSCSI device level inside of the ESXi kernel and has a lot of data required for storage profiling. Examples include the distribution of block sizes (not averaged but the actual split), seek distance, outstanding IO, latencies, read/write ratio, and so on. More detailed information can be found in this article &lt;a href=&quot;https://communities.vmware.com/t5/Storage-Performance/Using-vscsiStats-for-Storage-Performance-Analysis/ta-p/2796805&quot; target=&quot;_blank&quot;&gt;Using vscsiStats for Storage Performance Analysis — VMware Technology Network VMTN&lt;/a&gt;. For the vscsiStats profiling, you will have to select a VM or VMs and start collecting metrics. By default, vscsiStats collects data points over 30 minutes and saves the data into the file for further analysis. However, keep in mind  that this tool also has some drawbacks that limit its usage - it might itself impact the performance, data collection takes place on each host, vMotion of VMs will hinder data collection and it’s a short-term data collection. &lt;/p&gt;
  &lt;p id=&quot;tXbM&quot;&gt;If you are using VMware vSAN there is a tool that simplifies the collection of vscsiStats - vSAN IOInsight. It collects the same metrics and shows the results in vSphere Client, so it is just an easier way to collect traces. There is an example of metrics from vSAN IOInsight:&lt;/p&gt;
  &lt;figure id=&quot;QPT6&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/91/5c/915ccd04-b970-4d3a-a7bd-22a90099fc51.png&quot; width=&quot;1448&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;mdmx&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/81/94816bfe-0ac7-4396-beab-1a1b96ad843b.png&quot; width=&quot;1448&quot; /&gt;
    &lt;figcaption&gt;Example of vSAN IOInsight Report&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ieNg&quot;&gt;As an example of a similar tool for the Linux platforms, there is the bpftrace, which can provide the storage metrics at the guest OS level (take a look at bpftrace utilities &lt;a href=&quot;https://github.com/iovisor/bpftrace/blob/master/tools/biolatency_example.txt&quot; target=&quot;_blank&quot;&gt;biolatency&lt;/a&gt;,&lt;a href=&quot;https://github.com/iovisor/bpftrace/blob/master/tools/bitesize_example.txt&quot; target=&quot;_blank&quot;&gt; bitesize&lt;/a&gt;, and others).&lt;/p&gt;
  &lt;p id=&quot;3N4o&quot;&gt;For the most holistic evaluation, you can combine different methods and tools to achieve a comprehensive assessment of the workload. Use the monitoring tool to analyze the long-term performance requirements and identify the most loaded components. And then analyze their workload profiles with vSCSI stats tracing tools.&lt;/p&gt;
  &lt;h2 id=&quot;1WEw&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;The List of Parameters to Be Defined.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;qX4f&quot;&gt;To run the tests, you must enter several parameters into the benchmarking tool, each of those can have a serious impact on the behavior of the storage system. &lt;/p&gt;
  &lt;p id=&quot;LXcn&quot;&gt;The main principle of the valid synthetic benchmarking — &lt;strong&gt;EVERY variable/parameter/number:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;gb2S&quot;&gt;
    &lt;li id=&quot;n834&quot;&gt;Must be explained and understood, there must be a clear understanding why exactly this number is chosen.&lt;/li&gt;
    &lt;li id=&quot;IrRv&quot;&gt;Must be written and documented.&lt;/li&gt;
    &lt;li id=&quot;rzCp&quot;&gt;Must be agreed with every POC participant.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;kPWM&quot;&gt;The easiest way to self-check is to ask yourself: “Why did I choose this number and not another?”. If the answer is “I took this number from the assessment of the existing infrastructure” or “This is the requirement from the business/application owners” or “This is a recommendation from Best Practice and it&amp;#x27;s suitable for our future use” then it’s ok. If there is no answer or “some guy on the Internet told me it’s right” or “I saw this number in someone else’s benchmark” please pause and re-consider. Think about what this parameter really means and how you can define its value.&lt;/p&gt;
  &lt;p id=&quot;UaFY&quot;&gt;&lt;strong&gt;Let’s define the list of the general variables you should define based on the HCIBench example:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;MDlZ&quot;&gt;
    &lt;li id=&quot;TaxG&quot;&gt;Workload profile:&lt;/li&gt;
    &lt;ol id=&quot;N9VX&quot;&gt;
      &lt;li id=&quot;IQEy&quot;&gt;Block Size&lt;/li&gt;
      &lt;li id=&quot;pkld&quot;&gt;Read/Write Ratio&lt;/li&gt;
      &lt;li id=&quot;F0Eo&quot;&gt;Random/Sequential Ratio&lt;/li&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;411b&quot;&gt;A number of workers VMs and their configuration.&lt;/li&gt;
    &lt;li id=&quot;7op0&quot;&gt;Size of the virtual disks&lt;/li&gt;
    &lt;li id=&quot;swjE&quot;&gt;Active Working Set&lt;/li&gt;
    &lt;li id=&quot;X3Wa&quot;&gt;Test duration and Warm-Up Time&lt;/li&gt;
    &lt;li id=&quot;h8TB&quot;&gt;Number of Threads/Outstanding IO&lt;/li&gt;
    &lt;li id=&quot;WCrQ&quot;&gt;IO Limit&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;fTGh&quot;&gt;Let&amp;#x27;s go one by one explaining what they mean and how to define them. &lt;/p&gt;
  &lt;h3 id=&quot;2hsB&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Workload profile&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;iVgX&quot;&gt;Workload profile defines the specific pattern(s) of IO requests sent to the storage system. It has the following dimensions:&lt;/p&gt;
  &lt;ul id=&quot;DKJd&quot;&gt;
    &lt;li id=&quot;UIyw&quot;&gt;Block size. It is the size (typically in KB or MB) of read and/or write request sent from Guest OS/Application to the storage.&lt;/li&gt;
    &lt;li id=&quot;Suv2&quot;&gt;Read/Write Ratio. It is the ratio of read operations to write operations.&lt;/li&gt;
    &lt;li id=&quot;idAz&quot;&gt;Random/Sequential Ratio. Sequential IO is a sequence of requests accessing data blocks that are adjacent to each other. On the contrary, Random IOs are requests to unrelated blocks each time (with greater distance between them). Good illustration is &lt;a href=&quot;http://en.wikipedia.org/wiki/File:Random_vs_sequential_access.svg&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;DJ6S&quot;&gt;Every tool for collecting metrics I’ve described above, will provide you an average block size and read/write ratio. &lt;strong&gt;So, you just need to investigate it and you will get average numbers outlining your infrastructure.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;s6qg&quot;&gt;It is a bit harder to assess the requests’ “randomness,” since this requires tracking LBA addresses of every request to determine seek distance. And it’s possible only with tracing tools like vSCSI stats or bpftrace. However, if you are running a virtualized or mixed environment, the IO requests will be of mostly random nature (exceptions to this rule include backup jobs, copy, upload operations and so on, but they rarely directly affect business processes). &lt;strong&gt;Hence, for such environments it makes a lot of sense to run most of the tests at 90-100% of Random IOs.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;hPuW&quot;&gt;Most often averaged numbers are used to describe the workload profile. However, I strongly recommend analyzing &lt;strong&gt;and reproducing the exact block size distributions.&lt;/strong&gt; Because in real life it’s always a non-uniform mix of blocks with different sizes. Here is just an IO pattern example, captured with vscsiStats for a real-world application:&lt;/p&gt;
  &lt;figure id=&quot;i849&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2e/c5/2ec5605a-b385-4d17-bdb6-c3ed224cdcbc.png&quot; width=&quot;1911&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;l9KY&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/55/0a/550a242f-3ce9-4b67-8687-4ae9f096dd5c.png&quot; width=&quot;1928&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Application’s IO block size distribution pattern in bytes captured with vscsiStats&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ct6s&quot;&gt;In this example, most blocks are 8K and 16K for Reads, and most of the writes are 4K and 8K, but there are also some ~128K and 512K blocks. And this small number of huge blocks can make a significant difference, because they are filling up the storage write buffers and consume the bandwidth thus preventing the fast processing of small blocks. Therefore, even though the most popular write block size is 4-8K in this case, and the average is ~ 30KB, it is incorrect to run a benchmark with 30K blocks, and even more so 4-8K blocks.&lt;/p&gt;
  &lt;h3 id=&quot;ohas&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Worker VMs&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;ycNM&quot;&gt;You also should define the number of worker VMs and their configurations, especially the number of virtual disks, number of vCPU, and vRAM amount per worker.&lt;/p&gt;
  &lt;p id=&quot;vOeB&quot;&gt;The choice of vCPU and vRAM per worker is quite straightforward. &lt;strong&gt;The idea is to avoid the bottlenecks within the workers themselves and at the virtualization platform level, thus making sure that the benchmarking results are isolated to the storage system only.&lt;/strong&gt; So, you should just verify there is no 90–100% CPU utilization inside the workers and the platform. In ordinary cases (when it is not one worker rushing the whole storage but a lot of them), &lt;strong&gt;4 vCPU/8GB RAM or 8vCPU/16GB RAM are ok.&lt;/strong&gt; The most indicative test to check for the reasonable CPU utilization is 4K 100% Read. Immediately after the deployment, you can run this test to verify that you have not hit the compute limits. But even after, you should periodically check the utilization during the tests.&lt;/p&gt;
  &lt;p id=&quot;z5pN&quot;&gt;The number of VMs and the number of virtual disks (vmdks) is a little bit more complex. &lt;strong&gt;You should analyze the rough ratio of the vmdks per host in your environment and replicate it as much as possible during the benchmarking.&lt;/strong&gt; By placing multiple vmdks we are avoiding the potential bottleneck with the vSCSI adapter and balancing the load. While using only one vmdk per worker VM can dramatically increase the number VMs leading to high vCPU oversubscription ratios and hiding the true storage system performance behind the stressed platform. This may be a challenge when your physical hosts resources are lacking. That said, it makes sense to use several vmdks per worker VM. &lt;strong&gt;A typical number of workers is 2–8 VMs per host and 2–10 vmdks per VM&lt;/strong&gt; (which closes most cases in the range of 4-80 vmdks per host), but it is always better to validate the numbers yourself in your own environment. &lt;/p&gt;
  &lt;h3 id=&quot;c4HJ&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Size Of the Virtual Disk and the Overall Capacity Utilization.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Og2f&quot;&gt;&lt;strong&gt;The size of the vmdk defines how much data you STORE&lt;/strong&gt;. Total capacity is defined as the number of VMs multiplied by the number of vmdks per VM multiplied by the size of each vmdk. It has nothing to do with the data access. For example, it could be a cold archive — write once - read almost never, but you still store it. How to define the total capacity required? In case you have a scaled-down system for the test it should be defined as the percentage of the total capacity. &lt;strong&gt;This number should be aligned with your future storage environment.&lt;/strong&gt; For example, if you need to store 100TB of usable capacity and the storage system vendor recommends you not to exceed 80% utilization because of the performance impact, you need to purchase 125TB of usable capacity (after raid/spares/system/etc). So, if a vendor provides you a 50TB system for a test, you should fill it at an 80% level by uploading 40TB of data. &lt;/p&gt;
  &lt;figure id=&quot;crTD&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a1/43/a1434b93-d277-48c1-aa9d-7e7aad0fca0f.png&quot; width=&quot;974&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Various levels of vSanDatastore utilization&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HGtL&quot;&gt;Also, the critical part is &lt;strong&gt;to enable the PREPARATION of this capacity.&lt;/strong&gt; This means you need to write down the whole amount of data before starting any test. I always recommend running the preparation with random data, not zeros to avoid undesirable specific behavior storage might have for the processing of bulk zeros (e.g. deduplication, compression, or zero-detection).&lt;/p&gt;
  &lt;p id=&quot;rXBQ&quot;&gt;It is quite interesting to analyze the impact of high-capacity utilization, especially when you are evaluating the worst-case scenarios too. In some storage systems, a high-capacity utilization can dramatically impact the performance due to internal processes. And the unexpected storage space overconsumption can happen due to an operator’s mistake or poor planning or other unforeseen circumstances. Thus, it makes sense to test not only with the planned/expected utilization but also with the higher numbers to understand the behavior, risks, and the potential impact.&lt;/p&gt;
  &lt;h3 id=&quot;YkHp&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Active Workload Set&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;giVM&quot;&gt;Active Workload Set or just Workload Set (WS) sometimes confuses people. &lt;strong&gt;To make it clear — it is an amount of data you ACCESS or in other words actively working with. &lt;/strong&gt;This heatmap is good example to illustrate an active workload set vs the total capacity:&lt;/p&gt;
  &lt;figure id=&quot;4wiE&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/17/89/1789246a-bca7-4fa9-b061-a4d5c404f916.png&quot; width=&quot;922&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Illustration of blocks of data with active access&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2FCK&quot;&gt;Here the total amount of bricks illustrates the amount of data you store, and their color indicates the amount of data you actively work with. For example, if you evenly process every GB you have written, the active workload set will be equal to the total capacity and every brick should be marked in red.&lt;/p&gt;
  &lt;p id=&quot;XSQi&quot;&gt;In fact, this almost never happens. Even if most of the data is analyzed it is not done at the same time — one day we are working with one block of the data and with another the next day. Also, most of the data is rarely touched at all. Just imagine the system disk of any OS — most of the data, files, and packets are used extremely rarely, wherein others are processed at every reboot.&lt;/p&gt;
  &lt;p id=&quot;t40K&quot;&gt;The problem is how to analyze the amount of active workload set as the percentage of the usable capacity. And it is one of the most challenging metrics to analyze in your existing infrastructure. Some options we have:&lt;/p&gt;
  &lt;ol id=&quot;JeZV&quot;&gt;
    &lt;li id=&quot;3iAU&quot;&gt;&lt;strong&gt;Daily Writes in TB.&lt;/strong&gt; It is quite easy to acquire (Write Performance in MB/s multiplied by the duration of the writes or more strictly speaking it’s an integral of the write throughput over the time). The problem here is that we can’t separate “net new writes” and “existing records re-writes”. For example, if an application constantly rewrites 10GB in the loop for an entire day, we will see a lot of daily writes, but the true active workload set is only 10GB. The second issue — it does not account reads, and the amount of data read. But still, it is the easiest way to somehow evaluate the active workload set.&lt;/li&gt;
    &lt;li id=&quot;fFkn&quot;&gt;The second option is to analyze the &lt;strong&gt;size of the incremental backup.&lt;/strong&gt; It is also easy to do (Of course you make backups, right?) and provides the real amount of data changed. But still, no accountability for reads.&lt;/li&gt;
    &lt;li id=&quot;R7EW&quot;&gt;The third way is to&lt;strong&gt; examine your existing storage system.&lt;/strong&gt; Almost every storage has a write buffer and a read cache. You know the size of both and by looking into the destaging activity (data eviction from the write buffer to the next tier), read cache miss ratio as well as how full they are you can more or less accurately estimate the active workload size.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;aGQF&quot;&gt;Speaking about averages and industry guidelines (Yes, I remember that I asked not to rely on “industry averages,” but sometimes it is really hard to avoid this), you will see quite close &lt;strong&gt;estimates — the workload set is 5–15% of the total capacity.&lt;/strong&gt; VMware &lt;a href=&quot;https://core.vmware.com/resource/vmware-vsan-design-guide#sec6843-sub2&quot; target=&quot;_blank&quot;&gt;points&lt;/a&gt; to ~10%. In case you want to test&lt;strong&gt; the worst-case scenario, 30% is a reasonable&lt;/strong&gt; number that well overlaps the regular ~10%.&lt;/p&gt;
  &lt;h3 id=&quot;ivtF&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Test and Warm-Up Durations.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;r44c&quot;&gt;During the tests there are processes that lead to performance variations. Most of them are caused by the effect of various buffers, caches, and tiers. Because enterprise workloads generate continuous load to the storage system it is important to measure not the transient but the steady-state performance.&lt;/p&gt;
  &lt;p id=&quot;RnPC&quot;&gt;&lt;strong&gt;Warm-up helps eliminate initial transitional processes and to enter a steady state.&lt;/strong&gt; It is just a period of time when workers process the requested workload, but the results are not captured. The warm-up duration should not be less than it takes for the transitional processes to settle down.&lt;/p&gt;
  &lt;p id=&quot;dT6o&quot;&gt;&lt;strong&gt;The duration of the test should be sufficient to analyze the behavior of the storage system in the long run.&lt;/strong&gt; It is important to measure how &lt;strong&gt;consistent the results are and, in particular, the response time.&lt;/strong&gt; Steady-state response time is a critical metric. Imagine, that your app is enjoying 1ms response time for the first 30 minutes, and for the next 5 minutes it goes up to 30ms to return back to 1ms once the buffers are flushed. The average latency will be ok, but these spikes should be discovered. Thus, it makes sense to measure not only the average latency but also its percentile (there is a great post about it from Dynatrace &lt;a href=&quot;https://www.dynatrace.com/news/blog/why-averages-suck-and-percentiles-are-great/&quot; target=&quot;_blank&quot;&gt;Why averages suck and percentiles are great | Dynatrace news&lt;/a&gt;). You can pick your own percentile to measure, but the most common are90th, 95th, or 98th. The higher percentile you set, the more stable and constant latency you will get. On the other hand, with the higher percentile value, you risk missing the transitions’ impact and, potentially, get a more littered result.&lt;/p&gt;
  &lt;p id=&quot;Wja4&quot;&gt;So how to understand what will be sufficient warmup and test durations? &lt;strong&gt;Look at the data points in the FIO/vdbench report.&lt;/strong&gt; They not only show the final results but can also record the intermediate values during the test. &lt;strong&gt;Look into it and if you notice a significant difference over the test duration, then the tests are not performed in a steady-state, and you should increase the warm-up duration.&lt;/strong&gt; Test duration can be set twice as long as the warm-up duration to be sure that you catch the impact of any extra internal operations of the storage system you test. Most likely, if the initial transitional processes take X time to settle down once the tests start, those extra internal processes should reveal their impact earlier on the loaded system.&lt;/p&gt;
  &lt;h3 id=&quot;o8Ml&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Outstanding IO or iodepth (OIO).&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;HPBS&quot;&gt;Outstanding IO (OIO) or iodepth indicates in a nutshell the degree of parallelism. The more OIO are configured the more requests will be sent to the storage system from workers in parallel.&lt;/p&gt;
  &lt;p id=&quot;PikR&quot;&gt;If you run validation tests with a number of IOPS equal to your production workload, you can simply configure the same total OIO from the workers. &lt;strong&gt;But if you want to uncover the full potential of the storage system you must vary the OIO to find out the point of best performance.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;kMIR&quot;&gt;It is imperative to understand that &lt;strong&gt;storage is a reactive system. It does not generate anything itself, it only responds to the request from its clients.&lt;/strong&gt; This is why there may be situations where clients generate a little load easily handled by the storage system. Storage is underutilized and has an enormous potential, but to demonstrate its potential we need to increase the load and the number of requests. Or, alternatively, the storage system may be fully utilized and cannot provide more IOPS. In this case, should you increase the number of requests, you will observe higher latencies, but not an increase in IOPS. And only somewhere in the middle, there is a balanced trade-off of latency vs IOPS in the operating mode. Hence, the dependency between IOPS and OIO from the latency perspective manifests itself like on the below graph:&lt;/p&gt;
  &lt;figure id=&quot;Xnq5&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0e/13/0e13237b-ed91-49c5-89e7-8b7882fbbda9.png&quot; width=&quot;1999&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Storage system performance modes&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MX5n&quot;&gt;Therefore, you should vary OIO to obtain the “optimal” number of OIO. What is “Optimal&amp;#x27;&amp;#x27;? &lt;strong&gt;It is the amount of OIO where the system provides maximum performance (IOPS) while latency is equal to or below your required level.&lt;/strong&gt; The challenge is that this “optimal OIO&amp;#x27;&amp;#x27; will be different for different workload profiles, system settings, etc. This means that every test should be run not at a single OIO setting but with multiple OIO values in the neighborhood of the “optimal point.” Thus, you will ensure that you’ve discovered the correct OIO value.&lt;/p&gt;
  &lt;p id=&quot;74NK&quot;&gt;To do this, run tests starting at low values and gradually increase them. By analyzing the results, you can determine what mode the storage system is currently in. Thus, if you see a significant increase in performance at about the same latency, then you should specify even higher values ​​of OIO. And vice versa, if the delays increase sharply, and the performance practically does not change, then reduce the values of OIO. Do this until you get a few results in the normal mode in the vicinity of the latency threshold.&lt;/p&gt;
  &lt;p id=&quot;Fp6T&quot;&gt;You will end up with two graphs IOPS/OIO and IOPS/Latency. After that, just cut off its upper at your required latency value and you will get your “optimal OIO&amp;#x27;&amp;#x27; as well as “Max IOPS.”&lt;/p&gt;
  &lt;h3 id=&quot;O8ZD&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;IOPS Limits.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;EElP&quot;&gt;Additionally, if you &lt;strong&gt;need more precise IOPS/Latency dependency graphs, especially on the wider range of values, you can run the benchmark with IOPS limits set.&lt;/strong&gt; The pointhere is not to change the parallelism, but the request rate with the optimal outstanding OIO.&lt;/p&gt;
  &lt;p id=&quot;BBx3&quot;&gt;To do so, after defining the optimal OIO you run multiple tests with different IOPS Limits from small one to unlimited. Be aware that starting from some value of IOPS limits, the dots (IOPS and latency) will start to converge and match. This is ok because this means that you’ve hit the IOPS maximum and no matter what limit you set you get the same result.&lt;/p&gt;
  &lt;h2 id=&quot;1ROi&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Conclusion. &lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;huJc&quot;&gt;In order to conduct a successful benchmark, move consistently and do not skip any of the steps - from defining a goal to describing methods and approaches, and then to specific parameters and conditions for conducting tests.&lt;/p&gt;
  &lt;p id=&quot;1rQx&quot;&gt;And remember that one of the key indicators of quality testing is the presence of a clear description of ANY parameter used in the test, as well as the presence of an explanation of how it links to tasks and goals. &lt;/p&gt;
  &lt;p id=&quot;DuUa&quot;&gt;If you follow the general principles described in this document and adapt them to your situation, then you can be certain of the results and conclusions’ quality. &lt;/p&gt;
  &lt;p id=&quot;GJhf&quot;&gt;And now let&amp;#x27;s move on to a specific example in &lt;a href=&quot;https://nkulikov.com/StorageBenchmarkPart3&quot; target=&quot;_blank&quot;&gt;Part 3&lt;/a&gt;, where most of the points previously described in this document will be considered in practice.&lt;/p&gt;

</content></entry><entry><id>nkulikov:StorageBenchmarkPart1</id><link rel="alternate" type="text/html" href="https://nkulikov.com/StorageBenchmarkPart1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nkulikov"></link><title>Enterprise Storage Synthetic Benchmarking Guide and Best Practices. Part 1. General Theory, Methods, and Approaches.</title><published>2022-04-27T13:11:21.161Z</published><updated>2022-04-27T14:46:38.232Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c4/eb/c4ebcde7-bcbc-4758-9614-ea8256cac2e7.png"></media:thumbnail><category term="enterprise-storage-benchmarking-guide" label="Enterprise Storage Benchmarking Guide"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/26/43/26432f4a-ce8b-4c9b-8a02-20240a748105.jpeg&quot;&gt;For more than ten years in the IT industry, I have conducted a lot of tests and proof-of-concepts (POC) of various storage systems. While it was a completely different type of storage — traditional FC-connected SAN storage, NAS, SDS (Software Defined Storage), and HCI (Hyper Converged Infrastructure) platforms, the challenges were nearly the same. And quite often I faced a situation where tests were not anyhow aligned with the business needs and even were technically incorrect which led to the impossibility to deliver any meaningful results.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#zBwZ&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#i6n3&quot;&gt;Define the Goal of the Benchmarking.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#IU93&quot;&gt;Choose the approach and benchmarking methodology.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#lSad&quot;&gt;Move or clone the existing production workload to the test system.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#qZu1&quot;&gt;Application-level Synthetic Benchmarks.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#NlEs&quot;&gt;​Synthetic Storage Benchmark.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Rqp9&quot;&gt;Select the Tools and Utilities for Synthetic Storage Benchmarking.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#MRhS&quot;&gt;Establish Demo Environment Configuration.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#do5a&quot;&gt;Hardware&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#fZhB&quot;&gt;Software&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#c3YB&quot;&gt;Conclusion.&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;figure id=&quot;uqks&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/26/43/26432f4a-ce8b-4c9b-8a02-20240a748105.jpeg&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;zBwZ&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;hxk1&quot;&gt;For more than ten years in the IT industry, I have conducted a lot of tests and proof-of-concepts (POC) of various storage systems. While it was a completely different type of storage — traditional FC-connected SAN storage, NAS, SDS (Software Defined Storage), and HCI (Hyper Converged Infrastructure) platforms, the challenges were nearly the same. &lt;strong&gt;And quite often I faced a situation where tests were not anyhow aligned with the business needs and even were technically incorrect which led to the impossibility to deliver any meaningful results.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;vLBx&quot;&gt;We all know how critically important storage can be for IT and business operations. We also know how much effort from all the involved parties is needed to properly test a storage system and produce meaningful results supporting the decision-making process. That&amp;#x27;s why I believe that a well-structured approach with the full attention to details is a must for any kind of storage system test and/or benchmarking.&lt;/p&gt;
  &lt;p id=&quot;YJzI&quot;&gt;Most of storage validation/POC has three parts — availability tests, functional tests, and performance tests (aka benchmarking):&lt;/p&gt;
  &lt;ol id=&quot;Vvp8&quot;&gt;
    &lt;li id=&quot;WaKX&quot;&gt;Functional tests are very organization-specific since they must be aligned with the customer’s IT landscape, business processes, and other specific aspects.&lt;/li&gt;
    &lt;li id=&quot;lXet&quot;&gt;Availability tests are time-consuming, but it is the most obvious part — the customer should create a list of potential risks, describe the expected behavior in each case, define with the vendor/value-added reseller/value-added distributor the options to simulate such scenarios and execute such tests.&lt;/li&gt;
    &lt;li id=&quot;5KEP&quot;&gt;Performance tests or benchmarking are a complicated and often contradictory part of the test plan because it is always a balance between the applicability and the accuracy vs the feasibility and the complexity.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;fRGJ&quot;&gt;In this guide, I am going to cover only the performance testing dimension, and it will be related mostly to synthetic benchmarking of a primary, general purpose storage system. &lt;strong&gt;The main goal of this guide is to provide some guidelines and recommendations on how to benchmark any type of enterprise primary storage to receive valuable results while minimizing the efforts.&lt;/strong&gt; I will not be talking much about general things related to testing in general and about organizing a POC. &lt;/p&gt;
  &lt;p id=&quot;rBjD&quot;&gt;This guide is in two parts - the first part is more versatile and suitable for almost any situation where you need to conduct synthetic load testing. Therefore, it mainly consists of general techniques, best practices, and recommendations (although I will try to add more examples), rather than specific actions. The second part is practical and specific, where I show by example how load tests can be carried out, as well as how each of the load testing parameters affects the result.&lt;/p&gt;
  &lt;p id=&quot;ZL6k&quot;&gt;In order to be more specific and, in fact, to reflect my most recent experience, all further examples will be related to the storage systems tests in a VMware virtual infrastructure environment.  However, these guidelines can be applied to other cases with minimal modifications.&lt;/p&gt;
  &lt;h2 id=&quot;i6n3&quot; data-align=&quot;center&quot;&gt;Define the Goal of the Benchmarking.&lt;/h2&gt;
  &lt;p id=&quot;B1H5&quot;&gt;The first and the most important question you must accurately answer in detail before starting the benchmarking planning is &lt;strong&gt;“What is the goal (aligned with the business needs) of this activity? What should be the result and what conclusion must I ultimately reach?”&lt;/strong&gt; To answer this question, you should have a conversation with all the key stakeholders, including the business owner of this project, system administrators, and the application owners. This is a critical step before moving on.&lt;/p&gt;
  &lt;p id=&quot;uQyF&quot;&gt;The goals can be different depending on the situation, but the main are:&lt;/p&gt;
  &lt;ol id=&quot;7N9q&quot;&gt;
    &lt;li id=&quot;RY1U&quot;&gt;&lt;strong&gt;Prove&lt;/strong&gt; that the storage system(s) &lt;strong&gt;satisfies the needs of your apps&lt;/strong&gt; and services.&lt;/li&gt;
    &lt;li id=&quot;ylD9&quot;&gt;&lt;strong&gt;Define the limits and maximums&lt;/strong&gt; of the system to be prepared before the system becomes saturated and is not able to further satisfy the consumers’ needs.&lt;/li&gt;
    &lt;li id=&quot;ZuuJ&quot;&gt;&lt;strong&gt;Define the system’s tunable settings and parameters&lt;/strong&gt; to be used in production, because they can impact the performance. The examples of such settings are deduplication, compression, type of erasure coding, RAID-levels, implementation of disaster recovery/avoidance technologies like replication (and the type of replication), etc, as well as understanding the impact of it. Also define if any advanced settings should be tuned.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;UFbx&quot;&gt;Quite often the goal is described as “compare different storage systems to choose which one to purchase.” If you think about this for a minute, you will realize that this is not the goal itself — it is just the consequence of one of the above goals. First of all, you need to decide what storage system configuration (licenses, RAW capacity, nodes, etc) you should purchase. You always want to compare apples to apples and to do this you need accurate numbers at your disposal.&lt;/p&gt;
  &lt;p id=&quot;vpOf&quot;&gt;In case you are choosing a storage system for a well-defined and predictable workload (e.g., established production environment) you shouldn&amp;#x27;t base your decision on pure performance. It does not matter whether storage is 2 or 3 times faster than required — both are capable to handle your workloads and the decision should be made based on functional, financial, and other criteria.&lt;/p&gt;
  &lt;p id=&quot;tQgD&quot;&gt;Otherwise, if you are looking for a storage system for new and/or unpredictable workloads the system maximums are important to understand the potential and limits of the system.&lt;/p&gt;
  &lt;p id=&quot;SshE&quot;&gt;&lt;strong&gt;So, before the beginning of any benchmarking, you should define and establish the goals, success criteria, and agree with all the interested parties. &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;f5Gj&quot;&gt;Popular examples of benchmark goals:&lt;/p&gt;
  &lt;p id=&quot;5Hz1&quot;&gt;“Validate that the storage system is able to handle the workload from the applications A, B and C (or any part of the infrastructure) and define the storage settings and configuration where this is possible.”&lt;/p&gt;
  &lt;p id=&quot;g9pm&quot;&gt;“Determine the maximum number of application X, Y, Z users that can be processed on the storage system while remaining within the acceptable response time limits. Analyze the impact of storage settings/configuration (like deduplication and compression) on the number of users served.”&lt;/p&gt;
  &lt;p id=&quot;ieqd&quot;&gt;“Define the possible number of virtual machines that can be deployed from the private cloud, as long as they match the current averages from the performance and capacity perspective.”&lt;/p&gt;
  &lt;h2 id=&quot;IU93&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Choose the approach and benchmarking methodology.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;QQ3K&quot;&gt;After defining your goals, you need to select the way of creating a load and measuring the performance. Generally speaking, I could distinguish three types of approaches: &lt;/p&gt;
  &lt;ol id=&quot;bTnN&quot;&gt;
    &lt;li id=&quot;N6TR&quot;&gt;move or clone your production workload (in other words, one way or another, replicating the real load)&lt;/li&gt;
    &lt;li id=&quot;Hbrk&quot;&gt;application-level synthetic benchmark&lt;/li&gt;
    &lt;li id=&quot;HOjm&quot;&gt;storage-level synthetic benchmark. &lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;VJhp&quot;&gt;Let’s take a detailed look at each approach.&lt;/p&gt;
  &lt;h3 id=&quot;lSad&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Move or clone the existing production workload to the test system.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;2iaA&quot;&gt;In this case, you should define key metrics to measure, success criteria and reproduce/analyze the existing workload on the storage system that is being tested. I strongly recommend to choose business-specific metrics, not IT-focused ones. &lt;strong&gt;These metrics must be aligned with the business operations and the corresponding goals and objectives, such as customer experience or others. &lt;/strong&gt;For example, it can be the response time of the app from the end-user perspective, business request processing time, report generation time, the number of users who can use the application with an acceptable response time, etc. After that you should move or clone the application to the new system and compare key metrics. If you decide to clone a workload, you need to remember that the number of users and the activity of their interaction with the system must be commensurate with the original system or scaled accordingly.&lt;/p&gt;
  &lt;p id=&quot;Z8cS&quot;&gt;This approach is the most accurate way to evaluate your workload behavior on the tested system. It is also an efficient way to tune and select parameters of the storage system together with a vendor, partner, and customer.&lt;/p&gt;
  &lt;p id=&quot;2OTh&quot;&gt;Likewise, it is the hardest way that requires the highest amounts of resources, time, and deep involvement of application owners. The complexity of such tests often makes this approach almost non-viable, especially in situations where the storage will be shared amongst several business applications. If you choose to migrate existing applications to the new system that is being tested, you should carefully manage the related risks because if anything goes wrong it will affect the production environment hence current business operations. Also, this approach is applicable only for the existing workloads and not the future needs.&lt;/p&gt;
  &lt;p id=&quot;xt6g&quot;&gt;With that said, this method is usually applied as a final confirmation when the system has already been shortlisted after the first round of tests and the storage is intended to be used for the specific business-critical application such as the core banking system, ERP, etc.&lt;/p&gt;
  &lt;h3 id=&quot;qZu1&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Application-level Synthetic Benchmarks.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;l9oe&quot;&gt;Typically, the application-level benchmark is a combination of the real application and load generating software. Examples include:&lt;/p&gt;
  &lt;ul id=&quot;ZPQs&quot;&gt;
    &lt;li id=&quot;OCPW&quot;&gt;Any SQL Database (MS SQL, Oracle, PostgreSQL, MariaDB, etc) +&lt;a href=&quot;https://www.hammerdb.com/index.html&quot; target=&quot;_blank&quot;&gt; HammerDB&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;IPdY&quot;&gt;Web server + &lt;a href=&quot;https://github.com/wg/wrk&quot; target=&quot;_blank&quot;&gt;wrk&lt;/a&gt;/&lt;a href=&quot;https://httpd.apache.org/docs/2.4/programs/ab.html&quot; target=&quot;_blank&quot;&gt;ApacheBenchmark&lt;/a&gt; (or &lt;a href=&quot;https://jmeter.apache.org/&quot; target=&quot;_blank&quot;&gt;JMeter&lt;/a&gt;, but it is more complex and usually used for end-to-end web app benchmark).&lt;/li&gt;
    &lt;li id=&quot;4LMp&quot;&gt;SAP + &lt;a href=&quot;https://www.sap.com/about/benchmark.html&quot; target=&quot;_blank&quot;&gt;SAP Standard Application Benchmark&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;Jc6v&quot;&gt;VDI environment + &lt;a href=&quot;https://www.loginvsi.com/products/application-and-infrastructure-load-testing/&quot; target=&quot;_blank&quot;&gt;LoginVSI&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;uaEX&quot;&gt;Depending on the storage system use cases, it is worth using one or more of such application-level benchmarks.&lt;/p&gt;
  &lt;p id=&quot;xOB3&quot;&gt;These tests are quite representative (although may not fully respect customer application specifics), easier to leverage because of ready-to-use test plans and provide the possibility to push the system to its limits by scaling the workers/load generators.&lt;/p&gt;
  &lt;p id=&quot;2W2o&quot;&gt;But it still often requires the application owner’s participation and sometimes it is hard to interpret the results, especially in mixed environments. Also, it can be problematic to distinguish the impact of storage on the overall result because of the impact of CPU, network, etc.&lt;/p&gt;
  &lt;p id=&quot;mFlh&quot;&gt;&lt;strong&gt;For these reasons this method is commonly used to compare the storage systems or to test the existing system&amp;#x27;s applicability for the particular workload.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;NlEs&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;​Synthetic Storage Benchmark.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;RbHo&quot;&gt;The concept is completely different from the previous approaches — there is no real application, just a tool that sends IO requests with the required parameters depending on the expected workload pattern to the underlying infrastructure. There is no processing of data at the application level as well as there is no real-world data.&lt;/p&gt;
  &lt;p id=&quot;Xvwx&quot;&gt;&lt;strong&gt;The main benefits of this method are flexibility and ease of use.&lt;/strong&gt; Participation of apps teams is not required; the infrastructure team can complete all the tests themselves. The tests can be easily automated so it is possible to complete the tests of many storage systems in parallel thus significantly reducing the duration of POCs.&lt;/p&gt;
  &lt;p id=&quot;Gjlr&quot;&gt;But you should be really diligent with the synthetic storage benchmarks since it is extremely &lt;strong&gt;easy to make absolutely meaningless tests and end up with non-relevant conclusions while they look ok at a first glance.&lt;/strong&gt; At the same time, although synthetic tests may show representative results in terms of the overall performance, it&amp;#x27;s harder to predict some of the nuances for a particular application.&lt;/p&gt;
  &lt;p id=&quot;ehFk&quot;&gt;As a matter of fact, the wrongfully perceived simplicity of the synthetic storage benchmarking and its error-proneness were the main reasons why I decided to write this guide. Further in this guide,&lt;strong&gt; I will focus only on the synthetic storage benchmark&lt;/strong&gt; not because it is the best way to test a storage system’s performance, but because it is the most popular approach, which is the least dependent on a particular environment&amp;#x27;s specifics.&lt;/p&gt;
  &lt;h2 id=&quot;Rqp9&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Select the Tools and Utilities for Synthetic Storage Benchmarking.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;5bIF&quot;&gt;As I mentioned previously, for synthetic benchmarks we need a tool that prepares the data, sends the IO requests to the storage, collects, and analyzes the results. It has to be flexible and customizable enough to maintain relevance to your infrastructure and goals. Also, it should support automation and orchestration scenarios.&lt;/p&gt;
  &lt;p id=&quot;MudH&quot;&gt;&lt;strong&gt;The golden standard in the industry is FIO, Vdbench, and DiskSPD. &lt;/strong&gt;All of them are proven, widely applied, and cross-platform, but historically DiskSPD is more often used in Microsoft environments and FIO or Vdbench in Linux environments. Without going into the details, they provide similar capabilities for storage benchmarking and have similar learning curves, so the selection of the tools is usually based on experience and habits.&lt;/p&gt;
  &lt;p id=&quot;Lb5U&quot;&gt;There are also several PC-focused storage benchmarks like CrystalDiskMark/HDTune/PCMark/etc. PLEASE do not use them for enterprise storage benchmarking. They are not bad by themselves (furthermore, for example, CrystalDiskMark is built on top of DiskSPD), but their goals and use cases are completely different. Lack of control and customization, as well as lack of clusterization support makes them hardly applicable for the enterprise needs. Most enterprise environments produce compound workload profiles from many sources in parallel, not a single OS, dataset is tens and hundreds of TBs, load is generated continuously for hours and days and not for minutes and few GBs as it happens on PCs.&lt;/p&gt;
  &lt;p id=&quot;99tY&quot;&gt;Another type of benchmarking utilities is built on top of FIO/Vdbench and leverage them as the workload generator engine. They provide more features like GUI, out-of-the-box deployment and automation, scheduling, scripting, etc, while still keeping FIO/vdbench as a workload generator.&lt;/p&gt;
  &lt;p id=&quot;f8av&quot;&gt;&lt;a href=&quot;https://flings.vmware.com/hcibench&quot; target=&quot;_blank&quot;&gt;HCIBench&lt;/a&gt; is one of such tools, extremely popular for storage systems benchmarking in VMware vSphere environments. Initially it was created for HCI platforms benchmarking, but now can be used universally with any type of storage. In a nutshell, it&amp;#x27;s a ready-to-deploy virtual appliance with a control VM and a fleet of VMs with workload engines. Control VM provides the UI for configuration, and results review, contains the image of micro-VM with preinstalled FIO/Vdbench, and scripts for the deployment automation, start-up, collection of data, etc. More content on how to customize it can be found in &lt;a href=&quot;https://blogs.vmware.com/virtualblocks/2016/11/03/use-hcibench-like-pro-part-2/&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; VMware’s blog post and examples of test profiles at Github &lt;a href=&quot;https://github.com/cleeistaken/Test-Profiles&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; page. If you are looking for more HCIBench automation itself, please have a look into this article &lt;a href=&quot;https://blog.ovhcloud.com/industrialising-storage-benchmarks-with-hosted-private-cloud-from-ovhcloud/&quot; target=&quot;_blank&quot;&gt;Industrialising storage benchmarks with Hosted Private Cloud from OVHcloud — OVHcloud Blog&lt;/a&gt; from OVH Cloud.&lt;/p&gt;
  &lt;figure id=&quot;yf5M&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/95/86/958626ce-3781-4a55-a0a9-872fe71a04ee.png&quot; width=&quot;886&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;High Level HCIBench Architecture&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;uI7w&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;oE6y&quot;&gt;Technically, you can achieve the same or even better level of automation via custom scripts, but it rarely makes sense due to a significant time investment. &lt;strong&gt;So, if the primary use case for your storage system is hosting the datastores of VMware virtual infrastructure, it is tenable to use HCIBench as the default benchmarking tool and switch to a custom FIO/Vdbench setup if there is a reason for it.&lt;/strong&gt; The excellent value of HCIBench is that it uses common workload generators (you can choose FIO or Vdbench) and provides full control over benchmark parameters, nothing is hidden from you or assumed on your behalf. It is critical to have a full control over the tool — nothing should be decided for you, configured by default, or hidden behind the scenes.&lt;/p&gt;
  &lt;h2 id=&quot;MRhS&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Establish Demo Environment Configuration.&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;do5a&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;pQMq&quot;&gt;Ideally you would test the same storage system configuration as you plan to buy. However, this rarely happens in real life due to the demo systems pool limitations on the vendor/SI side. Sometimes you can use a“try-and-buy” program, but usually vendors offer this option only for the final validation. Under such a program&amp;#x27;s conditions, the customer commits to buy-out the system if the pre-defined qualification criteria are met. Otherwise, the system is returned back to the vendor / SI. This can be a feasible validation option, but not so much from the vendor comparison perspective. &lt;/p&gt;
  &lt;p id=&quot;2gbH&quot;&gt;Most often, the system you get for tests will be scaled down from your target configuration. In this case, you should test the storage of the same class, generation, and model. Components should be of the same performance class and type — if you plan to buy storage with SATA/SAS drives and FC/SCSI interfaces there is no sense in testing All NVMe storage with NVMe-o-F over RoCEv2 connectivity even if the storage controller matches. Also, the same should be the storage software versions and configuration/mode of storage software (for example, NetApp ASA/AFF options, Unified/Block Optimized software modes for Dell EMC Powerstore T, etc).&lt;/p&gt;
  &lt;p id=&quot;HDDp&quot;&gt;On the other hand, it can be ok if the system has less capacity or drives or nodes in case you understand the scaling process. But be careful because it is not so obvious in a lot of cases. For instance, a lot of All Flash arrays reach a performance plateau with 10-30 SSD drives because the controller becomes a bottleneck. This leads to a situation where the total performance for the storage system with 24 SSDs and 100+ will be the same. Another example is that increasing the number of controllers (SAN/NAS) or nodes (SDS, HCI) does not always lead to performance gains for a single LUN/Share/vmdk, despite an overall performance increase.&lt;/p&gt;
  &lt;p id=&quot;FHBv&quot;&gt;So, it is great to discuss all this in detail with a vendor, ask for proof/test/benchmarks, and after that try to carry out your own test (even at a minimal scale) to prove the concept.&lt;/p&gt;
  &lt;p id=&quot;rGiq&quot;&gt;&lt;strong&gt;After preparing and defining the goals/success criteria, you should specify the system configuration suitable for the benchmark and request it for the POC.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;fZhB&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;Software&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;rEEA&quot;&gt;This part can be complicated in practice, but easy in theory:&lt;/p&gt;
  &lt;ul id=&quot;9OxQ&quot;&gt;
    &lt;li id=&quot;Nv5Z&quot;&gt;Check the software versions and install the latest (supported by the hardware and software components) updates on every component of the test environment.&lt;/li&gt;
    &lt;li id=&quot;6yER&quot;&gt;Accurately check compatibility lists top down.&lt;/li&gt;
    &lt;li id=&quot;PeeD&quot;&gt;Setup and tune the test environment according to the applicable Best Practices Guides.&lt;/li&gt;
    &lt;li id=&quot;yklc&quot;&gt;Have the setup reviewed with the vendor / SI and obtain their written confirmation that the setup is correct (adheres to the best practices).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;LXlW&quot;&gt;&lt;strong&gt;While setting up the environment, document all the settings and options configured. &lt;/strong&gt;You are likely to feel that it is easy to remember just a few checkboxes, but I assure you that after several months you will not remember anything. Good practice is to perform any setup and operations with the enabled screen recording (I usually use Zoom cloud-recording sessions even if I&amp;#x27;m the only one doing the setup). This way you will be able to check out any details and/or prove the point at any time.&lt;/p&gt;
  &lt;h2 id=&quot;c3YB&quot; data-align=&quot;center&quot;&gt;Conclusion.&lt;/h2&gt;
  &lt;p id=&quot;mFiz&quot;&gt;Performance testing is not a simple, but certainly an extremely important procedure, since it provides a basis for long-term decisions that can have an immediate impact on production processes and business goals attainment. &lt;/p&gt;
  &lt;p id=&quot;cdDN&quot;&gt;Careful preparation and planning are critical success factors for successful load tests. And that equally applies to the goal definition, collection of data and the detailed description of the test program. If the preparation is done to the end, then the test itself becomes simple, understandable, and even, in a sense, a routine action. &lt;/p&gt;
  &lt;p id=&quot;c3Y0&quot;&gt;In the &lt;a href=&quot;https://nkulikov.com/StorageBenchmarkPart2&quot; target=&quot;_blank&quot;&gt;second&lt;/a&gt; part, I will show you exactly what data is needed for successful synthetic benchmarking, the ways how to get it and how to formulate success criteria.&lt;/p&gt;

</content></entry></feed>