Technical summary - OpenVMS on x86-64
The following technical summary is based on practical experience gained as part of the VSI and HPE Field Test programmes and by working with a wide range of end-user systems.
VSI OpenVMS port to x86-64
- Support for OpenVMS on x86-64 is entirely developed by VSI.
- See the VSI software products web page for Quickspecs, SPD, roadmap and further information.
x86-64 "industry standard" servers and virtual machines - overview
- 64bit extended Intel x86 architecture.
- Current industry trend is towards large memory, high core count servers, with solid-state storage and high bandwidth network connectivity.
- Virtualisation support to run inside a hypervisor.
- Needs synchronisation issues to be carefully considered and coded. What was a single "atomic instruction" on VAX can be multiple instructions on other platforms, so instruction flow through the CPU can be interrupted.
- What was PALcode on Alpha is now part of the operating system (the SWIS layer). The SWIS layer on x86-64 is necessarily different to that on Itanium, due to instruction set and microprocessor architectural differences.
Application software issues that need to be considered
- Synchronisation and serialisation of access to data structures.
- Data alignment is important for maximum performance.
- Floating Point format on x86-64 is IEEE. Other formats are supported by software emulation, not in hardware. For best performance ensure that you use IEEE floating point formats.
- Search out all implicit assumptions of architecture types and architecture specific features. A typical example is code such as "if .not. alpha then assume vax". That will create some interesting results!
- OpenVMS contains many more system services with documented interfaces than before. Use them rather than implementing your own mechanisms.
- The OpenVMS calling standards have changed. This is only an issue if you have code that directly manipulates data structures such as the stack and frame pointers.
- Executable image file sizes are significantly larger than on Alpha, primarily due to the standardised ELF and DWARF object module and image file formats.
- MACRO-32 (VAX assembler) is a compiled language on x86-64, Integrity and Alpha.
- There will be a binary translator for executable images to convert them to x86-64 executable images, just as there was for VAX to Alpha and Alpha to Integrity. Previously translated executable images will be capable of translation to x86-64. Binary translation will be to user mode programs (no system code) and to specific languages due to run-time library support constraints.