Guest Blogger: Pratap Pereira, Distinguished Engineer, Enterprise Networking Group.
Pratap sets the long-term engineering direction for IOS and IOS-XE at Cisco. He was a founding engineer of IOS-XE and has seen it grow from the first commits of a new foundational infrastructure for routing platforms into a comprehensive software stack for the entire enterprise portfolio. He was directly responsible for large parts of the implementation of infrastructure components including domain-specific languages, in-memory databases, in-service software-upgrades, compilers, state distribution systems at the heart of networking products and has been instrumental in maintaining the conceptual integrity of the overall software. He has a Ph.D. in Electrical Engineering from The Ohio State University.
The networking industry has always been about producing products and solutions that revolutionize distributed computing. The ability of routing protocols to disseminate information effectively at a dramatic scale and with tremendous resilience is the foundation on which the Internet runs. The natural counterpart to this is the functionality of being able to sling packets at astounding scale in software and in hardware. Network-level resilience to faults is considered table stakes today. These characteristics and abilities are aspects that Cisco has been front-and-center in making possible.
As you may have read in Suresh Sangiah’s recent blog, we set about a couple of years ago to reimagine how the engineering team develops software at Cisco to better enable an infrastructure attuned to the digital era, as an integral part of our new Digital Network Architecture strategy. We chose to base it on our strengths and pivoted completely to an internal canonical distributed database model for all state dissemination. In IOS-XE, the precursor to our current work, we built a mixed mode system with a pragmatic split between message-passing parts of the system and in-memory databases to store state. We have been pushing the boundaries on high performance in-memory databases, which have been running at route scale for the last six years, in currently shipping products. We are now generalizing our databases expertise to form the core of the latest evolved IOS-XE foundation. What this facilitates is an inherent ability to be flexible in the location of processing. The ability to be location-independent in processing is a phenomenal capability when extended to the complete portfolio of enterprise products. We have solved the general problem of having relative ease with which different types of products can be synthesized to meet diverse customer requirements. These capabilities deliver major advantages for customers existing networks and we expect will also drive an entirely new generation of category-defying products.
In the internal development environment, I am proud to say that for the entire routing, switching and wireless control plane to data plane interface we have completely converted to a formal model-driven software interface. This is an internal model, which gives us an independent foundation on which to rapidly develop functionality with zero impedance mismatch or translation layers. The distinction between internal interfaces and external interfaces is an important one. The internal models are the essence of the core competency of Cisco as a software organization. It has to progress at the pace of internal innovation and must withstand the test of time. Setting the expectation for a large development organization to have a simple, single mental model for how software is developed paves the way for excellence. Equally, introducing capricious wanton changes that chase after every shiny new object would not do well when setting expectations with a large group of engineers. The ability to change our very foundation is a deeply deliberative task, which we successfully accomplished with evolved IOS-XE. The expectation is that evolved IOS-XE will be our stable foundation for a period of time until the next substantial software stack upgrade. We will speak more, in subsequent blog posts, about how the complete software stack at Cisco lines up.
The design points for internal and external software interfaces are very different, necessitating a split in the way we design and implement them. We are also automating the conversion from our internal model to higher levels of abstraction to and from standards-based interfaces, which we have always supported and will continue to support. This allows us to support new external interfaces and operating models as they evolve with relative ease, very rapidly. Furthermore it allows for overall system efficiency by only performing a single transformation/translation step to and from the external representation. The normalization into this internal canonical representation also permits huge leaps to be taken in the consistent way in which issues can be triaged and fixed. The comprehensive ability to support telemetry, deep visibility, event/trace analytics is inherent within our software stack and is applied automatically across all the software we develop in the new environment.
For us working on evolved IOS-XE, we started out wanting to reseat the entire application logic layer sitting on top of a new software stack, which was built upon a new foundation, all while ensuring that our products continue to function well. Folks internally likened it to changing the engines on a large airplane that was in mid-flight. The changes implemented are deep and substantial and have set us up for the long haul. Over the next set of software releases more capabilities of the new software stack will be exploited to produce transformative user experiences. If we don’t produce a jaw-dropping experience across every instance of interaction and have our customers remarking, “How did they do that,” I would not have done my job!