pg_prewarm pg_prewarm is a postgres extension that reads an entire table – hopefully caching it for you, ready for a benchmark run. When I used this on a large-ish pgbench SF-1000 DB I still saw some disk reads, maybe they were reads of an index? I am not sure. Anyhow the install/usage is simple. The […]
This unhelpful error is returned when using the Postman API collection. The problem is that for example when using a simple “List VMs” call – the URL which is sent contains placeholder values that cause the PC endpoint to return a 500 and the PLAT-10006 response. Check the postman console to see what it is […]
A while ago at work we were discussing the pros and cons of the classic Linux profiler gprof… What are profiles useful for? The output of a profile run against a very simple program looks like the example below. It tells us that of the 5.82 seconds of profiled runtime It also tells us that […]
Recently I wanted to measure the impact of NUMA placement and Hugepages on the performance of postgres running in a VM on a Nutanix node. To do this I needed to drive postgres to do real transactions but have very little jitter/noise from the filesystem and storage. After reading a lot of blogs I came […]
Previously we looked at how the POSIX_FADVISE_DONTNEED hint influences the Linux page cache when doing IO via a filesystem. Here we take a look at two more filesystem hints POSIX_FADV_RANDOM and POSIX_FADV_SEQUENTIAL
Sometimes we want to read from the Linux cache rather than the underlying device using fio. There are couple of gotchas that might trip you up. Thankfully fio provides the required work-arounds. TL;DR To get this to work as expected (reads are serviced from buffer cache) – the best way is to use the option […]
Not sure where I came across this, but it is an excellent description of QEMU (and virtualization in general). I am very much a fan of this style of technical communication as exemplified in this final summary paragraph (the full article is longer): In summary, even though QEMU was first written as a way of […]
Using a small python script we can liberate data from the “Analysis” page of prism element and send it to prometheus, where we can combine cluster metrics with other data and view them all on some nice Grafana dashboards.
Overview For a fun afternoon project, how about a retro prometheus exporter using Apache/nginx, cgi-bin and bash!? About prometheus format A Prometheus exporter simply has to return a page with metric names and metric values in a particular format like below. When you configure prometheus via prometheus.yml you’re telling prometheus to visit a particular IP:Port […]
How to use some of Linux’s standard tools and how different types of memory usage shows up. Examples of using malloc and writing to memory with three use-cases for a simple process In each case we run the example with a 64MB allocation so that we can see the usage from standard linux tools. We […]
Running iperf with parallel threads TL;DR – When running iperf with parallel threads/workers the -P option must be specified after the -c <target-IP> option. This is mentioned in the manpage but some options (-t for instance) work in any order, while others (specifically the -P for parallel threads) definitely does not, which is a bit […]
Not sure how long this has been a thing, but I recently discovered that mpstat takes a -N option for “NUMA Node” that works in the same way as -P for “Processor”. e.g. $ mpstat -N 0,1 1 will show stats for NUMA nodes 0 and 1 every 1 second. Just like mpstat -P ALL […]
Some technical notes on our submission to the benchmark committee. Background For the past few months engineers from Nutanix have been participating in the MLPerftm Storage benchmark which is designed to measure the storage performance required for ML training workloads. We are pleased with how well our general-purpose file-server has delivered against the demands […]
Using Nutanix API with prometheus push-gateway. Many customers would like to view their cluster metrics alongside existing performance data using Prometheus/Grafana Currently Nutanix does not provide a native exporter for Prometheus to use as a datasource. However we can use the prometheus push-gateway and a simple script which pulls from the native APIs to get […]
VM CPU Topology The topology (layout) that AHV presents virtual Sockets/CPU to the guest operating system will usually be different than the physical topology. This is expected because we typically present a subset of all cores to the guest VMs. Usually it is the total number of vCPU given to the VM that matters, not […]
TL;DR If your storage system implements inline compression, performance results with small IO size random writes with time_based and runtime may be inflated with fio versions < 3.3 due to fio generating unexpectedly compressible data when using fio’s default data pattern. Although unintuitive, performance can often be increased by enabling compression especially if the bottleneck […]
fio on Windows Download pre-compiled fio binary for Windows Example fio windows file, single drive This will create a 1GB file called fiofile on the F:\ Drive in Windows then read the file. Notice that the specification is “Driveletter” “Backslash” “Colon” “Filename” In fio terms we are “escaping” the : which fio traditionally uses as […]
The on disk size for small DB sizes. Taken from SQLserver properties immediately after creating the TPC-C like schema in HammerDB and then using server and then using Tasks->Shrink->Database. Warehouse Count Database size 10 826 MB 100 8,057 MB