aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsinanmohd <sinan@sinanmohd.com>2024-09-26 08:49:44 +0530
committersinanmohd <sinan@sinanmohd.com>2024-09-26 08:49:44 +0530
commite2aa65868e0a016de29962802263b584013298d1 (patch)
treecfd8cef591850d7b1bd28bfb998519341c9c2f35
parent9722f89bdfebc5920255f586b71c7a9d26cc4afa (diff)
readme: initHEADmaster
-rw-r--r--README.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..be1e0a6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,36 @@
+# evanix
+Evanix is a Nix build scheduler designed to maximize throughput given limited resources. The input is a graph G=(V,E), where each vertex v represents a Nix package with a weight w(v) and a profit p(v). The profit for a transitive dependency is 0, while it is 1 for packages that we intend to build. Our objective is to identify a set of vertices that maximizes the profit or the number of packages built. It is crucial that a vertex or package can only be selected if all of its dependencies are also selected. An edge in the graph represents a dependency, with the indegree of a vertex denoting the number of packages that depend on it and the outdegree representing the number of dependencies of the package.
+
+# todo
+
+- [x] Utilize mixed-integer programming to approximate the most optimal solution efficiently, using the HiGHS solver.
+- [x] Maximize the number of requested packages produced within a specified budget, with a maximum constraint of n builds.
+- [x] Maximize the number of requested packages produced within a specified budget, constrained by a maximum time limit of t.
+- [x] Utilize data from Hydra to estimate the build times for derivations.
+- [x] Develop a linear regression model to estimate build times for derivations when such data is unavailable in Hydra.
+- [x] Implement unit tests using Meson’s built-in testing framework, and integration tests utilizing the NixOS integration testing framework.
+- [x] Implement a pipelined architecture to initiate the building of derivations immediately following their evaluation.
+- [x] Enhance the linear regression model and conduct additional tests to validate its performance and accuracy.
+- [x] Integrate the linear regression model with evanix
+- [x] 1.0 refactor
+
+# options
+
+```console
+$ nix run github:sinanmohd/evanix -- --help
+Usage: evanix [options] expr
+
+ -h, --help Show help message and quit.
+ -f, --flake Build a flake.
+ -d, --dry-run Show what derivations would be built.
+ -s, --system System to build for.
+ -m, --max-builds Max number of builds.
+ -t, --max-time Max time available in seconds.
+ -b, --break-evanix Enable experimental features.
+ -r, --solver-report Print solver report.
+ -p, --pipelined <bool> Use evanix build pipeline.
+ -l, --check_cache-status <bool> Perform cache locality check.
+ -c, --close-unused-fd <bool> Close stderr on exec.
+ -e, --statistics <path> Path to time statistics database.
+ -k, --solver sjf|conformity|highs Solver to use.
+```