diff mbox series

[bug#53057] gnu: Add stress-ng.

Message ID 20220106180636.31164-1-me@tobias.gr
State Accepted
Headers show
Series [bug#53057] gnu: Add stress-ng. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Tobias Geerinckx-Rice Jan. 6, 2022, 6:06 p.m. UTC
* gnu/packages/admin.scm (stress-ng): New public variable.
---
 gnu/packages/admin.scm | 67 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

Comments

Maxim Cournoyer Jan. 7, 2022, 4:39 a.m. UTC | #1
Hi Tobias,

How timely! :-)

Tobias Geerinckx-Rice <me@tobias.gr> writes:

> * gnu/packages/admin.scm (stress-ng): New public variable.
> ---
>  gnu/packages/admin.scm | 67 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 67 insertions(+)
>
> diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
> index d45857150f..6e180ec80a 100644
> --- a/gnu/packages/admin.scm
> +++ b/gnu/packages/admin.scm
> @@ -2260,6 +2260,73 @@ (define-public stress
>  system is under heavy load.")
>      (license license:gpl2+)))
>
> +(define-public stress-ng
> +  (package
> +    (name "stress-ng")
> +    (version "0.13.10")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/ColinIanKing/stress-ng")
> +             (commit (string-append "V" version))))
> +       (file-name (git-file-name name version))
> +       (sha256
> +        (base32 "1z9vjn2131iv3pwrh04z6r5ygi1qgad5bi3jhghcvc3v1b4k5ran"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:make-flags
> +           #~(list (string-append "CC=" #$(cc-for-target))
> +                   (string-append "BINDIR=" #$output "/bin")
> +                   (string-append "MANDIR=" #$output "/share/man")
> +                   (string-append "JOBDIR=" #$output
> +                                  "/share/stress-ng/example-jobs")
> +                   (string-append "BASHDIR=" #$output
> +                                  "/share/bash-completion/completions"))
> +           #:test-target "lite-test"
> +           #:phases
> +           #~(modify-phases %standard-phases
> +               (delete 'configure)      ; no configure script
> +               (add-after 'check 'check-a-little-harder
> +                 ;; XXX Guix supports only one #:test-target.  Run more tests.
> +                 (lambda* (#:key tests? #:allow-other-keys)
> +                   (when tests?
> +                     (substitute* "debian/tests/fast-test-all"
> +                       (("EXCLUDE=\"" exclude=)
> +                        (string-append exclude=
> +                                       ;; Fails if host kernel denies ptracing.
> +                                       "ptrace ")))
> +                     (invoke "make" "fast-test-all"
> +                             "-j" (number->string (parallel-job-count)))))))))

This looks good and works good too!  My only comment is that this should
honor parallel-tests?.  Reusing the check phase but overriding the
test-target argument should do it:

modified   gnu/packages/admin.scm
@@ -2289,15 +2289,15 @@ (define-public stress-ng
                (delete 'configure)      ; no configure script
                (add-after 'check 'check-a-little-harder
                  ;; XXX Guix supports only one #:test-target.  Run more tests.
-                 (lambda* (#:key tests? #:allow-other-keys)
+                 (lambda* (#:key tests? #:allow-other-keys #:rest args)
                    (when tests?
                      (substitute* "debian/tests/fast-test-all"
                        (("EXCLUDE=\"" exclude=)
                         (string-append exclude=
                                        ;; Fails if host kernel denies ptracing.
-                                       "ptrace ")))
-                     (invoke "make" "fast-test-all"
-                             "-j" (number->string (parallel-job-count)))))))))
+                                       "ptrace "))))
+                   (apply (assoc-ref %standard-phases 'check)
+                          `(,@args #:test-target "fast-test-all")))))))
     (inputs
      (list keyutils
            kmod

Otherwise, LGTM!  Feel free to push with such adjustment.

Thank you!

Maxim
Tobias Geerinckx-Rice Jan. 7, 2022, 4:48 a.m. UTC | #2
Hi Maxim,

Maxim Cournoyer 写道:
> + (apply (assoc-ref %standard-phases 'check)

This is a trick I've forgotten before… sigh.  Thanks for pointing 
it out!

Pushed as 046322189b62981fca6baab4e758e6878eab0758.

Kind regards,

T G-R
diff mbox series

Patch

diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index d45857150f..6e180ec80a 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2260,6 +2260,73 @@  (define-public stress
 system is under heavy load.")
     (license license:gpl2+)))
 
+(define-public stress-ng
+  (package
+    (name "stress-ng")
+    (version "0.13.10")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ColinIanKing/stress-ng")
+             (commit (string-append "V" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1z9vjn2131iv3pwrh04z6r5ygi1qgad5bi3jhghcvc3v1b4k5ran"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "BINDIR=" #$output "/bin")
+                   (string-append "MANDIR=" #$output "/share/man")
+                   (string-append "JOBDIR=" #$output
+                                  "/share/stress-ng/example-jobs")
+                   (string-append "BASHDIR=" #$output
+                                  "/share/bash-completion/completions"))
+           #:test-target "lite-test"
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (add-after 'check 'check-a-little-harder
+                 ;; XXX Guix supports only one #:test-target.  Run more tests.
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (substitute* "debian/tests/fast-test-all"
+                       (("EXCLUDE=\"" exclude=)
+                        (string-append exclude=
+                                       ;; Fails if host kernel denies ptracing.
+                                       "ptrace ")))
+                     (invoke "make" "fast-test-all"
+                             "-j" (number->string (parallel-job-count)))))))))
+    (inputs
+     (list keyutils
+           kmod
+           libaio
+           libbsd
+           libcap
+           libgcrypt
+           zlib))
+    (home-page "https://github.com/ColinIanKing/stress-ng")
+    (synopsis "Load and stress-test a computer system in various ways")
+    (description
+     "stress-ng stress-tests a computer system by exercising both physical
+subsystems as operating system kernel interfaces.  It can stress the CPU, cache,
+disk, memory, socket and pipe I/O, scheduling, and much more, in various
+selectable ways.  This can trip hardware issues such as thermal overruns as well
+as operating system bugs that occur only when a system is being thrashed hard.
+
+You can also measure test throughput rates, which can be useful to observe
+performance changes across different operating system releases or types of
+hardware.  However, stress-ng is not a benchmark.  Use it with caution: some of
+the tests can make poorly designed hardware run dangerously hot or make the
+whole system lock up.
+
+Compared to its inspiration, @command{stress}, @command{stress-ng} offers many
+additional options such as the number of bogo operations to run, execution
+metrics, verification of memory and computational operations, and considerably
+more stress mechanisms.")
+    (license license:gpl2+)))
+
 (define-public detox
   (package
     (name "detox")