A few days ago I posted a blog about VMware Storage Basics, the identifiers and how paths work between them.
This post will be post two of three in explaining the VMware storage stack, ending in a post about masking paths.
So, PSA and NMP, what is that? First a short and extremely dry explanation.
PSA (Pluggable Storage Architechture)
- is special VMKernel layer that manages storage multipathing.
- Coordinates simultaneous operation of multiple MPPs (Multipathing plugins) and the default NMP (Native Multipath Plugin).
- Allows 3rd party vendors to design their own MPP, with their own load balancing techniques and failover mechanisms.
NMP (Native Multipath Plugin)
- The default MPP that comes with ESX,ESXI is the NMP. It manages some subplugins.
- The subplugins are SATPs (Storage Array Type Plugin) and the PSPs (Path Selection Plugin).
- Subplugins are either VMware default or 3rd party plugins (specific SATPs for specific arrays, e.g. VMW_SATP_SVC for IBM SVC Arrays).
- It associates SATP to paths, processes I/O requests to logical devices, performs failovers using SATP.
MPP (Multipath Plugin)
- 3rd party NMP+SATP+PSP. All in one stack.
Does that explain anything? No. Well OK, some. For my part its when I see a picture and preferrably a moving representation is when things start to seep into the grey matter.
First an overview picture – On the left you got the NMP, with its destinct subplugins, SATP and PSP. Then in the middle there is a 3rd party MPP, and last but not least is the MASK_PATH plugin.
So what do the subplugins do?
- Manages failover of paths. Monitors, determines and implements switching between paths in case of a failure.
- Provided for every type of array that VMware supports, e.g. VMW_SATP_LSI for LIST/NetApp arrays from Dell, IBM, Oracle and SGI to name a few.
- Determines which path will be used for an I/O request. Thats the Fixed, Round-Robin, Most-recently-used algorithms. More on that later.
So now we got these acronyms : PSA, NMP, MPP, SATP, PSP, MRU, RR. How do they work together? Lets begin when you boot up a ESXi host.
- NMP assigns a SATP to every physical path to the logical device (datastore), e.g. VMW_SATP_LSI if its a IBM DS3524.
- NMP associates paths to logical devices – see my previous post on paths.
- NMP decides which PSP to use with the logical device.
- Storage framework (VM) tells NMP an I/O is ready to send.
- I/O is issued.
- PSP is selected. Load-balances if applicable.
- I/O is sent to device.
- Success:Device driver (Storage array) indicates I/O is complete. Failure: NMP calls appropriate SATP.
- Success: NMP tells PSP I/O is complete. Failure: SATP interprets error codes and fails over to inactive paths.
- Failure: PSP is called again to select which path to use for I/O – excluding the failed path.
That pretty simple right? Well not exactly because there is no way to visualize that process unless you had read about the PSA before.
So here is a short video to help you out. I hope this makes the topic easier to understand.