Skip to content
Snippets Groups Projects
  1. May 13, 2004
    • Eelco Dolstra's avatar
      * Set the executable bit. · 2fa33049
      Eelco Dolstra authored
      2fa33049
    • Eelco Dolstra's avatar
      * Load balancing. `build-remote.pl' will only execute up to a · 25db6224
      Eelco Dolstra authored
        per-machine maximum number of parallel jobs on a remote machine.
      25db6224
    • Eelco Dolstra's avatar
      * Perform all tests. · 3426d195
      Eelco Dolstra authored
      3426d195
    • Eelco Dolstra's avatar
      * The build hooks used to implement distributed builds can now be run · a8306cb9
      Eelco Dolstra authored
        in parallel.  Hooks are more efficient: locks on output paths are
        only acquired when the hook says that it is willing to accept a
        build job.  Hooks now work in two phases.  First, they should first
        tell Nix whether they are willing to accept a job.  Nix guarantuees
        that no two hooks will ever be in the first phase at the same time
        (this simplifies the implementation of hooks, since they don't have
        to perform locking (?)).  Second, if they accept a job, they are
        then responsible for building it (on the remote system), and copying
        the result back.  These can be run in parallel with other hooks and
        locally executed jobs.
      
        The implementation is a bit messy right now, though.  
      
      * The directory `distributed' shows a (hacky) example of a hook that
        distributes build jobs over a set of machines listed in a
        configuration file.
        
      a8306cb9
  2. May 12, 2004
  3. May 11, 2004
    • Eelco Dolstra's avatar
      * True parallel builds. Nix can now run as many build jobs in · c8d3882c
      Eelco Dolstra authored
        parallel as possible (similar to GNU Make's `-j' switch).  This is
        useful on SMP systems, but it is especially useful for doing builds
        on multiple machines.  The idea is that a large derivation is
        initiated on one master machine, which then distributes
        sub-derivations to any number of slave machines.  This should not
        happen synchronously or in lock-step, so the master must be capable
        of dealing with multiple parallel build jobs.  We now have the
        infrastructure to support this.
      
        TODO: substitutes are currently broken.
      c8d3882c
    • Eelco Dolstra's avatar
      * Ignore interrupt signals while handling an exception. · aea43650
      Eelco Dolstra authored
      * Ignore EINTR in reads and writes.
      aea43650
  4. May 04, 2004
  5. Apr 26, 2004
  6. Apr 23, 2004
  7. Apr 22, 2004
  8. Apr 21, 2004
  9. Apr 15, 2004
  10. Apr 14, 2004
  11. Apr 08, 2004
  12. Apr 06, 2004
  13. Apr 05, 2004
    • Eelco Dolstra's avatar
      * When something goes wrong in the evaluation of a Nix expression, · 59b94ee1
      Eelco Dolstra authored
        print a nice backtrace of the stack, rather than vomiting a gigantic
        (and useless) aterm on the screen.  Example:
      
          error: while evaluating file `.../pkgs/system/test.nix':
          while evaluating attribute `subversion' at `.../pkgs/system/all-packages-generic.nix', line 533:
          while evaluating function at `.../pkgs/applications/version-management/subversion/default.nix', line 1:
          assertion failed at `.../pkgs/applications/version-management/subversion/default.nix', line 13
      
        Since the Nix expression language is lazy, the trace may be
        misleading.  The purpose is to provide a hint as to the location of
        the problem.    
        
      59b94ee1
  14. Apr 02, 2004
  15. Mar 30, 2004
    • Eelco Dolstra's avatar
      * The recent change in nixpkgs of calling `stdenv.mkDerivation' · c4ac2a16
      Eelco Dolstra authored
        instead of `derivation' triggered a huge slowdown in the Nix
        expression evaluator.  Total execution time of `nix-env -qa' went up
        by a factor of 60 or so.
      
        This scalability problem was caused by expressions such as
      
          (x: y: ... x ...) a b
      
        where `a' is a large term (say, the one in
        `all-packages-generic.nix').  Then the first beta-reduction would
        produce
      
          (y: ... a ...) b
      
        by substituting `a' for `x'.  The second beta-reduction would then
        substitute `b' for `y' into the body `... a ...', which is a large
        term due to `a', and thus causes a large traversal to be performed
        by substitute() in the second reduction.  This is however entirely
        redundant, since `a' cannot contain free variables (since we never
        substitute below a weak head normal form).
      
        The solution is to wrap substituted terms into a `Closed'
        constructor, i.e.,
      
          subst(subs, Var(x)) = Closed(e) iff subs[x] = e
      
        have substitution not descent into closed terms,
      
          subst(subs, Closed(x)) = Closed(x)
      
        and otherwise ignore them for evaluation,
      
          eval(Closed(x)) = eval(x).
      
      * Fix a typo that caused incorrect substitutions to be performed in
        simple lambdas, e.g., `(x: x: x) a' would reduce to `(x: a)'.
          
      c4ac2a16
  16. Mar 29, 2004
Loading