-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
36 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. | ||
``` |