From e2aa65868e0a016de29962802263b584013298d1 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Thu, 26 Sep 2024 08:49:44 +0530 Subject: readme: init --- README.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 README.md 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 Use evanix build pipeline. + -l, --check_cache-status Perform cache locality check. + -c, --close-unused-fd Close stderr on exec. + -e, --statistics Path to time statistics database. + -k, --solver sjf|conformity|highs Solver to use. +``` -- cgit v1.2.3