EDBT 2026 Demo / reviewers in the wild / expert
Benjamin G. Zorn
dblp:z/BGZorn · also Ben Zorn 0001, Benjamin Zorn 0001
· DBLP profile ↗
50ranked-venue papers
2as first author
3since 2021 · last 2024
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 30 · 2 first-authorSystems, architecture and hardware · 13 · 1 first-authorSecurity and privacy · 7 · 1 since 2021Databases, data management, data science and information retrieval · 3Human-computer interaction and ubiquitous computing · 3 · 2 since 2021Theory of computation · 1
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
20 papers |
Program synthesis and code generation · 39% Software testing · 16% Concurrent programming · 14% | |
| Network and information security
8 papers |
Security and privacy of machine learning · 45% Systems and software security · 34% Malware analysis · 14% | |
| Computer architecture, parallel and distributed computing, and storage systems
17 papers |
Memory systems · 25% Processor architecture and microarchitecture · 18% Hardware reliability and fault tolerance · 15% | |
| Human-computer interaction and pervasive computing
2 papers |
Human-AI interaction · 75% Learning and educational technologies · 25% |
Topics — the 30 heaviest of 69, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Security and privacy of machine learning
poisoning attack |
0.8 | 1 | 2024 | TrojanPuzzle: Covertly Poisoning Code-Suggestion Models · SP 2024 |
Program synthesis and code generation
programming by example |
0.4 | 2 | 2015 | User Interaction Models for Disambiguation in Programming by Example · UIST 2015 FlashRelate: extracting relational data from semi-structured spreadsheets using examples · PLDI 2015 |
Systems and software security
memory safety |
0.4 | 5 | 2009 | NOZZLE: A Defense Against Heap-spraying Code Injection Attacks · USENIX Security Symposium 2009 Samurai: protecting critical data in unsafe languages · EuroSys 2008 Archipelago: trading address space for reliability and security · ASPLOS 2008 |
Software testing
fault detection |
0.3 | 1 | 2018 | ExceLint: automatically finding spreadsheet formula errors · Proc. ACM Program. Lang. 2018 |
Software testing › fault detection
spreadsheet error detection |
0.3 | 1 | 2018 | ExceLint: automatically finding spreadsheet formula errors · Proc. ACM Program. Lang. 2018 |
Program analysis
static analysis |
0.3 | 1 | 2018 | ExceLint: automatically finding spreadsheet formula errors · Proc. ACM Program. Lang. 2018 |
Security and privacy of machine learning › poisoning attack
training data poisoning |
0.2 | 1 | 2024 | TrojanPuzzle: Covertly Poisoning Code-Suggestion Models · SP 2024 |
Data integration and cleaning › data extraction
spreadsheet data extraction |
0.2 | 1 | 2015 | FlashRelate: extracting relational data from semi-structured spreadsheets using examples · PLDI 2015 |
Learning and educational technologies
active learning |
0.2 | 1 | 2015 | User Interaction Models for Disambiguation in Programming by Example · UIST 2015 |
Program synthesis and code generation › programming by example
data extraction synthesis |
0.2 | 1 | 2015 | FlashRelate: extracting relational data from semi-structured spreadsheets using examples · PLDI 2015 |
Program synthesis and code generation
code generation with language models |
0.2 | 1 | 2023 | "What It Wants Me To Say": Bridging the Abstraction Gap Between End-User Programmers and Code-Generating Large Language Models · CHI 2023 |
Distributed systems
fault tolerance |
0.2 | 2 | 2008 | Samurai: protecting critical data in unsafe languages · EuroSys 2008 Archipelago: trading address space for reliability and security · ASPLOS 2008 |
Web and mobile security
browser security |
0.1 | 1 | 2012 | Rozzle: De-cloaking Internet Malware · IEEE Symposium on Security and Privacy 2012 |
Concurrent programming › concurrency bugs
data races |
0.1 | 1 | 2012 | Efficient Runtime Detection and Toleration of Asymmetric Races · IEEE Trans. Computers 2012 |
Malware analysis › web-based malware
malicious javascript detection |
0.1 | 1 | 2011 | ZOZZLE: Fast and Precise In-Browser JavaScript Malware Detection · USENIX Security Symposium 2011 |
Memory systems
DRAM |
0.1 | 1 | 2011 | Flikker: saving DRAM refresh-power through critical data partitioning · ASPLOS 2011 |
Energy-efficient computing
power management |
0.1 | 1 | 2011 | Flikker: saving DRAM refresh-power through critical data partitioning · ASPLOS 2011 |
Memory systems › DRAM › DRAM refresh
refresh energy reduction |
0.1 | 1 | 2011 | Flikker: saving DRAM refresh-power through critical data partitioning · ASPLOS 2011 |
Cloud and datacenter computing
cluster data processing |
0.1 | 1 | 2019 | Niijima: sound and automated computation consolidation for efficient multilingual data-parallel pipelines · SOSP 2019 |
Operating systems › resource management
memory management |
0.1 | 2 | 2006 | DieHard: probabilistic memory safety for unsafe languages · PLDI 2006 Reconsidering custom memory allocation · OOPSLA 2002 |
Systems and software security › exploitation › injection attacks
code injection attack |
0.1 | 1 | 2009 | NOZZLE: A Defense Against Heap-spraying Code Injection Attacks · USENIX Security Symposium 2009 |
Systems and software security
exploitation |
0.1 | 1 | 2009 | NOZZLE: A Defense Against Heap-spraying Code Injection Attacks · USENIX Security Symposium 2009 |
Concurrent programming
concurrency bugs |
0.1 | 1 | 2009 | Detecting and tolerating asymmetric races · PPoPP 2009 |
Concurrent programming › concurrency bug detection
data race detection |
0.1 | 1 | 2009 | Detecting and tolerating asymmetric races · PPoPP 2009 |
Concurrent programming › concurrency bugs
data race tolerance |
0.1 | 1 | 2009 | Detecting and tolerating asymmetric races · PPoPP 2009 |
Program analysis
dynamic analysis |
0.1 | 1 | 2009 | Efficiently and precisely locating memory leaks and bloat · PLDI 2009 |
Program analysis › error detection
memory leak detection |
0.1 | 1 | 2009 | Efficiently and precisely locating memory leaks and bloat · PLDI 2009 |
Systems and software security › memory safety
memory corruption defense |
0.1 | 1 | 2008 | Samurai: protecting critical data in unsafe languages · EuroSys 2008 |
Hardware reliability and fault tolerance
memory fault tolerance |
0.1 | 1 | 2008 | Archipelago: trading address space for reliability and security · ASPLOS 2008 |
Systems and software security › memory safety
buffer overflow |
0.1 | 1 | 2007 | Exterminator: automatically correcting memory errors with high probability · PLDI 2007 |
Methods — techniques the papers use, named apart from their topics
static analysis evasion · 1.5docstring injection · 1.5think-aloud study · 1.3grounded abstraction matching · 1.3user study · 0.4regular expressions · 0.4program synthesis · 0.4active learning · 0.4rectangular region analysis · 0.3information-theoretic analysis · 0.3replication · 0.3forward error correction · 0.2address space trading · 0.2multi-execution virtual machine · 0.1fingerprinting · 0.1critical data partitioning · 0.1approximate storage · 0.1randomization · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2024 | TrojanPuzzle: Covertly Poisoning Code-Suggestion ModelsabstractWith tools like GitHub Copilot, automatic code suggestion is no longer a dream in software engineering. These tools, based on large language models, are typically trained on massive corpora of code mined from unvetted public sources. As a result, these models are susceptible to data poisoning attacks where an adversary manipulates the model’s training by injecting malicious data. Poisoning attacks could be designed to influence the model’s suggestions at run time for chosen contexts, such as inducing the model into suggesting insecure code payloads. To achieve this, prior attacks explicitly inject the insecure code payload into the training data, making the poison data detectable by static analysis tools that can remove such malicious data from the training set. In this work, we demonstrate two novel attacks, Covert and TrojanPuzzle, that can bypass static analysis by planting malicious poison data in out-of-context regions such as docstrings. Our most novel attack, TrojanPuzzle, goes one step further in generating less suspicious poison data by never explicitly including certain (suspicious) parts of the payload in the poison data, while still inducing a model that suggests the entire payload when completing code (i.e., outside docstrings). This makes TrojanPuzzle robust against signature-based dataset-cleansing methods that can filter out suspicious sequences from the training data. Our evaluation against models of two sizes demonstrates that both Covert and TrojanPuzzle have significant implications for practitioners when selecting code used to train or tune code-suggestion models. Hojjat Aghakhani, Wei Dai 0007, Andre Manoel, Xavier Fernandes, Anant Kharkar, Christopher Krügel, Giovanni Vigna, David Evans 0001, Benjamin G. Zorn, Robert Sim |
SP | 9 |
| 2023 | "What It Wants Me To Say": Bridging the Abstraction Gap Between End-User Programmers and Code-Generating Large Language ModelsabstractCode-generating large language models map natural language to code. However, only a small portion of the infinite space of naturalistic utterances is effective at guiding code generation. For non-expert end-user programmers, learning this is the challenge of abstraction matching. We examine this challenge in the specific context of data analysis in spreadsheets, in a system that maps the user’s natural language query to Python code using the Codex generator, executes the code, and shows the result. We propose grounded abstraction matching, which bridges the abstraction gap by translating the code back into a systematic and predictable naturalistic utterance. In a between-subjects, think-aloud study (n=24), we compare grounded abstraction matching to an ungrounded alternative based on previously established query framing principles. We find that the grounded approach improves end-users’ understanding of the scope and capabilities of the code-generating model, and the kind of language needed to use it effectively. Michael Xieyang Liu, Advait Sarkar, Carina Negreanu, Benjamin G. Zorn, Jack Williams 0001, Neil Toronto, Andrew D. Gordon 0001 |
CHI | 4 |
| 2023 | COLDECO: An End User Spreadsheet Inspection Tool for AI-Generated CodeabstractCode-generating large language models (LLMs) are transforming programming. Their capability to generate multi-step solutions provides even non-programmers a mechanism to harness the power of coding. Non-programmers often use spreadsheets to manage tabular data, as they offer an intuitive understanding of data manipulation and formula out-comes. Considering that LLMs can generate complex, potentially incorrect code, our focus is on enabling user trust in the accuracy of LLM-generated code. We present ColDeco, the first end-user inspection tool for comprehending code produced by LLMs for tabular data tasks. ColDeco integrates two new features for inspection with a grid-based interface. First, users can decompose a generated solution into intermediate helper columns to understand how the problem is solved step by step. Second, users can interact with a filtered table of summary rows, which highlight interesting cases in the program. We evaluate our tool using a within-subjects user study (n=24) where participants are asked to verify the correctness of programs generated by an LLM. We found that while all features are independently useful, participants preferred them in combination. Users especially noted the usefulness of helper columns, but wanted more transparency in how summary rows are generated to assist with understanding and trusting them. Users also highlighted the application of ColDeco in collaborative settings for explaining and understanding existing formulas. Kasra Ferdowsifard, Jack Williams 0001, Ian Drosos, Andrew D. Gordon 0001, Carina Negreanu, Nadia Polikarpova, Advait Sarkar, Benjamin G. Zorn |
VL/HCC | 8 |
| 2019 | Mimalloc: Free List Sharding in Action
Daan Leijen, Benjamin G. Zorn, Leonardo de Moura 0001 |
APLAS | 2 |
| 2019 | Niijima: sound and automated computation consolidation for efficient multilingual data-parallel pipelinesabstractMultilingual data-parallel pipelines, such as Microsoft's Scope and Apache Spark, are widely used in real-world analytical tasks. While the involvement of multiple languages (often including both managed and native languages) provides much convenience in data manipulation and transformation, it comes at a performance cost --- managed languages need a managed runtime, incurring much overhead. In addition, each switch from a managed to a native runtime (and vice versa) requires marshalling or unmarshalling of an ocean of data objects, taking a large fraction of the execution time. This paper presents Niijima, an optimizing compiler for Microsoft's Scope/Cosmos, which can consolidate C#-based user-defined operators (UDOs) across SQL statements, thereby reducing the number of dataflow vertices that require the managed runtime, and thus the amount of C# computations and the data marshalling cost. We demonstrate that Niijima has reduced job latency by an average of 24% and up to 3.3x, on a series of production jobs. Guoqing Harry Xu, Margus Veanes, Michael Barnett 0001, Madan Musuvathi, Todd Mytkowicz, Benjamin G. Zorn |
SOSP | 6 |
| 2018 | ExceLint: automatically finding spreadsheet formula errorsabstractSpreadsheets are one of the most widely used programming environments, and are widely deployed in domains like finance where errors can have catastrophic consequences. We present a static analysis specifically designed to find spreadsheet formula errors. Our analysis directly leverages the rectangular character of spreadsheets. It uses an information-theoretic approach to identify formulas that are especially surprising disruptions to nearby rectangular regions. We present ExceLint, an implementation of our static analysis for Microsoft Excel. We demonstrate that ExceLint is fast and effective: across a corpus of 70 spreadsheets, ExceLint takes a median of 8 seconds per spreadsheet, and it significantly outperforms the state of the art analysis. Daniel W. Barowy, Emery D. Berger, Benjamin G. Zorn |
Proc. ACM Program. Lang. | 3 |
| 2016 | Kizzle: A Signature Compiler for Detecting Exploit KitsabstractIn recent years, the drive-by malware space has undergone significant consolidation. Today, the most common source of drive-by downloads are so-called exploit kits (EKs). This paper presents Kizzle, the first prevention technique specifically designed for finding exploit kits. Our analysis shows that while the JavaScript delivered by kits varies greatly, the unpacked code varies much less, due to the kits authors' code reuse between versions. Ironically, this well-regarded software engineering practice allows us to build a scalable and precise detector that is able to quickly respond to superficial but frequent changes in EKs. Kizzle is able to generate anti-virus signatures for detecting EKs, which compare favorably to manually created ones. Kizzle is highly responsive and can generate new signatures within hours. Our experiments show that Kizzle produces high-accuracy signatures. When evaluated over a four-week period, false-positive rates for Kizzle are under 0.03%, while the false-negative rates are under 5%. Ben Stock, Benjamin Livshits, Benjamin G. Zorn |
DSN | 3 |
| 2015 | FlashRelate: extracting relational data from semi-structured spreadsheets using examplesabstractWith hundreds of millions of users, spreadsheets are one of the most important end-user applications. Spreadsheets are easy to use and allow users great flexibility in storing data. This flexibility comes at a price: users often treat spreadsheets as a poor man's database, leading to creative solutions for storing high-dimensional data. The trouble arises when users need to answer queries with their data. Data manipulation tools make strong assumptions about data layouts and cannot read these ad-hoc databases. Converting data into the appropriate layout requires programming skills or a major investment in manual reformatting. The effect is that a vast amount of real-world data is "locked-in" to a proliferation of one-off formats. We introduce FlashRelate, a synthesis engine that lets ordinary users extract structured relational data from spreadsheets without programming. Instead, users extract data by supplying examples of output relational tuples. FlashRelate uses these examples to synthesize a program in Flare. Flare is a novel extraction language that extends regular expressions with geometric constructs. An interactive user interface on top of FlashRelate lets end users extract data by point-and-click. We demonstrate that correct Flare programs can be synthesized in seconds from a small set of examples for 43 real-world scenarios. Finally, our case study demonstrates FlashRelate's usefulness addressing the widespread problem of data trapped in corporate and government formats. Daniel W. Barowy, Sumit Gulwani, Ted Hart, Benjamin G. Zorn |
PLDI | 4 |
| 2015 | User Interaction Models for Disambiguation in Programming by ExampleabstractProgramming by Examples (PBE) has the potential to revolutionize end-user programming by enabling end users, most of whom are non-programmers, to create small scripts for automating repetitive tasks. However, examples, though often easy to provide, are an ambiguous specification of the user's intent. Because of that, a key impedance in adoption of PBE systems is the lack of user confidence in the correctness of the program that was synthesized by the system. We present two novel user interaction models that communicate actionable information to the user to help resolve ambiguity in the examples. One of these models allows the user to effectively navigate between the huge set of programs that are consistent with the examples provided by the user. The other model uses active learning to ask directed example-based questions to the user on the test input data over which the user intends to run the synthesized program. Our user studies show that each of these models significantly reduces the number of errors in the performed task without any difference in completion time. Moreover, both models are perceived as useful, and the proactive active-learning based model has a slightly higher preference regarding the users' confidence in the result. Mikaël Mayer, Gustavo Soares, Maxim Grechkin, Vu Le 0002, Mark Marron, Oleksandr Polozov, Rishabh Singh, Benjamin G. Zorn, Sumit Gulwani |
UIST | 8 |
| 2014 | Modular protections against non-control data attacksabstractThis paper introduces YARRA, a conservative extension to C to protect applications from non-control data attacks. YARRA programmers specify their data integrity requirements by declaring critical data types and ascribing these critical types to important data structures. YARRA guarantees that such critical data is only written through pointers with the given static type. Any attempt to write to critical data through a pointer with an invalid type (perhaps because of a buffer overrun) is detected dynamically. We formalize YARRA’s semantics and prove the soundness of a program logic designed for use with the language. A key contribution is to show that YARRA's semantics are strong enough to support sound local reasoning and the use of a frame rule, even across calls to unknown, unverified code. We evaluate a prototype implementation of a compiler and runtime system for YARRA by using it to harden four common server applications against known non-control data vulnerabilities. We show that YARRA successfully defends the applications against these attacks. In our initial experiments, we find that the performance impact of YARRA is small, provided the amount of critical data is small and the application is not compute intensive. Cole Schlesinger, Karthik Pattabiraman, Nikhil Swamy, David Walker 0001, Benjamin G. Zorn |
J. Comput. Secur. | 5 |
| 2012 | Hardware support for enforcing isolation in lock-based parallel programsabstractWhen lock-based parallel programs execute on conventional multi-core hardware, faulty software can cause hard-to-debug race conditions in critical sections that violate the contract between locks and their protected shared variables. This paper proposes new hardware support for enforcing isolation of critical section execution. It can detect and tolerate races, allowing programs to execute race-free. Our hardware scheme targets the existing large code base of locked-based parallel programs written in type unsafe languages such as C and C++. Our approach works directly on unmodified executables. An evaluation of 13 programs from the SPLASH2 and PARSEC suites shows that the cost of the additional hardware and the impact on the overall execution time is minimal for these applications. Our mechanism is complementary to hardware transactional memory in that it uses similar structures but focuses on enhancing the reliability of existing lock-based programs. Paruj Ratanaworabhan, Martin Burtscher, Darko Kirovski, Benjamin G. Zorn |
ICS | 4 |
| 2012 | Rozzle: De-cloaking Internet MalwareabstractJavaScript-based malware attacks have increased in recent years and currently represent a signicant threat to the use of desktop computers, smartphones, and tablets. While static and runtime methods for malware detection have been proposed in the literature, both on the client side, for just-in-time in-browser detection, as well as offline, crawler-based malware discovery, these approaches encounter the same fundamental limitation. Web-based malware tends to be environment-specific, targeting a particular browser, often attacking specic versions of installed plugins. This targeting occurs because the malware exploits vulnerabilities in specific plugins and fails otherwise. As a result, a fundamental limitation for detecting a piece of malware is that malware is triggered infrequently, only showing itself when the right environment is present. We observe that, using fingerprinting techniques that capture and exploit unique properties of browser configurations, almost all existing malware can be made virtually impssible for malware scanners to detect. This paper proposes Rozzle, a JavaScript multi-execution virtual machine, as a way to explore multiple execution paths within a single execution so that environment-specific malware will reveal itself. Using large-scale experiments, we show that Rozzle increases the detection rate for offline runtime detection by almost seven times. In addition, Rozzle triples the effectiveness of online runtime detection. We show that Rozzle incurs virtually no runtime overhead and allows us to replace multiple VMs running different browser configurations with a single Rozzle-enabled browser, reducing the hardware requirements, network bandwidth, and power consumption. Clemens Kolbitsch, Benjamin Livshits, Benjamin G. Zorn, Christian Seifert |
IEEE Symposium on Security and Privacy | 3 |
| 2012 | Efficient Runtime Detection and Toleration of Asymmetric RacesabstractWe introduce ToleRace, a runtime system that allows programs to detect and even tolerate asymmetric data races. Asymmetric races are race conditions where one thread correctly acquires and releases a lock for a shared variable while another thread improperly accesses the same variable. ToleRace provides approximate isolation in the critical sections of lock-based parallel programs by creating a local copy of each shared variable when entering a critical section, operating on the local copies, and propagating the appropriate copies upon leaving the critical section. We start by characterizing all possible interleavings that can cause races and precisely describe the effect of ToleRace in each case. Then, we study the theoretical aspects of an oracle that knows exactly what type of interleaving has occurred. Finally, we present software implementations of ToleRace and evaluate them on multithreaded applications from the SPLASH2 and PARSEC suites. Paruj Ratanaworabhan, Martin Burtscher, Darko Kirovski, Benjamin G. Zorn, Rahul Nagpal, Karthik Pattabiraman |
IEEE Trans. Computers | 4 |
| 2011 | Flikker: saving DRAM refresh-power through critical data partitioningabstractEnergy has become a first-class design constraint in computer systems. Memory is a significant contributor to total system power. This paper introduces Flikker, an application-level technique to reduce refresh power in DRAM memories. Flikker enables developers to specify critical and non-critical data in programs and the runtime system allocates this data in separate parts of memory. The portion of memory containing critical data is refreshed at the regular refresh-rate, while the portion containing non-critical data is refreshed at substantially lower rates. This partitioning saves energy at the cost of a modest increase in data corruption in the non-critical data. Flikker thus exposes and leverages an interesting trade-off between energy consumption and hardware correctness. We show that many applications are naturally tolerant to errors in the non-critical data, and in the vast majority of cases, the errors have little or no impact on the application's final outcome. We also find that Flikker can save between 20-25% of the power consumed by the memory sub-system in a mobile device, with negligible impact on application performance. Flikker is implemented almost entirely in software, and requires only modest changes to the hardware. Karthik Pattabiraman, Thomas Moscibroda, Benjamin G. Zorn |
ASPLOS | 4 |
| 2011 | Modular Protections against Non-control Data AttacksabstractThis paper introduces YARRA, a conservative extension to C to protect applications from non-control data attacks. YARRA programmers specify their data integrity requirements by declaring critical data types and ascribing these critical types to important data structures. YARRA guarantees that such critical data is only written through pointers with the given static type. Any attempt to write to critical data through a pointer with an invalid type (perhaps because of a buffer overrun) is detected dynamically. We formalize YARRA's semantics and prove the soundness of a program logic designed for use with the language. A key contribution is to show that YARRA's semantics are strong enough to support sound local reasoning and the use of a frame rule, even across calls to unknown, unverified code. We evaluate a prototype implementation of a compiler and runtime system for YARRA by using it to harden four common server applications against known non-control data vulnerabilities. We show that YARRA defends against these attacks with only a negligible impact on their end-to-end performance. Cole Schlesinger, Karthik Pattabiraman, Nikhil Swamy, David Walker 0001, Benjamin G. Zorn |
CSF | 5 |
| 2011 | JavaScript Errors in the Wild: An Empirical StudyabstractClient-side JavaScript is being widely used in popular web applications to improve functionality, increase responsiveness, and decrease load times. However, it is challenging to build reliable applications using JavaScript. This paper presents an empirical characterization of the error messages printed by JavaScript code in web applications, and attempts to understand their root causes. We find that JavaScript errors occur in production web applications, and that the errors fall into a small number of categories. We further find that both non-deterministic and deterministic errors occur in the applications, and that the speed of testing plays an important role in exposing errors. Finally, we study the correlations among the static and dynamic properties of the application and the frequency of errors in it in order to understand the root causes of the errors. Frolin S. Ocariza Jr., Karthik Pattabiraman, Benjamin G. Zorn |
ISSRE | 3 |
| 2011 | ZOZZLE: Fast and Precise In-Browser JavaScript Malware Detection
Charlie Curtsinger, Benjamin Livshits, Benjamin G. Zorn, Christian Seifert |
USENIX Security Symposium | 3 |
| 2010 | Performance is dead, long live performance!abstractIn a world of social networking, security attacks, and hot mobile phones, the importance of application performance appears to have dimin-ished. My own research agenda has shifted from looking at the performance of memory allocation to building runtime systems that are more resilient to data corruption and security attacks. In my talk, I will outline a number of areas where code-generation and runtime tech-niques can be successfully applied to areas for purposes other than performance, such as fault tolerance, reliability, and security. Along the way, I will consider such questions as "Does it really matter if this corruption was caused by a software or hardware error?" and "Is it okay to let a malicious person allocate arbitrary data on my heap?". Benjamin G. Zorn |
CGO | 1 |
| 2010 | DoDOM: Leveraging DOM Invariants for Web 2.0 Application Robustness TestingabstractWeb 2.0 applications are increasing in popularity. However, they are also prone to errors because of their dynamic nature. This paper presents DoDOM, an automated system for testing the robustness of Web 2.0 applications based on their Document Object Models (DOMs). DoDOM repeatedly executes the application under a trace of recorded user actions and observes the client-side behavior of the application in terms of its DOM structure. Based on the observations, DoDOM extracts a set of invariants on the web application's DOM structure. We show that invariants exist for real applications and can be learned within a reasonable number of executions. We further use fault-injection experiments to demonstrate the uses of the invariants in detecting errors in web applications. The invariants are found to provide high coverage in detecting errors that impact the DOM, with a low rate of false positives. Karthik Pattabiraman, Benjamin G. Zorn |
ISSRE | 2 |
| 2009 | Efficiently and precisely locating memory leaks and bloatabstractInefficient use of memory, including leaks and bloat, remain a significant challenge for C and C++ developers. Applications with these problems become slower over time as their working set grows and can become unresponsive. At the same time, memory leaks and bloat remain notoriously difficult to debug, and comprise a large number of reported bugs in mature applications. Previous tools for diagnosing memory inefficiencies-based on garbage collection, binary rewriting, or code sampling-impose high overheads (up to 100X) or generate many false alarms. Gene Novark, Emery D. Berger, Benjamin G. Zorn |
PLDI | 3 |
| 2009 | Detecting and tolerating asymmetric racesabstractBecause data races represent a hard-to-manage class of errors in concurrent programs, numerous approaches to detect them have been proposed and evaluated. We specifically consider asymmetric races, a subclass of all race conditions, where a programmer’s thread correctly acquires and releases a lock for a given variable, while another thread causes a race by improperly accessing this variable. We introduce ToleRace, a runtime system that allows programs to either tolerate or detect asymmetric races based on local replication of shared state. ToleRace provides an approximation of atomicity in critical sections by creating local copies of shared variables when a critical section is entered and propagating the appropriate copy when the critical section is exited. We characterize the possible interleavings that can cause races and precisely describe the effect of ToleRace in each case. We study the theoretical aspects of an oracle that knows exactly what type of interleaving has occurred. Then, we present a software implementation of ToleRace on top of a dynamic instrumentation tool. We evaluate our implementation on multithreaded applications from the SPLASH2 and PARSEC suites and show that its overhead is acceptable, i.e., a factor of two on average. Paruj Ratanaworabhan, Martin Burtscher, Darko Kirovski, Benjamin G. Zorn, Rahul Nagpal, Karthik Pattabiraman |
PPoPP | 4 |
| 2009 | NOZZLE: A Defense Against Heap-spraying Code Injection Attacks
Paruj Ratanaworabhan, Benjamin Livshits, Benjamin G. Zorn |
USENIX Security Symposium | 3 |
| 2008 | Archipelago: trading address space for reliability and securityabstractMemory errors are a notorious source of security vulnerabilities that can lead to service interruptions, information leakage and unauthorized access. Because such errors are also difficult to debug, the absence of timely patches can leave users vulnerable to attack for long periods of time. A variety of approaches have been introduced to combat these errors, but these often incur large runtime overheads and generally abort on errors, threatening availability. Vitaliy B. Lvin, Gene Novark, Emery D. Berger, Benjamin G. Zorn |
ASPLOS | 4 |
| 2008 | Samurai: protecting critical data in unsafe languagesabstractPrograms written in type-unsafe languages such as C and C++ incur costly memory errors that result in corrupted data structures, program crashes, and incorrect results. We present a data-centric solution to memory corruption called critical memory, a memory model that allows programmers to identify and protect data that is critical for correct program execution. Critical memory defines operations to consistently read and update critical data, and ensures that other non-critical updates in the program will not corrupt it. We also present Samurai, a runtime system that implements critical memory in software. Samurai uses replication and forward error correction to provide probabilistic guarantees of critical memory semantics. Because Samurai does not modify memory operations on non-critical data, the majority of memory operations in programs run at full speed, and Samurai is compatible with third party libraries. Using both applications, including a Web server, and libraries (an STL list class and a memory allocator), we evaluate the performance overhead and fault tolerance that Samurai provides. We find that Samurai is a useful and practical approach for the majority of the applications and libraries considered. Karthik Pattabiraman, Vinod Grover, Benjamin G. Zorn |
EuroSys | 3 |
| 2007 | Exterminator: automatically correcting memory errors with high probabilityabstractPrograms written in C and C++ are susceptible to memory errors, including buffer overflows and dangling pointers. These errors, whichcan lead to crashes, erroneous execution, and security vulnerabilities, are notoriously costly to repair. Tracking down their location in the source code is difficult, even when the full memory state of the program is available. Once the errors are finally found, fixing them remains challenging: even for critical security-sensitive bugs, the average time between initial reports and the issuance of a patch is nearly one month. Gene Novark, Emery D. Berger, Benjamin G. Zorn |
PLDI | 3 |
| 2006 | DieHard: probabilistic memory safety for unsafe languagesabstractApplications written in unsafe languages like C and C++ are vulnerable to memory errors such as buffer overflows, dangling pointers, and reads of uninitialized data. Such errors can lead to program crashes, security vulnerabilities, and unpredictable behavior. We present DieHard, a runtime system that tolerates these errors while probabilistically maintaining soundness. DieHard uses randomization and replication to achieve probabilistic memory safety by approximating an infinite-sized heap. DieHard's memory manager randomizes the location of objects in a heap that is at least twice as large as required. This algorithm prevents heap corruption and provides a probabilistic guarantee of avoiding memory errors. For additional safety, DieHard can operate in a replicated mode where multiple replicas of the same application are run simultaneously. By initializing each replica with a different random seed and requiring agreement on output, the replicated version of Die-Hard increases the likelihood of correct execution because errors are unlikely to have the same effect across all replicas. We present analytical and experimental results that show DieHard's resilience to a wide range of memory errors, including a heap-based buffer overflow in an actual application. Emery D. Berger, Benjamin G. Zorn |
PLDI | 2 |
| 2002 | Reconsidering custom memory allocationabstractProgrammers hoping to achieve performance improvements often use custom memory allocators. This in-depth study examines eight applications that use custom allocators. Surprisingly, for six of these applications, a state-of-the-art general-purpose allocator (the Lea allocator) performs as well as or better than the custom allocators. The two exceptions use regions, which deliver higher performance (improvements of up to 44%). Regions also reduce programmer burden and eliminate a source of memory leaks. However, we show that the inability of programmers to free individual objects within regions can lead to a substantial increase in memory consumption. Worse, this limitation precludes the use of regions for common programming idioms, reducing their usefulness.We present a generalization of general-purpose and region-based allocators that we call reaps. Reaps are a combination of regions and heaps, providing a full range of region semantics with the addition of individual object deletion. We show that our implementation of reaps provides high performance, outperforming other allocators with region-like semantics. We then use a case study to demonstrate the space advantages and software engineering benefits of reaps in practice. Our results indicate that programmers needing fast regions should use reaps, and that most programmers considering custom allocators should instead use the Lea allocator. Emery D. Berger, Benjamin G. Zorn, Kathryn S. McKinley |
OOPSLA | 2 |
| 2002 | Hybrid Load-Value PredictorsabstractLoad instructions diminish processor performance in two ways. First, due to the continuously widening gap between CPU and memory speed, the relative latency of load instructions grows constantly and the slows program execution. Next, memory reads limit the available instruction-level parallelism as instructions that use the result of a load must wait for the memory access to complete before they can start executing. Load-value predictors alleviate both problems by allowing the CPU to speculatively continue processing without having to wait for load instructions, which can significantly improve the execution speed. In this paper, we investigate the performance of all hybrids that can be built out of a register value, a last value, a stride 2-delta, the last four values, and a finite context method predictor. Our analysis shows that hybrids can deliver 25 percent more speedup than the best single-component predictors. Our hybridization study identified the register value + stride 2-delta predictor as one of the best two-component hybrids. It matches or exceeds the speedup of two-component hybrids from the literature in spite of its substantially smaller and simpler design. Of all the predictors we studied, the register value + stride 2-delta + last four value hybrid performs best. Martin Burtscher, Benjamin G. Zorn |
IEEE Trans. Computers | 2 |
| 2001 | Composing High-Performance Memory Allocatorsabstract114-124 Emery D. Berger, Benjamin G. Zorn, Kathryn S. McKinley |
PLDI | 2 |
| 2001 | Implementing heap-object behavior prediction efficiently and effectivelyabstractAbstract Heap‐allocated objects play an important role in many modern programs. Various results have shown the overall performance of these programs can be improved by increasing the reference locality of heap‐allocated objects. In this paper we describe an approach that improves the virtual memory performance of allocation‐intensive C programs by predicting the reference behavior and lifetime of heap objects as they are allocated. We further describe an implementation of our prediction algorithm and evaluate its performance on real programs. As part of our implementation, we present a low‐overhead algorithm to minimize the cost of gathering run‐time stack information. Finally, we show that an implementation of these algorithms has little overhead and can improve the virtual memory and TLB performance of programs substantially. Copyright © 2001 John Wiley & Sons, Ltd. Matthew L. Seidl, Benjamin G. Zorn |
Softw. Pract. Exp. | 2 |
| 2000 | Hybridizing and Coalescing Load Value PredictorsabstractMost well-performing load value predictors are hybrids that combine multiple predictors into one. Such hybrids are often large. To reduce their size and to improve their performance, this paper presents two storage reduction techniques as well as a detailed analysis of the interaction between a hybrid's components. We found that state sharing and simple value compression can shrink the size of a predictor by a factor of two without compromising the performance. Our component analysis revealed that combining well-performing predictors does not always yield a good hybrid, whereas sometimes a poor predictor can make an excellent complement to another predictor in a hybrid. Performance evaluations using a cycle-accurate simulator running SPECint95 show that hybridizing can improve non-hybrids by thirty to fifty percent over a wide range of sizes. With fifteen kilobytes of state, our coalesced-hybrid yields a harmonic mean speedup of twelve and fifteen percent with a re-fetch and a re-execute mis-prediction recovery mechanism, respectively, which is higher than the speedup of other predictors we evaluate, some of which are six times larger. Martin Burtscher, Benjamin G. Zorn |
ICCD | 2 |
| 2000 | Designing a Trace Format for Heap Allocation EventsabstractDynamic storage allocation continues to play an important role in the performance and correctness of systems ranging from user productivity software to high-performance servers. While algorithms for dynamic storage allocation have been studied for decades, much of the literature is based on measuring the performance of benchmark programs unrepresentative of many important allocation-intensive workloads. Furthermore, to date no standard has emerged or been proposed for publishing and exchanging representative allocation workloads. In this paper, we describe a preliminary design of a trace format for such workloads and investigate its e#ectiveness at representing large allocation traces. Our proposal allows for a flexible encoding of information in the trace to achieve greater compression. We evaluate our preliminary design in two dimensions. First, we measure how e#ective these encodings are at reducing trace size. Second we consider how a meta-level specification language could be used... Trishul M. Chilimbi, Richard E. Jones, Benjamin G. Zorn |
ISMM | 3 |
| 2000 | An infrastructure for generating and sharing experimental workloads for persistent object systemsabstractPerformance evaluation of persistent object system implementations requires the use and evaluation of experimental workloads. Such workloads include a schema describing how the data are related, and application behaviors that capture how the data are manipulated over time. In this paper, we describe an infrastructure for generating and sharing experimental workloads to be used in evaluating the performance of persistent object system implementations. The infrastructure consists of a toolkit that aids the analyst in modeling and instrumenting experimental workloads, and a trace format that allows the analyst to easily reuse and share the workloads. Our infrastructure provides the following benefits: the process of building new experiments for analysis is made easier; experiments to evaluate the performance of implementations can be conducted and reproduced with less effort; and pertinent information can be gathered in a cost-effective manner. We describe the two major components of this infrastructure, the trace format and the toolkit. We also describe our experiences using these components to model, instrument, and experiment with the OO7 benchmark. Copyright © 2000 John Wiley & Sons, Ltd. Thorna O. Humphries, Artur Klauser, Alexander L. Wolf, Benjamin G. Zorn |
Softw. Pract. Exp. | 4 |
| 1998 | Overlapping Execution with Transfer Using Non-Strict Execution for Mobile ProgramsabstractIn order to execute a program on a remote computer, it mustfirst be transferred over a network. This transmission incurs the over-head of network latency before execution can begin. This latency can vary greatly depending upon the size of the program., where it is located (e.g., on a local network or across the Internet), and the bandwidth available to retrieve the program. Existing technologies, like Java, require that a jle be filly transferred before it can start executing. For large files and low bandwidth lines, this delay can be significant.In this paper we propose and evaluate a non-strict form of mobile program execution. A mobile program is any program that is transferred to a different machine and executed. The goal of nonstrict execution is to overlap execution with transfer; allowing the program to start executing as soon as possible. Non-strict execution allows a procedure in the program to start executing as soon as its code and data have transferred. To enable this technology, we examine several techniques for rearranging procedures and reorganizing the data inside Java classjles. Our results show that nonstrict execution decreases the initial transfer delay between 31% and 56% on average, with an average reduction in overall execution time between 25% and 40%. Chandra Krintz, Brad Calder, Han Bok Lee, Benjamin G. Zorn |
ASPLOS | 4 |
| 1998 | Segregating Heap Objects by Reference Behavior and LifetimeabstractDynamic storage allocation has become increasingly important in many applications, in part due to the use of the object-oriented paradigm. At the same time, processor speeds are increasing faster than memory speeds and programs are increasing in size faster than memories. In this paper, we investigate efforts to predict heap object reference and lifetime behavior at the time objects are allocated. Our approach uses profile-based optimization, and considers a variety of different information sources present at the time of object allocation to predict the object's reference frequency and lifetime. Our results, based on measurements of six allocation intensive programs, show that program references to heap objects are highly predictable and that our prediction methods can successfully predict the behavior of these heap objects. We show that our methods can decrease the page fault rate of the programs measured, sometimes dramatically, in cases where the physical memory available to the program is constrained. Matthew L. Seidl, Benjamin G. Zorn |
ASPLOS | 2 |
| 1998 | A Highly Effective Partition Selection Policy for Object Database Garbage CollectionabstractWe investigate methods to improve the performance of algorithms for automatic storage reclamation of object databases. These algorithms are based on a technique called partitioned garbage collection, in which a subset of the entire database is collected independently of the rest. We evaluate how different application, database system, and garbage collection implementation parameters affect the performance of garbage collection in object database systems. We focus specifically on investigating the policy that is used to select which partition in the database should be collected. Three of the policies that we investigate are based on the intuition that the values of overwritten pointers provide good hints about where to find garbage. A fourth policy investigated chooses the partition with the greatest presence in the I/O buffer. Using simulations based on a synthetic database, we show that one of our policies requires less I/O to collect more garbage than any existing implementable policy. Furthermore, that policy performs close to a locally optimal policy over a wide range of simulation parameters, including database size, collection rate, and database connectivity. We also show what impact these simulation parameters have on application performance and investigate the expected costs and benefits of garbage collection in such systems. Jonathan E. Cook 0001, Alexander L. Wolf, Benjamin G. Zorn |
IEEE Trans. Knowl. Data Eng. | 3 |
| 1997 | Evidence-Based Static Branch Prediction Using Machine LearningabstractCorrectly predicting the direction that branches will take is increasingly important in today's wide-issue computer architectures. The name program-based branch prediction is given to static branch prediction techniques that base their prediction on a program's structure. In this article, we investigate a new approach to program-based branch prediction that uses a body of existing programs to predict the branch behavior in a new program. We call this approach to program-based branch prediction evidence-based static prediction , or ESP. The main idea of ESP is that the behavior of a corpus of programs can be used to infer the behavior of new programs. In this article, we use neural networks and decision trees to map static features associated with each branch to a prediction that the branch will be taken. ESP shows significant advantages over other prediction mechanisms. Specifically, it is a program-based technique; it is effective across a range of programming languages and programming styles; and it does not rely on the use of expert-defined heuristics. In this article, we describe the application of ESP to the problem of static branch prediction and compare our results to existing program-based branch predictors. We also investigate the applicability of ESP across computer architectures, programming languages, compilers, and run-time systems. We provide results showing how sensitive ESP is to the number and type of static features and programs included in the ESP training sets, and we compare the efficacy of static branch prediction for subroutine libraries. Averaging over a body of 43 C and Fortran programs, ESP branch prediction results in a miss rate of 20%, as compared with the 25% miss rate obtained using the best existing program-based heuristics. Brad Calder, Dirk Grunwald, Michael P. Jones, Donald C. Lindsay, James H. Martin, Michael C. Mozer, Benjamin G. Zorn |
ACM Trans. Program. Lang. Syst. | 7 |
| 1996 | Semi-automatic, Self-adaptive Control of Garbage Collection Rates in Object DatabasesabstractA fundamental problem in automating object database storage reclamation is determining how often to perform garbage collection. We show that the choice of collection rate can have a significant impact on application performance and that the "best" rate depends on the dynamic behavior of the application, tempered by the particular performance goals of the user. We describe two semi-automatic, selfadaptive policies for controlling collection rate that we have developed to address the problem. Using tracedriven simulations, we evaluate the performance of the policies on a test database application that demonstrates two distinct reclustering behaviors. Our results show that the policies are effective at achieving user-specified levels of I/O operations and database garbage percentage. We also investigate the sensitivity of the policies over a range of object connectivities. The evaluation demonstrates that semi-automatic, self-adaptive policies are a practical means for flexibly controllin... Jonathan E. Cook 0001, Artur Klauser, Alexander L. Wolf, Benjamin G. Zorn |
SIGMOD Conference | 4 |
| 1995 | Garbage Collection Using a Dynamic Threatening BoundaryabstractGenerational techniques have been very successful in reducing the impact of garbage collection algorithms upon the performance of programs. However, all generational algorithms occasionally promote objects that later become garbage, resulting in an accumulation of garbage in older generations. Reclaiming this tenured garbage without resorting to collecting the entire heap is a difficult problem. In this paper, we describe a mechanism that extends existing generational collection algorithms by allowing them to reclaim tenured garbage more effectively. In particular, our dynamic threatening boundary mechanism divides memory into two spaces, one for shortlived, and another for long-lived objects. Unlike previous work, our collection mechanism can dynamically adjust the boundary between these two spaces either forward or backward in time, essentially allowing data to become untenured. We describe an implementation of the dynamic threatening boundary mechanism and quantify its associated costs. We also describe a policy for setting the threatening boundary and evaluate its performance relative to existing generational collection algorithms. Our results show that a policy that uses the dynamic threatening boundary mechanism is effective at reclaiming tenured garbage. David A. Barrett, Benjamin G. Zorn |
PLDI | 2 |
| 1995 | Corpus-Based Static Branch PredictionabstractCorrectly predicting the direction that branches will take is increasingly important in today's wide-issue computer architectures. The name program-based branch prediction is given to static branch prediction techniques that base their prediction on a program's structure. In this paper, we investigate a new approach to program-based branch prediction that uses a body of existing programs to predict the branch behavior in a new program. We call this approach to program-based branch prediction, evidence-based static prediction, or ESP. The main idea of ESP is that the behavior of a corpus of programs can be used to infer the behavior of new programs. In this paper, we use a neural network to map static features associated with each branch to the probability that the branch will be taken. ESP shows significant advantages over other prediction mechanisms. Specifically, it is a program-based technique, it is effective across a range of programming languages and programming styles, and it does not rely on the use of expert-defined heuristics. Brad Calder, Dirk Grunwald, Donald C. Lindsay, James H. Martin, Michael C. Mozer, Benjamin G. Zorn |
PLDI | 6 |
| 1995 | Numerical Analysis Using Nonprocedural ParadigmsabstractThis article presents a survey on the innovative features of a handful of languages that offer new features that can be valuable in numerical analysis, and a survey of the pros and cons of the languages with regards to work in numerical analysis. Language features such as polymorphism, first-class functions, and object-oriented programming offer improved writability, readability, reliability, and maintenance of computer software. The article discusses language features and uses, and includes a comparison of current implementations. It is intended both as an introduction to nonprocedural language features for persons working in numerical mathematics and as an exploration of some of the language requirements of numerical mathematics for persons working in language development. The article discusses C++, Fortran 77, Fortran 90, Haskell, Lisp/CLOS, Modula-3, Sather, and SML with respect to a variety of numerical analysis tasks: interpolation, optimization, array access and update, iteration, recursion, random number generation, and Gaussian elimination on sparse matrices. Stephen J. Sullivan, Benjamin G. Zorn |
ACM Trans. Math. Softw. | 2 |
| 1994 | Partition Selection Policies in Object Database Garbage CollectionabstractThe automatic reclamation of storage for unreferenced objects is very important in object databases. Existing language system algorithms for automatic storage reclamation have been shown to be inappropriate. In this paper, we investigate methods to improve the performance of algorithms for automatic for automatic storage reclamation of object databases. These algorithms are based on a technique called partitioned garbage collection, in which a subset of the entire database is collected independently of the rest. Specifically, we investigate the policy that is used to select what partition in the database should be collected. The policies that we propose and investigate are based on the intuition that the values of overwritten pointers provide good hints about where to find garbage. Using trace-driven simulation, we show that one of our policies requires less I/O to collect more garbage than any existing implementable policy and performs close to a near-optimal policy over a wide range of database sizes and object connectivities. Jonathan E. Cook 0001, Alexander L. Wolf, Benjamin G. Zorn |
SIGMOD Conference | 3 |
| 1994 | Using the Programming Walkthrough to Aid in Programming Language DesignabstractAbstract The programming walkthrough is a method for assessing how easy or hard it will be for users to write programs in a programming language. It is intended to enable language designers to identify problems early in design and to help them choose among alternative designs. We describe the method and present experience in applying it in four language design projects. Results indicate that the method is a useful supplement to existing design approaches. Brigham Bell, Wayne Citrin, Clayton H. Lewis, John Rieman, Robert P. Weaver, Nick Wilde, Benjamin G. Zorn |
Softw. Pract. Exp. | 7 |
| 1994 | Memory Allocation Costs in Large C and C++ ProgramsabstractAbstract Dynamic storage allocation is an important part of a large class of computer programs written in C and C + +. High‐performance algorithms for dynamic storage allocation have been, and will continue to be, of considerable interest. This paper presents detailed measurements of the cost of dynamic storage allocation in 11 diverse C and C + + programs using five very different dynamic storage allocation implementations, including a conservative garbage collection algorithm. Four of the allocator implementations measured are publicly available on the Internet. A number of the programs used in these measurements are also available on the Internet to facilitate further research in dynamic storage allocation. Finally, the data presented in this paper is an abbreviated version of more extensive statistics that are also publicly available on the Internet. David Detlefs, Al Dosser, Benjamin G. Zorn |
Softw. Pract. Exp. | 3 |
| 1994 | A Comparison of Object-oriented Programming in Four Modern LanguagesabstractAbstract Object‐oriented programming has become a widely used, important programming paradigm that is supported in many different languages. C++ has become the most widely used object‐oriented language and many C++ programmers are unfamiliar with the different approaches taken by other languages in the paradigm. This paper is intended as an introduction to a broad range of ideas in object‐oriented programming. Specifically, we introduce four modern programming languages that support object‐oriented programming (Oberon‐2, Modula‐3, Sather and Self), and show how a simple application is coded in these languages. While each of these programming languages provide support for inheritance, dynamic dispatch, code reuse, and information hiding, they do so in very different ways and with varying levels of efficiency and simplicity. The use of a simple example, based on a common programming problem, facilitates our comparison. We have coded the application in all of these languages, including C++, and we compare the compile times, object code sizes, and run times of the available implementations. Implementations of all the languages compared and all of the programs we measure are available on the Internet. Ultimately, our goal is to encourage and facilitate programmers in understanding and exploring a variety of object‐oriented programming languages. Robert Henderson, Benjamin G. Zorn |
Softw. Pract. Exp. | 2 |
| 1993 | Using Lifetime Predictors to Improve Memory Allocation PerformanceabstractDynamic storage allocation is used heavily in many application areas including interpreters, simulators, optimizers, and translators. We describe research that can improve all aspects of the performance of dynamic storage allocation by predicting the lifetimes of short-lived objects when they are allocated. Using five significant, allocation-intensive C programs, we show that a great fraction of all bytes allocated are short-lived (> 90% in all cases). Furthermore, we describe an algorithm for liftetime prediction that accurately predicts the lifetimes of 42–99% of all objects allocated. We describe and simulate a storage allocator that takes adavantage of lifetime prediction of short-lived objects and show that it can significantly improve a program's memory overhead and reference locality, and even, at times, improve CPU performance as well. David A. Barrett, Benjamin G. Zorn |
PLDI | 2 |
| 1993 | Improving the Cache Locality of Memory AllocationabstractThe allocation and disposal of memory is a ubiquitous operation in most programs. Rarely do programmers concern themselves with details of memory allocators; most assume that memory allocators provided by the system perform well. This paper presents a performance evaluation of the reference locality of dynamic storage allocation algorithms based on trace-driven simualtion of five large allocation-intensive C programs. In this paper, we show how the design of a memory allocator can significantly affect the reference locality for various applications. Our measurements show that poor locality in sequential-fit allocation algorithms reduces program performance, both by increasing paging and cache miss rates. While increased paging can be debilitating on any architecture, cache misses rates are also important for modern computer architectures. We show that algorithms attempting to be space-efficient by coalescing adjacent free objects show poor reference locality, possibly negating the benefits of space efficiency. At the other extreme, algorithms can expend considerable effort to increase reference locality yet gain little in total execution performance. Our measurements suggest an allocator design that is both very fast and has good locality of reference. Dirk Grunwald, Benjamin G. Zorn, Robert Henderson |
PLDI | 2 |
| 1993 | CustoMalloc: Efficient Synthesized Memory AllocatorsabstractAbstract The allocation and disposal of memory is a ubiquitous operation in most programs. Rarely do programmers concern themselves with details of memory allocators; most assume that memory allocators provided by the system perform well. Yet, in some applications, programmers use domain‐specific knowledge in an attempt to improve the speed or memory utilization of memory allocators. In this paper, we describe a program (CustoMalloc) that synthesizes a memory allocator customized for a specific application. Our experiments show that the synthesized allocators are uniformly faster and more space efficient than the Berkeley UNIX allocator. Constructing a custom allocator requires little programmer effort, usually taking only a few minutes. Experience has shown that the synthesized allocators are not overly sensitive to properties of input sets and the resulting allocators are superior even to domain‐specific allocators designed by programmers. Measurements show that synthesized allocators are from two to ten times faster than widely‐used allocators. Dirk Grunwald, Benjamin G. Zorn |
Softw. Pract. Exp. | 2 |
| 1993 | The Measured Cost of Conservative Garbage CollectionabstractAbstract Because dynamic memory management is an important part of a large class of computer programs, high‐performance algorithms for dynamic memory management have been, and will continue to be, of considerable interest. Experience indicates that for many programs, dynamic storage allocation is so important that programmers feel compelled to write and use their own domain‐specific allocators to avoid the overhead of system libraries. As an alternative to explicit storage management techniques, conservative garbage collection has been suggested as an important algorithm for dynamic storage management in C programs. In this paper, I evaluate the costs of different dynamic storage management algorithms, including domain‐specific allocators, widely‐used general‐purpose allocators, and a publicly available conservative garbage collection algorithm. Surprisingly, I find that programmer enhancements often have little effect on program performance. I also find that the true cost of conservative garbage collection is not the CPU overhead, but the memory system overhead of the algorithm. I conclude that conservative garbage collection is a promising alternative to explicit storage management and that the performance of conservative collection is likely to improve in the future. C programmers should now seriously consider using conservative garbage collection instead of explicitly calling free in programs they write. Benjamin G. Zorn |
Softw. Pract. Exp. | 1 |
| 1986 | Evaluation of the SPUR Lisp ArchitectureabstractThe SPUR microprocessor has a 40-bit tagged architecture designed to improve its performance for Lisp programs. Although SPUR includes just a small set of enhancements to the Berkeley RISC-II architecture, simulation results show that with a 150-ns cycle time SPUR will run Common Lisp programs at least as fast as a Symbolies 3600 or a DEC VAX 8600. This paper explains SPUR's instruction set architecture and provides measurements of how certain components of the architecture perform. George S. Taylor, Paul N. Hilfinger, James R. Larus, David A. Patterson 0001, Benjamin G. Zorn |
ISCA | 5 |