I'd prefer to avoid modifying everything. Modifying every tool to add
this instrumentation is a classic OpenVMS approach, but the approach
doesn't scale well. We're almost inevitably facing some tool that
wasn't modified, and adding the hooks into the apps we're supporting.
Yes, having the qualifier into the utility qualifiers set and adding
it into specific apps will cover specific cases, and it avoids
expending even more effort dealing with the tools that do get modified.
But it's still not the best way to systematically gather and collect
performance data.
Yes, if you have a large or complex app that you're maintaining, you
should most definitely instrument it. What I'm referencing here is
adding generic monitoring mechanisms to the operating system itself and
that reduce the need to more heavily instrument every app and every
tool on the system environment.
The available OpenVMS performance tools and APIs are ad-hoc. The
POLYCENTER software was divested, and some of the capabilities those
POLYCENTER tools provided were subsequently reimplemented in OpenVMS or
add-on tools. (AFAIK, PCSI was the sole exception to that divestment,
too.) OpenVMS development tools are simply not competitive; neither
the debugger and SDA extensions, nor DECset PCA and LSEDIT, nor the SDA
extensions, nor the third-party tools. The OpenVMS options for
implementing instrumentation involves reading and writing kernel mode
directly or via SDA, or what can be gotten from $getjpi and $getrmi
calls, the accounting and auditing data, trolling MONITOR data, etc.
There's not a lot of support for acquiring data from various OpenVMS
system components, either; from XQP, XFC, et al. Ad-hoc means, writ
large.
As for what's available on other platforms, OpenVMS instrumentation is
a whole lot less than what's available on Linux and BSD.
http://www.brendangregg.com/linuxperf.html
https://forums.freebsd.org/threads/48802/
Or just start rummaging here:
http://www.brendangregg.com
Yes, some of these Linux and BSD tools are cryptic, arcane, fussy and
can otherwise be problematic. Developers need to learn from and avoid
the problems and the limitations of existing tools, too.
Using Xcode and Instruments on macOS is so far past what OpenVMS
offers, there's just no comparison with the OpenVMS tools. And that's
before launching dtrace for a look around.
>> Spending time figuring out how to back up less data is usually the
>> biggest win. Or going from SSD to HDD or from HDD to bigger-slower
>> HDD for instance, and from that intermediate tier out to tape or other
>> longer-term storage. (Tapes can be fast as compared with HDDs, but
>> quiescing apps and splitting off RAID volumes or using a ZFS-style
>> snapshot approach is massively faster.)
>>
>
> I have unverified assumptions that RDB backups are multi-threaded, but
> rdb has the luxury of being able to work on multiple storage areas at
> the same time, very different to RMS I guess, that has to troll
> sequentially over a volume?
IIRC/AFAIK, the Rdb backup and restoration tools were a fork of the
OpenVMS BACKUP source code, but have most certainly diverged. The
RMU/BACKUP processes I've looked at — which are not exactly current
versions — were also single-threaded when last examined.
While an entirely different implementation to how Rdb can distribute
the constituent files of a database across multiple sector-addressable
storage devices, OpenVMS can be configured to distribute I/O over
multiple volumes via RAID, and that was and remains a very common
approach with HDD storage. That's because rotating rust HDDs are
really slow. That's how we got massive racks of HDDs and RAID-1 and
RAID-10 and RAID-6 et al. With SSD storage, the folks I'm working
with have tended to abandon that approach and now largely use RAID for
its perceived benefits to reliability; using RAID for performance is
less common. (I'm here ignoring distributed clusters, where HBVS and
local SSD storage certainly can have a performance benefit and
particularly for keeping the locality of the read activity. But from
your previous comments, you're seemingly not operating in that
environment.)
> While multi-threading the data stream for backup might be too much of a
> development sinkhole, I would think spinning off the compression
> shouldn't be too hard? (says me who has not written multi-threaded
> stuff for a very long time).
When I'm deciding whether to retrofit threading in an existing app, I
prefer to run some performance tests to try to see where the app is
spending its time, and what is throttling performance; at what outcome
any particular optimization effort will reasonably have. While there
can be reasons to rework source code for reasons of stability and
maintainability, optimizing any not-actually-the-bottleneck-code to be
faster is usually less-than-helpful from a performance perspective.
q.v. Amdahl's Law. I've occasionally found that DECset PCA can point
me at a completely different and surprising routine in the code that's
the performance bottleneck, too.
I simply don't know that making compression or encryption multithreaded
will make BACKUP any faster. It might. Or it might all be a lot of
effort that still runs up against the speed limits on the input and
output I/O paths. But best case, adding multithreading just gets us
that much closer to that same performance wall.
Always compress before you encrypt. Always. But I digress.
> I think the compression uses zlib doesn't it?
> I wonder how much of a performance kick multi-threading zlib
> compression would give to the overall backup run time? Might not be
> worth the development effort to save probably around 40 mins on a
> volume? But what about bigger volumes that are coming???
Threading adds complexity to the code, and — without some performance
modeling — I'm not convinced that changes to speed encryption or
compression would be a benefit in this particular case. BACKUP tends
to be I/O limited, and gets close to 90% of the hardware bandwidth,
which means that either the data has to be reduced (compression, being
much smarter about what gets backed up, defragmenting, etc), or the I/O
path hardware gets an upgrade. Tapes are usually faster than HDDs.
SSDs make the I/O path a whole lot less of an issue for main storage,
and tapes are glacial in comparison to SSD. If you optimize the
performance of some code that's not the bottleneck, your optimized code
is inevitably going to stall waiting for the bottleneck to clear.
Then there's that the existing design of how folks back up their data
on OpenVMS is often firmly rooted in antiquity, which doesn't help
things. For those that haven't already, take a look at how ZFS is
designed; at how it "violates" the layering that can be common in many
app and system designs.
Then there's that a number of OpenVMS installations are still using HDD
storage. That works for many of those same sites, certainly. But
swapping in SSD storage is often a whole lot cheaper than tuning a slow
app.
Migrating to designs that can stripe out data across multiple target
devices works, and so can splitting off volumes in HBVS. None of
which addresses that we are all often backing up a whole lot of the
same data with each pass, which is just wasteful. File system de-dup
targets this issue from the storage controllers, and database backups
and various of which archive snapshots of the database and then
continuously archive the change logs are another way to reduce the
volume of data being backed up.
Splitting HBVS volumes has the added advantage of a short window to
quiesce the applications, and a consistent view of the entire storage,
rather than the approach BACKUP uses; of what's on the storage device
under a particular name when the BACKUP directory traversal captures
the data and which involves either skewed data or a much longer window
to keep the apps quiesced.
For existing users, this stuff is less of an issue. We're here, we're
familiar with and using what's available. And various of us OpenVMS
folks can be unfamiliar with what is currently available on other
platforms; many of us are specialized. For new users and for wholly
new apps seeking to select a deployment platform to target, or where
there's another platform that's been selected as the common target,
these sorts of omissions can be seen to increase the cost of deploying
on or even maintaining OpenVMS.