4. VMware Tools

The following table explains the meaning of the value of Tools status property

Guest Tools Not InstalledTools are not installed on the VM. You should install it as you get both drivers and visibility
CurrentTools version matches with the Tools available with ESXi. Each ESXi has a version of Tools that comes with it. See this for the list. This is the ideal scenario
Supported NewNewer than the ESXi VMware tools version, but it is supported
Supported OldThe opposite of New. It is also supported. Even it is older by 0.0.1 is considered old. It does not have to far behind
Too OldTools version is older than the minimum supported version of Tools across all ESXi versions. Minimum supported version is the oldest version of Tools we support. Basically, guest is running unsupported Tools. You should upgrade. As of now for Linux and Windows guests. minimum supported version is the Tools version bundled with ESXi 4.0 which is 8.0.1. Supporting such old versions is challenging. We are planning to change this in future to something newer. In the meantime, you should upgrade as might not work as expected
UnmanagedTools installed in the guest did not come from ESXi, so Tools is not being managed by ESXi host. It may be supported or maybe not, depends on what type of Tools is running in the guest. We support open-vm-tools packaged by Linux vendors and OSPs, which both show up as unmanaged.
If a customer builds their own open-vm-tools from source code, we may not support that because we will not know if they have done it correctly or not

I covered the various counters used by Tools in their respective section. The following table provides a summary with their key and formula. Not all counters are exposed by Tools and vRealize Operations.

If you notice a rare intermittent collection, check vmware.log of the VM. It could be that vmtoolsd daemon in Guest OS paused for a while, due to guest workload or other issue in Windows or Linux.

Linux Memory Metrics

Stat NameSourceUnit
guest.contextSwapRate"ctxt" from /proc/statNumber/sec
guest.mem.activeFileCache"Active(file)" from /proc/meminfoKB
guest.mem.free"MemFree" from /proc/meminfoKB
guest.mem.physUsableSum of /proc/zoneinfo#present across all zones. Equals to VM configured RAM.KB
guest.mem.needed"guest.mem.physUsable" - max(0, "MemAvailable" from /proc/meminfo - 5% of "guest.mem.physUsable")KB

"pgpgin" from /proc/vmstat

The rate of reads going through the underlying paging/cache system. It includes not just swapfile I/O, but cacheable reads as well.

I think Tools take the last value, and not the average over the last collection period. Meaning if Tools collect every 60 seconds, it takes 1 value at 60th second, not the average of 60 values in the entire 60 seconds.


"pgpgout" from /proc/vmstat

The rate of writes going through the underlying paging/cache system. It includes not just swapfile I/O, but cacheable writes as well.


"SwapFree" from /proc/meminfo

The amount of swap space remaining, taking into account the possibility of swapfile growth where possible. If the OS is configured without a swapfile, this will return zero.

guest.hugePage.size"Hugepagesize" from /proc/meminfoKB

"HugePages_Total" from /proc/meminfo

Total large pages allocated

Large page count
guest.mem.neededReservation5% of "guest.mem.physUsable"KB
guest.mem.available"MemAvailable" from /proc/meminfoKB
guest.mem.slabReclaim"SReclaimable" from /proc/meminfoKB
guest.mem.buffers"Buffers" from /proc/meminfoKB
guest.mem.cached"Cached" from /proc/meminfoKB
guest.mem.total"MemTotal" from /proc/meminfoKB

The above mapping and calculation are based on latest Linux document and source code. As older Linux has used different formula, the future may change.

Windows Memory Metrics

Stat NameSource
guest.contextSwapRateWin32_PerfFormattedData_PerfOS_System = @#ContextSwitchesPersec from WMI
guest.mem.activeFileCacheWin32_PerfRawData_PerfOS_Memory = @#SystemCacheResidentBytes from WMI
guest.mem.freeWin32_PerfRawData_PerfOS_Memory = @#FreeAndZeroPageListBytes from WMI
guest.mem.physUsableWin32_OperatingSystem = #TotalVisibleMemorySize from WMI

guest.mem.physUsable - max(0, UNNEEDED_BYTES - 5% of guest.mem.physUsable),

where UNNEEDED_BYTES = "Win32_PerfRawData_PerfOS_Memory =@#FreeAndZeroPageListBytes" + "Win32_PerfRawData_PerfOS_Memory =@#StandbyCacheReserveBytes"

guest.page.inRateWin32_PerfFormattedData_PerfOS_Memory = @#PagesInputPersec from WMI
guest.page.outRateWin32_PerfFormattedData_PerfOS_Memory = @#PagesOutputPersec from WMI
guest.swap.spaceRemaining(maximum possible - used) swap space
guest.page.sizeSYSTEM_INFO.dwPageSize returned by GetSystemInfo()
guest.mem.neededReservation5% of "guest.mem.physUsable"
guest.mem.availableToMmWin32_PerfRawData_PerfOS_Memory = @#AvailableBytes from WMI
guest.mem.standby.normalWin32_PerfRawData_PerfOS_Memory = @#StandbyCacheNormalPriorityBytes from WMI
guest.mem.standby.reserveWin32_PerfRawData_PerfOS_Memory = @#StandbyCacheReserveBytes from WMI
guest.mem.standby.coreWin32_PerfRawData_PerfOS_Memory = @#StandbyCacheCoreBytes from WMI
guest.mem.modifiedPagesWin32_PerfRawData_PerfOS_Memory = @#ModifiedPageListBytes from WMI

Linux CPU and Disk Metrics

guest.cpu.runQueue“procs_running” from /proc/statNumber
guest.disk.requestQueueSum of pending IOs from /proc/diskstats across all active block devicesNumber
guest.disk.requestQueueAvgSum of weighted time deltas across all active block devicesNumber

Windows CPU and Disk Metrics

Stat NameSource
guest.processor.queueWin32_PerfFormattedData_PerfOS_System = @#ProcessorQueueLength from WMI
guest.disk.queueWin32_PerfFormattedData_PerfDisk_PhysicalDisk.Name = \"_Total\"#CurrentDiskQueueLength" from WMI
guest.disk.queueAvgWin32_PerfFormattedData_PerfDisk_PhysicalDisk.Name = \"_Total\"#AvgDiskQueueLength" from WMI

This page was last updated on June 30, 2021 by Stellios Williams with commit message: "Cleaned MD syntax"

VMware and the VMware taglines, logos and product names are trademarks or registered trademarks of VMware in the U.S. and other countries.