 |
» |
|
|
 |
 |
|
 |
 |
 |
Robert Gezelter, CDP, CSA, CSE, Software Consultant
|
 |
 |
 |
 |
|
 |
 |
The ideal method for migration to OpenVMS on the Intel®
Itanium® architecture is to recompile, relink, and requalify. For many users,
this strategy has been highly successful. Many applications, each comprised of
hundreds of thousands of lines of source code, have been ported virtually
overnight.
Other organizations face more challenging circumstances.
Restricted budgets, operational commitments, dependencies on layered products,
staff shortages, the sheer number of applications, and the size of the
aggregate source bases make the "all at once" strategy infeasible.
OpenVMS provides unique capabilities that allow an
organization to assimilate HP Integrity servers in a phased, structured,
extremely low-risk approach. This strategy decouples the different phases to
the maximum extent possible, permitting the assimilation process to proceed
transparently to users, with minimal disruption to operations and minimal
business risk.
OpenVMS has clustering and image translation capabilities
that offer end-user management and technical staff a unique degree of
flexibility. In the past, this flexibility has enabled OpenVMS to confound
critics by enabling the assimilation of Alpha processors and, more recently,
Intel Itanium processors. The same capabilities that enabled the rapid
assimilation of radically different hardware architectures by the OpenVMS
Engineering organization itself are fully available to independent software
vendors and end user
|
 |
 |
|
 |
 |
Corporate Information Technology (IT) is a complex
choreography of many interacting assets, including people, hardware, packaged
software, and locally developed or maintained software. In today's environment,
where IT has become the backbone of the enterprise, corporate IT is, in effect,
committed to providing access to a wide variety of systems on a continuous
basis, 24 hours a day, 7 days a week, 365 days a year, without interruption.
Changing hardware platforms is one of the most anxiety-provoking
transitions in IT. The mere mention of a change of hardware platform brings
forth images of long, uncertain migration plans and large numbers of
modifications. The resources required for such projects are substantial, and
the resulting budgets are commensurate.
While these reasons for concern are reasonable in a general
sense, they do not apply to OpenVMS. This article examines the issues involved
in the migration of applications on OpenVMS from computing systems based on the
reduced instruction set (RISC) Alpha architecture to HP Integrity servers based
on the Intel Itanium architecture. OpenVMS provides a set of unique facilities
to make the transition from the Alpha architecture to the Itanium architecture
a controlled and predictable evolution, with low technical risks. As a result,
the transition can be managed with a minimum of business risk. OpenVMS on VAX,
Alpha, and HP Integrity systems offers several facilities that allow the
management of platform change on an incremental basis. When used properly,
these facilities reduce transitions to a technical exercise with controlled
steps. They eliminate the largest risk in IT management: the cutover. Instead
of choreographing a cutover that affects all users simultaneously, the problem
is reduced to transitioning users from the old to the new in gradual
incremental groups, commensurate with the available support.
|
 |
 |
|
 |
 |
First, it is necessary to fully appreciate the process of platform
transition in an end-user environment. Transitions in end-user environments are
fundamentally different from transitions in product development environments,
such as an independent software vendor (ISV) or original equipment manufacturer
(OEM). In an ISV or OEM environment, the workload is skewed toward technical
and product issues. Quality control and testing are important, but they are
qualitatively different from their counterparts in an end-user organization. By
contrast, an end-user organization has more pressing commitments to operations,
as well as a lower ratio of engineering resources to programs.
Software development organizations often have extensive
source control and rebuild processes, as well they must. Rebuilding products en
masse is simply a fact of life. By contrast, end-user organizations are, even
in these days of Sarbanes-Oxley,[2]
far less likely to have the controls and processes in place to rebuild all used
programs from their respective source components. This fact was encountered
repeatedly during the remediation of Year 2000-related problems.
In reality, all computing facilities combine aspects of
development and production (Figure 1). From a high-level perspective, all
facilities can be categorized as an amalgam of the two extreme cases. In
reality, it is not unusual to find that the exact categorization of an
application, or a component of an application, depends on the role played by
the particular component. For example, a compiler is a production component in
an organization that is devoted to development, and is just as critical as a
production application in an installation that does not undertake software
development.

Figure 1 - All computing facilities are some combination of development and production.
As noted, platform replacement is as much a management
exercise as a technical exercise.
In end-user environments, tasks are weighted toward
management and qualification issues. In companies with hundreds or thousands of
users, even a minor problem during a cutover can be catastrophic. In concept,
the issue is simple: user support is a finite resource. Ideally, one should not
cut over more users than can be supported in the event of a problem. The
challenge is how to realize this management imperative within the realm of
technical feasibility.
The strategic approach advocated by this article is, in
turn, useful to OEMs and ISVs, in the context of shortened time and cost to
market of products for use on HP Integrity servers running OpenVMS. The same
concepts that apply to end users permit ISVs and OEMs to achieve delivery
schedules with a low cost, low risk, and high certainty.
Management is rightly concerned with equipment costs and
availability, additional problems that are often associated with the
acquisition of a new hardware platform and the retirement of older hardware.
Once schedule commitments are made, changes are often difficult and expensive.
Older equipment might be nearing end of lease, and lease extensions can be
expensive. A small slip in migration schedule can be disproportionately
expensive. There is often a financial flashpoint between technical and cost
considerations, with the technical team eager to defer migration to reduce
technical risk, and the management team eager to retire older equipment to
reduce financial exposure.
The general concept that operations must be sustained during
a transition is far older than general-purpose computing. [3]
Business crossed the line into continuous availability more than a century ago,
with the advent of the telephone. In 1930, the 12,000-ton Indiana Bell
Telephone Building in Indianapolis, Indiana, was relocated to make room for new
construction while the full complement of 600 employees continued normal
operations, including the central telephone switchboard. The Eichleay Company
performed this move in two stages, an initial move of 52 feet, and then a
rotation of 90˚.[4]
Today,
telephone switching centers are clearly computer applications. The move of the
Indiana Bell Telephone Building was undertaken precisely because an
interruption of telephone service while changing buildings was unacceptable.
IT-dependent enterprises might differ in the details, but the concept remains
unchanged.
|
|
Figure 2 - Each application on an OpenVMS system can
be migrated to HP Integrity servers as needed. An initial version might be
composed of translated binary Alpha executable images, with the individual
component images replaced by native Itanium-based executable images as the
native images become available for production use. This can be done on a
user-by-user basis or a component-by-component basis. Decoupling of the
recompilation and requalification effort from the hardware changeover gives
management flexibility in hardware deployments and retirements, without
impacting production or functionality. Each software component follows its
own transition path from native Alpha image to (optionally) a translated
Itanium-based image and, finally, to a native Itanium-based image.
|
|
 |
 |
|
 |
 |
Software qualification is a major hurdle in many
enterprises. End-user organizations must qualify software for several reasons,
some of which are internal business processes, and some of which are required
by external regulations. As compared with ISVs, software rebuilding and
requalification are substantially more difficult problems in the end-user
environment.
In an ISV or OEM environment, two factors make rebuilding
and requalification a simpler problem. First, an ISV or OEM is ultimately in
the business of building software. Simply put, this means that the build and
qualification process is an integral part of their mainstream business. In
contrast, the end-user environment is typically not focused on rebuilding and
requalifying software. Another difference is that end-user environments tend to
have a much larger number of programs. Although the ISV or OEM can control the
scope of the migration, the end-user is faced with the reality of moving
hundreds or thousands of applications from one platform to another - truly a
daunting task.
Project management and scheduling are also major concerns in
an end-user environment. While the ISV or OEM is typically in an engineering
environment without day-to-day operational requirements, the end-user must
organize rehosting and simultaneously provide uninterrupted support of
operational commitments.
OpenVMS provides technologies that allow IT managers to
manage change in incremental steps. One example is OpenVMS clusters. When used
properly, OpenVMS clusters, particularly mixed-architecture OpenVMS clusters,
provide precisely this functionality (Figure 3).

Figure 3 - OpenVMS cluster with VAX, Alpha, and HP Integrity servers (from The HP OpenVMS Approach to High Availability Computing, July 2004)
|
 |
 |
|
 |
 |
For much of the last 50 years, migration from one platform
to another has been considered a high-risk activity. We sometimes forget that,
in the past, changing hardware platforms inevitably involved changing both the
hardware platform and the operating system, often involving major changes in
both applications programs and the scaffolding of command procedures that
surrounded them. Such migrations also involve a "point of no return," after
which reverting to the predecessor system is not easily accomplished. Indeed,
these migrations, which require significant changes to all aspects of the
computing environment, are high risk.
Carefully employed, the OpenVMS environment almost
completely eliminates such business risks. Unlike many other hardware
transitions, the transition of an OpenVMS Alpha system to an Integrity system
is purely a question of changing hardware platform. With rare exception,[6]
differences occur only in application programming interfaces (APIs), which are
not used by most programmers.
It is important to note that OpenVMS was the first operating
system for which a processor architecture was designed, rather than the
converse of an operating system designed for a particular processor
architecture. This fundamental strength has allowed OpenVMS to assimilate two
additional processor architectures, each one radically different from the
other.[7]
|
 |
 |
|
 |
 |
The first member of the VAX family, the VAX-11/780, debuted
in 1977. The architecture was a byte- oriented, CISC computer with 32-bit
arithmetic, 16 registers, integral floating point, virtual memory, and other
features. [8]
The VAX-11/780 was the first of a series of systems dubbed
"superminicomputers," which provided many features previously available only in
high-end mainframes in a price range more familiar to minicomputer users.
Unlike many past computer architectures, the VAX
architecture was designed by a combined group of hardware and software
engineers. It featured integral support for many software requirements, ranging
from instructions for complex array indexing (used by compilers) to
instructions for enhancing operating system constructs, such as asynchronous
system traps (ASTs).[9]
|
 |
 |
|
 |
 |
HP Integrity servers are based on the Itanium architecture,
which was jointly developed by HP and Intel. The Itanium instruction set is
known as Explicitly Parallel Instruction Computing (EPIC).[14]
The Itanium architecture is different from the VAX and Alpha
architectures in a number of ways. The VAX and Alpha designs are characterized
by a separation between software optimizations and hardware optimizations.
While there was coordination at the design and architectural level, there was
no way for compilers on VAX and Alpha systems to signal information for code
optimization to the hardware. VAX and Alpha were both designed so that coding
in the actual machine code was viable.
This is not the case with the Itanium architecture, which
presumes that Itanium machine code is compiler generated. The Itanium
architecture removes hardware-imposed conflict resolution for registers.
Instead, the compiler code generators are responsible for all such scheduling.
The Itanium architecture also has facilities for predication, which reduces the
need for branches, and cues for speculation, which indicate the probability of
those branches that do exist.
Another difference between the earlier processor
architectures used with OpenVMS and the Itanium architecture is the handling of
registers on subroutine call. The earlier architectures performed at least a
partial register save at each subroutine call. In modern high-level languages
with call-intensive paradigms (such as C/C++), this leads to a high number of
memory references at each call, resulting in a memory bottleneck. The Itanium
architecture implements a register windowing scheme that allows the elimination
of these register context operations.
The concepts behind the Itanium architecture appear to be
dramatically different from the instruction set architectures that have been
the mainstay of computing since the mid-1950s. However, examined in detail, this difference
is far less important than it seems. Architectures that are generally similar
to EPIC have been part of computing for more than two decades, through the
mechanisms used to implement the familiar von Neumann architectures (for
example, IBM System/360, DIGITAL PDP-11, VAX, and Alpha).
|
 |
 |
|
 |
 |
Central to the sequential migration from VAX to Alpha and
from Alpha to HP Integrity is the fact the each pair of architectures fully
supports the same data types. Thus, with appropriate care, it is possible to
perform precisely the same computations on Alpha as on VAX and, in turn, on HP
Integrity as on Alpha. Table 1 shows the compatibility of these formats.
|
Architecture |
| Characteristic |
VAX |
Alpha |
Itanium |
| Character |
ASCII |
ASCII |
ASCII |
| Floating-point format |
VAX |
VAX, IEEE |
IEEE |
| Integer |
32-bit |
32/64-bit |
32/64-bit |
| Number format |
Two's complement |
| Address size |
32 |
64 |
64 |
| Architecture type |
CISC |
RISC |
EPIC |
Table 1 - Data formats native to each processor type[16]
Correctness should not be confused with efficiency. When the
VAX architecture was originally implemented, memory sizes were dramatically
smaller, and packed data structures were considered standard practice. The more
recent Alpha and Integrity platforms have dramatically larger basic memory
sizes and correspondingly larger performance penalties for accessing unaligned
data. Therefore, it is now preferable to use data structures whose elements are
aligned on their natural boundaries.
In the past, differing hardware architectures directly
impacted many issues visible to programmers, even applications programmers
working many levels above the actual hardware. In those days, switching
hardware platforms meant changes in integer representations, character sets,
floating-point formats, and operating system interfaces. Each of these changes
wreaks havoc on an installation's inventory of existing programs.
Today, programmers working at levels above the actual
machine language -- even third-generation languages such as Fortran, PL/I,
COBOL, BASIC, C/C++) -- are little affected by the mechanics of the platform's
instruction set, whether it is CISC, RISC, or EPIC. For that matter,
programmers using Macro-32[17]
on processors other than VAX are, in effect, using a higher-level language
compiler rather than the assembler used on the VAX architecture.
The underlying processor architecture does not become
visible until the programmer uses either the option to display the actual
generated code (for example, the /MACHINE_CODE option in the OpenVMS C/C++ compiler), or
the options in the symbolic debugger to display the actual machine-language
code. Both of these generally are rare events. It is possible to work for
years, or even decades, without exercising either of these options.
By contrast, the data formats, character codes, and
operating system interfaces are directly visible to programmers. On the three
architectures supported by OpenVMS, all the available interfaces are the same
across VAX, Alpha, and Itanium processors.[18]
|
 |
 |
|
 |
 |
Floating-point formats are another potential flashpoint. Alpha supports
both the original VAX format for floating-point numbers and the IEEE standard
representation.[19]
The default on Alpha systems is VAX floating-point format. Figure 4 illustrates
the differences in the layouts and details of the different floating- point
formats.
|
Single Precision (32 bits)
|
|
VAX
|
|
|
IEEE Standard 754 - 1985
|
|
|
Double Precision (64 bit)
|
|
VAX
|
|
|
IEEE Standard 754 - 1985
|
|
Figure 4 - Single- and double-precision floating-point formats for VAX and IEEE Standard 754-1985 (from HP FORTRAN for OpenVMS User's Guide)
Unlike Alpha processors, Itanium processors do not natively support the VAX
floating-point formats. For most programs the differences are minor, and for
most purposes the results will be the same. The difference in floating-point
formats and the resulting small differences in computations is an obstacle in
two situations: binary comparison of outputs between Alpha and HP Integrity
systems, and some scientific computations.
One standard technique is to compare the output from one system with the
output of another system. This technique is often used as a regression test or
when migrating code to a different platform. Presumably, if the program
produces an identical output for a reasonably sized dataset, it is functioning
correctly.[20]
For this reason, it is a good idea to recompile and retest programs using IEEE
floating point on Alpha as a first step. Once the results of the program are
determined to be correct, the same program on an Integrity system should
produce the same results.[21]
|
 |
 |
|
 |
 |
In a conventional, non-OpenVMS environment, there is little
choice but to do a so-called "cold turkey" cutover of applications from one
processor and operating system to another. Such a cutover requires migration of
data en masse from one system to another, often requiring reformatting of data
for the new system. This is an all-or-nothing approach. Once the process
starts, there is often no way to simply reverse the process if something goes
awry.
This approach is heavily laden with risk. In today's
environment, down time is prohibitively costly to the organization. A study by
TechWise[22]
showed that even modest down time frequently costs in excess of $10,000 USD/hour.
Major system conversions that have gone awry have even impacted publicly
reported profits.
The facilities of OpenVMS provide a uniquely malleable
environment for changing hardware platforms. Specifically, many strategic and
tactical choices are available that allow decoupling of the hardware cutover
from the actual applications migration.
An OpenVMS migration from one processor architecture to
another is a far lower-risk scenario. Disk data formats are consistent across
OpenVMS systems running on different architectures. In fact, OpenVMS clusters
provide the mechanisms to decouple data migration from application migration,
whether or not an installation uses a Storage Area Network (SAN). Properly
managed, it is quite possible to grow OpenVMS storage environments
significantly and to change their physical realization without ever
interrupting user access to information.[23]
|
 |
 |
|
 |
 |
OpenVMS, with its support for mixed-architecture OpenVMS
clusters and its provisions for binary translation,[24]
provides a way to assimilate Itanium-based servers into a production
environment without requiring a "cold turkey" transition.
The combination of image translation and mixed-architecture
OpenVMS clusters allows computing capacity and hardware inventory to be
transitioned in the same orderly fashion as the software inventory. Computing
capacity can be transitioned from one architecture to another as dictated by
the changing needs of the applications mix (Figure 5). This allows cost-effective
management of the hardware inventory separate from the tempo of the migration
effort. Such a strategy allows users to be migrated to the new architecture in
a seamless manner, thereby optimizing financial, technical, and support
expenses and risks.
Figure
5 -Mixed-architecture OpenVMS clusters capacity transition from Alpha to HP
Integrity servers over time.
Conventional changes in processor architecture give rise to
another problem: interdependencies between applications and underlying software
components. Modern software applications are not freestanding entities. Each
one depends on an extensive collection of supporting software, each of which
might depend on other software components. These interdependent components are
often maintained by different groups, each with their own priorities,
responsibilities, and commitments. Adding to the complexity, some components
might be developed and maintained in house, while others might be licensed
products.
These interdependencies, which can be devilishly difficult
to ferret out, have been the cause of more than one migration setback. Concern
and respect for the complexity of this problem has been part of the OpenVMS
engineering philosophy since the initial design of the VAX-11/780. These
concerns are at the heart of why such transitions are qualitatively safer on
OpenVMS.
The solution to this problem of interdependencies was to
implement many noncore parts of the operating system and its utilities as
PDP-11 images, running under the RSX-11 Applications Migration Executive (AME).[25]
This allowed engineering resources to be concentrated on components that had to
operate in native mode (for example, the executive, RMS). It also allowed
development of supporting components (such as compilers, editors, and tools) on
existing, readily available PDP-11 systems. This approach allowed the OpenVMS
Engineering organization to ship the first VAX-11/780 in October 1977,
only 18 months after finalizing the initial design. The tools and utilities
running under the emulation mode were gradually replaced in subsequent releases
of the VAX/VMS operating system.[26]
The common data formats and character sets between the different architectures
mean that data translation was and is rarely required.[27]
In fact, the image-translation support allows native Itanium
binaries to invoke translated images, and vice versa. It is such a fundamental
part of the operating system implementation that it happens without conscious
thought on the part of most users and system managers. Translated images,
through transfer vectors, invoke entry points in the normal common run-time
library when required.
Translated images have been part of OpenVMS production
systems since the advent of Alpha and VAX. Perhaps the most commonly used
translated component in recent history has been the Monitor
utility (MONITOR) on the Alpha platform. Unheralded and virtually unnoticed,
the Alpha version of MONITOR has been translated
from successive VAX images since the advent of the Alpha in 1992 through 2005.[28]
Similarly, the TECO text editor has made use of emulation
and translation since the advent of the VAX in 1977.
The preceding examples suggest a prudent, time-tested
strategy -- one that has been used three times by the OpenVMS Engineering
organization itself to move a development and production environment from one
hardware architecture to another without interruption.[29]
This strategy is characterized by an approach that dramatically reduces the
Gordian knot[30]
of components that must be migrated in order to have an operational production
system.
Environments have a range of different applications (Figure
6). Core applications are critical to daily operations; other applications
might be critical, but on a far longer time scale. Still others might be
important but are not used on a regular basis.
Figure 6 - Typical environments include a range of
applications, from core to irregular utilities and reports.
Each end-user environment is unique and has its own issues –
technical, political, and financial. In some environments, it is desirable to
migrate core applications first. In others, the best candidates for early
migration are the rarely used utilities that are not critical to day-to-day
operations. Even two organizations in similar niches in the same industry can have
different preferences for the order in which workload is moved from the old
platform to the new platform. One of the strengths of OpenVMS is that this
decision, with all its nuances, is driven by end-user business issues on a
case-by-case basis.
Workload migration is also not limited to
application-by-application migration. OpenVMS clusters might include systems
with differing architectures transparently accessing the same files. Once an
application is believed to be ready for production, it is possible to rehost
the user community in stages that are calculated to minimize risk and strain on
user support resources. Thus, in a well-executed OpenVMS migration, few
situations require the transition to be made all at once.[31]
This capability of mixing and matching components allows a
wide degree of flexibility when scheduling transitions of components from
translated to native compiled forms (Figure 7). Initially, production might use
an application entirely composed of translated images. As images become qualified
for production use, it is a simple matter to integrate them into the production
profiles. When this iterative process is completed, all of the images are
natively compiled for the Itanium architecture.
Figure
7 - Translated images allow the migration to be achieved one component at time.
Mixed-architecture clusters, together with binary
translation, allow workloads to be moved to newer platforms in an orderly
fashion that is compatible with all the requirements of business: financial,
operational commitments, and technical resource availability. The same
flexibility that is available with different processes is also usable on a
shareable library-by-shareable library basis. Applications rarely exist as
singletons. In the majority of cases, end-user environments have many
applications, often grouped into families that use common supporting libraries.
The translated-image facilities enable individual libraries
to be used in translated or native environments, as appropriate. Additionally,
since the choice of library is controlled through the use of logical names,[32]
different libraries (one native, one translated) can be used on the same
cluster member, depending on some combination of user, application, and other
criteria.[33]
|
 |
 |
|
 |
 |
Translation is far different from emulation. Emulation
reinterprets the actual binary image of the instructions used by an earlier (or
different) architecture. In the classic
OpenVMS example, the original VAX-11 series processors[39]
had integral hardware to emulate the nonprivileged aspects of the PDP-11[40]
instruction set. Later VAX products used software emulation, which allowed them
to execute unchanged binary images from RSX-11M/M-PLUS systems.[41]
The penalty for the flexibility of emulation is that each
instruction must be reinterpreted each time it is used. Depending on a variety
of factors,[42]
software emulation produces extra overhead that reduces performance, often by a
factor of 5 to 10.
Translation is inherently different. Translation uses an
offline utility, the translator, to convert a binary executable image from the
instruction set and format of one architecture to the instruction set and
format of a different architecture. This process is akin to using a compiler in
that it is run a single time. Thereafter, the resulting image executes without
extensive supervision.[43]
|
 |
 |
|
 |
 |
Modern business must be agile, quickly adapting to changes
in the business environment. This need occurs at all levels, including business
strategy, IT provisioning, and IT operations. In IT provisioning, OpenVMS
provides developers and maintainers with a range of choices for how to proceed
with migration to a new hardware platform. In the simplest case, with plentiful
resources and fully compliant sources, it is simply a matter of recompiling,
rebuilding, and requalifying. This is generally the choice of software
developers and of those with isolated programs. The problem of large,
interrelated applications environments is a different world. Here, the
conflicting requirements of different obligations and costs can easily create a
situation of tangled interdependencies.
When resources or schedules are less favorable, OpenVMS
features provide the ability to divide the migration into manageable, low-risk
segments (Figure 8). These steps can be performed incrementally, with the end
result of total conversion to native operation on Integrity servers, but
without the risks associated with an instantaneous cutover.
Users are often required to log out of applications at
various times in the work day (for example, at breaks, at meals, or at end of
shift). These natural operational boundaries can be harnessed as points at
which users, either as individuals or as groups, can be transitioned to changes
in the underlying environment. Replacements for each component or group of
components can be accomplished at the proper time, as a side effect of routine
operations. This approach results in an orderly transition that does not impact
users.
Figure 8 - An individual application or shareable image component of an application
can be transitioned from Alpha to HP Integrity systems in stages, from image
translation to native execution. This allows users to be transitioned from
Alpha servers to HP Integrity servers without the need to recompile code.
Mixed-architecture OpenVMS clusters can be used in the same
fashion. The ideal of transferring an OpenVMS cluster composed of VAX and Alpha
nodes and affiliated storage to a pure OpenVMS cluster with only HP Integrity
systems and current-generation storage arrays is achievable. When done
carefully, it can be accomplished without any total interruptions of overall
system availability. No changes to production routines other than the logins
and logouts routinely done during the workday are required.
The procedures of cutting over OpenVMS cluster members
without shutting down the entire cluster are well understood, as are the
techniques that enable the migration of storage without interrupting user or
application access.[44]
The following sections focus on the software management steps that allow these
goals to be achieved.
For example, it is not generally appreciated that, until the
release of OpenVMS Alpha Version 7.3-2 in 2005, the Monitor utility, which
monitors system performance, was a binary translation of the image used on the
VAX version of OpenVMS. The entire OpenVMS universe has been using MONITOR and other translated images on Alpha
for more than a decade without incident or, for that matter, awareness.[45]
The same technology alternative is available for translating Alpha binary
images for use on HP Integrity servers.
|
 |
 |
|
 |
 |
During the transition process, the team must verify proper
functioning of the applications multiple times. Standardizing the qualification
procedures for each application ensures that these tests are done in a
consistent manner at each point.
These tests fall into two categories: functionality tests
and regression tests. Tests of functionality guarantee that software can
perform its intended functions. Regression tests are a far different category.
The collection of regression tests for a program is the collection of test
cases for problems that have been resolved. Running these tests as part of the
qualification process ensures that problems do not reappear once they are
corrected.
OpenVMS features such as the Logical Disk driver (LDDRV),[46]
the Backup utility, and the logical name facility make it straightforward to
implement re-creatable test environments with low risk and a high degree of
reproducibility.
|
 |
 |
|
 |
 |
This scenario is one of multiple, interwoven applications
and libraries, where the network of interdependencies virtually guarantees
conflicts and problems. The complexity of each case study illustrates choices
in the process that would not be apparent in simpler situations.
The case involves a large data-processing organization with
a number of semiautonomous development groups, each responsible for some
segment of the applications that support the overall business. The organization
might be a financial institution, a manufacturing operation, a utility, a
research project, or some other enterprise.
The hardware environment is currently a moderate to large
cluster of AlphaServer systems. Much of the hardware is leased, and the leases
expire in a relatively short time. A large number of the applications are
developed in house. The staff is confident that they can perform the
transition, given the time to do the work of upgrading many old sources, which
have been in use for years without recompilation. Many of the images depend on
a series of underlying shareable images that are maintained by several of the
development groups.
Management is concerned about finances and availability. A
brief review of the finances, personnel, commitments, and dependencies shows a
complex series of connections which, at first glance, seems irresolvable. In short,
there appears to be no way, without dramatic increments in budget and
personnel, that the transition can be accomplished without extending the leases
on the existing AlphaServer systems, the cost of which is prohibitive.
This is not a far-fetched scenario.[53]
What is unusual is that image translation, mixed-architecture OpenVMS clusters,
and host-based volume shadowing provide the enabling technologies to transition
this admittedly complex environment without ever interrupting production use of
the system.[54]
If problems do occur, the transition can be undone in seconds or minutes, at
any point in the process.
The first two steps, which can be done somewhat in parallel,
are to integrate one or two Integrity servers into the existing OpenVMS
cluster, with access to all of the required data volumes, and to develop
qualification criteria for the various components which comprise the
applications base.
The next step, image translation, is a brute force process.
Each image, whether directly executable or shareable, is translated for use on
Integrity servers and then requalified. The end result of this process is a
full applications environment running on the Integrity platform.
How the resulting translated environment is employed is a
business decision that depends primarily on cost and risk. The environment can
be used as one or both of the following:
- Allow the different development teams to work in parallel, each on its own sections of the applications base, using the translated images as a framework or scaffold.
- Shift production use to the Integrity platform using the translated images, redoing the translation process for images affected by patches.
This is not an all-or-nothing decision. The translated
environments can be used for production use in some applications and not in
others. In many environments, the performance of the translated images is
adequate for transitional production use and possibly for long-term use.[55]
Once the translation has been qualified, it is possible to
retire and remove the majority of the AlphaServer systems from the OpenVMS
cluster and replace their computing capacity with HP Integrity servers, as
required. It is recommended that at least one AlphaStation be retained as a
resource for the interim rebuilding of executable images for translation, but
that is a nominal expense.
The development teams can now work independently on the
language and other minor changes needed to natively recompile their components
on Integrity systems. As each image is recompiled and qualified for native use
on HP Integrity systems, it can replace its translated version without
disruption. At all times, the full
functionality of the system is available to users and developers.
|
 |
 |
|
 |
 |
The customer application is one step more complex than a
simple, self-contained program. Each of the five applications in this case
study uses a common set of underlying utility routines that are coded in
Macro-32 (the assembler language for the VAX-11/780) and ANSI C.
The first step is to rebuild the original application on the
Alpha by using a shareable library form of the utility routines rather than a
set of object modules statically included at link time.
The
applications are maintained by a different staff than the maintainers of the
underlying utility library. Each group has its own schedules, budgets, and
commitments. The goal is to transition this code base, which was originally
designed for a VAX system more than 15 years ago, into a form that executes
natively (without translation) on the HP Integrity platform. Of prime
importance is that the transition to HP Integrity systems does not affect the
use of the application for production on a daily basis.
The
first substantive step is for the two groups to run their respective images
through the Alpha Environment Software Translator (AEST), and to verify that
the translated images function correctly. This step serves three purposes:
- To provide a baseline of functionality for the converted images.
- To permit production use to be transitioned to Integrity servers while the actual migration work is underway.
- To keep the system as a whole available throughout the course of the source modifications, thereby allowing both
development groups to work in parallel without cross-interference.[56]
First, the utility library is translated using the AEST command:
$ AEST UTILITY_LIBRARY
Next, each application that is linked against the library is
translated:
$ AEST APPLICATION1
$ AEST APPLICATION2
$ AEST APPLICATION3
$ AEST APPLICATION4
$ AEST APPLICATION5
The translated versions of both the library and the
applications mutually reinforce the abilities of their developers to migrate
the entire environment to the HP Integrity servers. It is also possible for the
native versions of the executables to be integrated into the production environment
on a step-by-step basis. If necessary, this integration can be accomplished on
a group-by-group or individual basis.[57]
|
 |
 |
|
 |
 |
C-Kermit[58]
is a good example of a program with a long, productive life. C-Kermit has been
through several versions (Version 8.0 being the latest) and has been maintained
by a loose confederation of developers. As an example, C-Kermit consists of a
collection of source files, as shown in Table 2.
|
Files |
Lines |
Blocks |
| *.c |
41 |
277,376 |
18,327 |
| *.h |
22 |
17,409 |
1,018 |
| Total |
63 |
294,785 |
19,345 |
Table 2 - C-Kermit Version 8.0 Source Base
A casual review of the sources reveals a common problem with
older source collections: the extensive use of variables with global scope.[59]
These pervasive global variables make it difficult to divide the program into a
series of self-contained shareable libraries. Fortunately for the C-Kermit
maintainers, the conventions of ANSI C are well enforced, and the source was
relatively straightforward to natively recompile for the Itanium architecture.
Suppose the source base had not been strictly ANSI C, and
quick recompilation was not an option. Would translation have resulted in a
production-usable utility?
A straightforward binary translation of the Alpha executable
into an Itanium executable was done as an experiment. The performance of that
executable was approximately 50% of the performance of a native compiled image
(0.29 seconds versus 0.11 seconds; see Table 3) for the transfer of the
distribution of INFO-ZIP (6,874 blocks); but that is quite acceptable.
|
 |
 |
|
 |
 |
Case study 1 illustrates the ease with which this approach
decouples the physical aspects of the migration from the software engineering
effort. The case of C-Kermit (case study 2) is a relatively simple one and
almost does not seem worth the effort. Expanding case study 1 to include a
larger set of libraries and multiple applications, with varying sets of the
libraries begins to illustrate the complexities that can occur.
The apparent simplicity of case study 1 becomes a far more
complex scheduling problem when one considers these issues.
More commonly, large applications environments are far more
complex with many more interconnections and interdependencies.
|
 |
 |
|
 |
 |
Some applications contain single executable images whose
source modules comprise aggregates of tens of thousands of lines in one or more
languages. These applications are often maintained by teams of maintainers. The
challenge in such a situation is to find a task sequence which allows all of
the teams to meet their objectives.
The combination of the image translation facility, the
Translated Image Environment, and the user-by-user (or finer) control over
which shareable library is used uniquely provide significant leverage for
OpenVMS users in managing and controlling this process. An example from a
recent client project illustrates the mechanics of how this can be accomplished.
The ITEMCHECKprogram was implemented
to cross-check and validate data contained in a series of RMS files containing
data from a client relational database. Each RMS file contains data[60] from
one table of a PC-resident relational database.
The sources needed to build ITEMCHECK are:
- The actual source for the ITEMCHECK program
- Some library collections developed for this particular project
- Some library collections developed for other projects
The individual libraries were implemented to be independent of
one another. While each library does make use of variables with global scope,
the variables are referenced only from within each library. Some interfaces,
reminiscent of the C++ object-oriented programming style, are used to set and
get these variables when necessary. Other static variables are used internally
within libraries and routines and are not exposed directly to outside
interfaces.
It is a simple matter to break the different components into
a main image and eight shareable images. Each of the images can then be
translated individually. The source base for ITEMCHECK
and its underlying utilities is not particularly large, but it is large enough
to be illustrative.
$ AEST ITEMCHECK
Each shareable image can now be translated individually:
$ AEST ITEMCHECK_SHRLIB
$ AEST DEBUGTRACESHR
$ AEST GRAPHICSSHR
$ AEST INDEXSHR
$ AEST ITEMSHR
$ AEST ORDERSHR
$ AEST OUTLINESHR
$ AEST PRODUCTSHR
$ AEST READKEYEDSHR
$ AEST RMSSEQUENTIALSHR
$ AEST UTILITIESSHR
The resulting collection of shareable images can be executed
on an HP Integrity server without native recompilation. On an individual basis,
each library can be transitioned from its translated version to its natively
compiled version, if need be, on a user-by-user or application-by-application
basis, until the entire assemblage has been compiled natively and fully
qualified.
On a project basis, this provides a large number of
alternative paths for project management.[61]
Thus, a wide variety of benchmarks can be run in this case.[62] A
sampling of these benchmarks (Table 3) shows the performance of this program
when processing a representative dataset containing 1,000,000 line items
comprising 500,000 orders.
|
AlphaStation 200 4/233; 384 MB, 2 RZ-29
|
SPECint92: 157.7
|
|
|
CPU
|
Buffered IO
|
Direct IO
|
Virtual Size
|
Page Faults
|
|
Tare
|
0.16
|
58
|
8
|
171,584
|
173
|
|
C-Kermit 8.0
(Client side)[63]
|
17.73
|
19,327
|
40
|
184,512
|
749
|
|
ITEMCHECK
|
|
|
|
|
|
|
|
Single Image
|
2,305.88
|
167
|
59,551
|
175,200
|
462
|
|
|
Shareable
Images
|
2,462.81
|
197
|
59,582
|
175,200
|
490
|
|
|
|
Integrity rx2600; 1.4 GHz/1.5MB Cache; 2 GB; 2 36G
|
SPECint2000 1170+[64]
|
|
|
CPU
|
Buffered IO
|
Direct IO
|
Virtual Size
|
Page Faults
|
|
Tare
|
0.01
|
48
|
15
|
176,624
|
180
|
|
C-Kermit 8.0
(Client side) [65]
|
|
|
|
|
|
|
|
Translated
|
0.29
|
19,868
|
57
|
198,288
|
764
|
|
|
Native
|
0.11
|
20,240
|
48
|
198,288
|
764
|
|
ITEMCHECK
|
|
|
|
|
|
|
|
Single
Translated Image
|
5,978.47
|
147
|
59,500
|
198,944
|
714
|
|
|
Translated
Shareable Images
|
3,501.47
|
170
|
59,497
|
201,264
|
805
|
|
|
Assortments of
Native/Translated Images
|
|
|
|
|
|
|
Translated Main Program
|
|
|
|
|
|
|
|
Mask 194
|
735.37
|
173
|
59,599
|
198,944
|
752
|
|
|
Mask 38
|
2,262.38
|
182
|
| | | | |