[SYSTEMDS-208] Fix buffer pool leak and cleanup robustness

This patch fixes a buffer pool eviction leak, where each calls to mice
added 3 uncleaned objects to the buffer pool and thus eventually ran
into severe eviction (up to 'no space left on device').

A closer investigation revealed missing rmVar instructions in complex
control flow programs. Specifically, we now reintroduced the notion of
exit instructions for while/for/parfor/if and derive and add a packed
rmVar instruction if necessary (based on livein and liveout sets).

To make the mentioned exit instructions more effective, this patch also
introduces a best-effort cleanup of liveout variable sets, which are too
conservative for nested control flow. However, this cleanup is only done
where it is guaranteed to be safe, i.e., the top-level of statement
blocks at the main program and individual functions.

Finally, the memory leak was due to creatvar instructions overwriting
existing objects in the symbol table without proper cleanup. This is a
consequence of missing rmvar instructions, but in order to guard against
all cases, we now check this condition and perform a proper cleanup
which guards against such unknown leaks.
14 files changed
tree: b7e4dd48f11837581533a9412c120e3049daf683
  1. .github/
  2. bin/
  3. conf/
  4. dev/
  5. docker/
  6. docs/
  7. scripts/
  8. src/
  9. .gitattributes
  10. .gitignore
  11. CONTRIBUTING.md
  12. LICENSE
  13. NOTICE
  14. pom.xml
  15. README.md
README.md

SystemDS

Overview: SystemDS is a versatile system for the end-to-end data science lifecycle from data integration, cleaning, and feature engineering, over efficient, local and distributed ML model training, to deployment and serving. To this end, we aim to provide a stack of declarative languages with R-like syntax for (1) the different tasks of the data-science lifecycle, and (2) users with different expertise. These high-level scripts are compiled into hybrid execution plans of local, in-memory CPU and GPU operations, as well as distributed operations on Apache Spark. In contrast to existing systems - that either provide homogeneous tensors or 2D Datasets - and in order to serve the entire data science lifecycle, the underlying data model are DataTensors, i.e., tensors (multi-dimensional arrays) whose first dimension may have a heterogeneous and nested schema.

Quick Start Install, Quick Start and Hello World

Documentation: SystemDS Documentation

Python Documentation Python SystemDS Documentation

Status and Build: SystemDS is still in pre-alpha status. The original code base was forked from Apache SystemML 1.2 in September 2018. We will continue to support linear algebra programs over matrices, while replacing the underlying data model and compiler, as well as substantially extending the supported functionalities. Until the first release, you can build your own snapshot via Apache Maven: mvn -DskipTests clean package.

License Build Documentation Component Test Application Test Function Test Python Test Federated Python Test