1.1Green Software for the Expanding Digital Universe: Designing with a Sense of Proportion
1.2The Challenge Posed by Emerging Systems: Why Hardware Advancements Are Not Enough
1.2.1Runtime bloat in framework based software
1.2.2Software interaction with systems
1.2.3Impact of non-volatile memory and low-latency fabrics
1.2.4Large scale connected architectures from edge to cloud
1.2.5Emerging software models and data centricity
1.3The Heart of the Matter: Why a Plea for Lean Software Is Not Enough
1.3.1The flexibility, productivity, and efficiency trade-off
1.3.2Unsustainability of tightly coupled hardware-software abstractions
1.3.3Traditional performance optimization is not enough
1.3.4Difficulty in quantifying the opportunity and impact of software bloat reduction
1.4The Resource Proportional Software Design Principle
1.4.1How to assess the propensity for bloat in a software component?
1.4.2How to broaden supported features without a runtime overhead?
1.4.3Can software be designed to cope with changing trade-offs as technology evolves?
1.4.4Can we anticipate what proportion of data processed by application is truly useful?
1.5Dimensions of Resource Proportional Design
1.5.1Resource proportional code features
1.5.2Resource proportional response to technology and system evolution
1.5.3Resource proportional data processing
1.6Approach in This Book
A smartphone today has a million times the computing power of the systems that NASA used to land on the moon[356] and one hundred thousand times the amount of memory in personal micro-computers we used 30 years ago. Yet, it does not seem enough to satisfy our needs for long. In cloud based environments, there is a remarkable growth in the pace of software delivery using continuous integration models where new software is now released every few minutes instead of years. As new applications and data sources proliferate rapidly, we also find that every software update requires more resources than its previous version. Is this as efficient as we can get without slowing down the rate of application innovation or is the resource usage for computing growing out of proportion over the years?
Radical improvements in the ease of gathering data and the artificial intelligence revolution continue to raise the demand for computing resources. The cost of sequencing a human genome has reduced by a factor of a million in less than decade, out-shadowing Mooreās law[401]. How do we tell if the computing resources we have in any given system are being utilized appropriately for the purpose it serves? If not, then how do we bring in this sense of proportion when designing next generation software and systems solutions?
In this chapter we cover an overview of these questions, why they matter now, our approach to address them, and how the rest of this book will unfold.
1.1 Green Software for the Expanding Digital Universe: Designing with a Sense of Proportion
āAnything that is produced by evolution is bound to be a bit of a messā
Sydney Brenner, Nobel laureate
In Roger Lewin: Why is Development So Illogical?
Beauty is more important in computing than anywhere else in technologyā¦.
Beauty is important in engineering terms because software is so complicated; beauty is the ultimate defense against complexity.
David Gelernter
Machine Beauty: Elegance and the Heart of Technology
Cost, energy efficiency, and performance remain crucial considerations across the entire spectrum of computing systems from the edge to the cloud that collectively serve an ever expanding digital universe. Billions of smartphones, personal devices, and IoT1 have become indispensable at the edge while data centers gravitate to countries with cold climates2 and even dive underwater.3
The digital expansion is not just a matter of quantity. It is representative of a natural desire for progressively richer and more sophisticated capabilities, as we entrust more and more responsibilities of our lives to the power of software genies residing in the devices we wear or hold in our palms, our homes, our vehicles, our hospitals, our schools, our factories, our farms, spanning both remote edges and the mighty clouds. This unprecedented scale of digitization propels a demand for efficient software and computing systems. Fueled by the constant influx of data to learn from, software is now central to innovation. To sustain the progressive expansion of software capabilities, the functionality supported by a software system needs to be designed and reused with a sense of proportion about the appropriateness of its resource usage.
However, the inevitable complexity in software stacks (a reflection of the complexity in real world needs) is a barrier to reasoning about efficiency and assessing āappropriatenessā with respect to utility. The mass of detail in any software system makes it hard to understand what happens at runtime and how to reuse it proportionally for a given scenario. Building efficient solutions requires some form of elegant co-design across different layers of a stack that contain multiple levels of information transfer (e.g., hardware-software co-optimization in smartphones).4
Analog vs. Digital Design
Analog computing in the ā50s and ā60ās provided results at the āspeedā of light in some cases but accuracy or controllability was poor. Digital representations and computations based on such representations became necessary to provide some functional guarantees of repeatability and accuracy. However, there are situations where computational or energy requirements are still an issue. Moving from analog to digital fully may be a few orders of magnitude costlier in terms of energy and sometimes also orders of magnitude slower. For example, Spice simulation for circuits is orders of magnitude slower than live electronic speeds.
A system designed with a better sense of proportion about appropriate use of resources may therefore be partly āanalogā (for example, to conserve energy) and partly digital (for accuracy). Analog here could refer to systems without quantization, whether electronic, optical, chemical (such as DNA-based computing or storage) or, in the even longer timeframe, quantum-based systems. In communication systems,...