Due to economic slowdowns, network carriers are waiting for demand to recover before they replace or expand aging network infrastructure equipment. When the market rebounds, expect rapid jockeying for position as service providers seek to capture growing service revenue opportunities based on differentiators that make their services more valuable than competitor services.
Key to winning the network equipment purchase orders from tomorrow's rapidly expanding network service provider businesses will be the ability to deliver equipment that offers the promise of carrier-grade reliability, low operating expenses, easy customization, and rapid time to market. Network equipment manufacturers must prepare now to be ready to satisfy today's pent up demand for differentiated network services once recovery begins.
Managing the complexity of modern network infrastructure equipment requires strong software engineering discipline. It is essential to separate the concerns of different teams of developers so that each contributor can innovate and differentiate without interfering with the work of others. Java virtual machine technologies facilitate successful partitioning of responsibility.
Today's network infrastructure systems involve complex distributed systems that coordinate many different computers to ensure reliability, availability, and functionality. The OSS (Operational Support System) tracks usage, billing, and reporting. The NMS (Network Management System) and EMS (Element Management System) oversee and manage operation of the individual elements that shoulder the burden of reliably and efficiently moving information between network nodes. Nearly all developers of OSS, NMS, and EMS applications use the Java programming language.
The management of network elements optical platforms, multi-service access devices, service concentration equipment, and IP infrastructure requires communication between the EMS and the elements themselves. Because the Java platform provides high-level distributed programming facilities, implementing the management plane software of network elements in Java is ideal. This approach offers the greatest ease of development, lowest cost of maintenance, and greatest flexibility to support rapid evolution of management-plane functionality.
Today's network elements contain millions of lines of code, far too many to be developed from scratch for each new product. Java easily integrates legacy native code (C, C++, other compiled languages) and Java code through the use of JNI (Java Native Interface).
Though Java was initially introduced as an interpreted language, modern implementations generally translate all or part of the portable byte-code representation into native machine language prior to execution, resulting in up to a 20-fold improvement over interpreter execution speed.
Just-in-time (JIT) translators perform translation immediately before executing the code, which is especially useful if an application's capabilities evolve in the field. Ahead-of-time (AOT) translators perform translation prior to deployment, similar to traditional C development. This is particularly valuable when deployed products must run exactly the same software that was tested in the Quality Assurance labs. Since many network elements must achieve five-nines reliability, AOT compilation is a common implementation technique.
When a Java application is deployed within an embedded networking system, it is bundled with a variety of run-time components (Java API libraries, JIT compiler, automatic garbage collector; and support for self-management of the JVM) that comprise the Java virtual machine platform. Care must be taken to ensure that the run-time components deployed with your Java application adequately support the needs of each network element.
There are now several "official" Java platforms, each supporting different incompatible libraries. In our experience, the J2SE libraries are most appropriate for typical network element applications.
A Java virtual machine must provide automatic garbage collection services to reclaim the memory of dead (unused) objects. Because reliable operation of management-plane software is very important, we recommend a virtual machine that accurately identifies and reclaims all memory no longer needed and regularly defragments the memory allocation pool. Since most network elements must respond to management requests within 20 to 50 ms, the garbage collector should be preemptible and incremental, and the garbage collection effort should be paced against the ongoing allocation needs of the application software.
To reduce operating expenses of network service providers, there is a strong trend in network infrastructure equipment towards autonomous operation and self-management. Rather than requiring constant vigilance by human operators, the various computer systems must monitor themselves and adjust their own operating parameters when necessary. Java virtual machines designed for mission-critical roles in network infrastructure applications provide VM-management APIs that interrogate and adjust the CPU workload, inter-thread synchronization and bottlenecks, garbage collection efficiency and status, I/O performance and status, and memory utilization.
One of the reasons that Java adoption has been so rapid at the enterprise level is because Java development is much easier than C and C++ development. High-quality Java development tools are part of this reality. Unfortunately, many Java products promoted to embedded networking developers fail to support critical developer needs.
Make sure that the virtual machine supports Java-standard remote-hosted debugging (JDWP) of both interpreted and compiled code. Also, check for availability of profiling support to help identify memory and CPU hot spots that benefit from hand optimization.
A special tool for embedded network element developers provides the ability to native-compile and link entire Java applications so that the resulting program can be placed into the device's ROM. This simplifies startup operation and improves system reliability. With a ROM-targeting tool, you should be able to hand-pick which library components reside in ROM, and to specify which should be compiled for better performance and which should be interpreted for smaller memory footprint.
A network element runs a complex mix of Java management-plane software and legacy control-plane software. To assure that management-plane software evolves independently of control-plane software, the virtual machine must support efficient integration and clean separation of concerns.
The standard technique for integrating C and Java involves use of the JNI API. Some virtual machines support additional APIs that are smaller and faster than JNI services. For even better performance, at least one VM vendor has enabled its JIT and AOT compilers to recognize certain Java/C integration APIs and to generate context-optimized translations.
Occasionally, managers of legacy control-plane services are reluctant to introduce "foreign" virtual machine software into their environment. To address the concerns of these engineers, it is important to understand the protocols that the VM uses for access to shared CPU and memory resources. Some virtual machines allow system integrators to limit the range of priorities at which Java threads run and the amount of memory accessible to the Java virtual machine.
A final issue of considerable importance to many network element developers is abstraction of operating system behavior. Developers want assurance that Java code will run on many different RTOSs. Although standard Java is much more portable than C and C++, there are still subtle differences in how virtual machine threading libraries behave on different operating systems. If portability of threading behavior is important, select a virtual machine that abstracts operating system threading behavior.