gnu: Add sysbench.
* gnu/packages/benchmark.scm (sysbench): New variable.
This commit is contained in:
		
							parent
							
								
									7be44e8587
								
							
						
					
					
						commit
						c886968bb1
					
				
					 1 changed files with 139 additions and 0 deletions
				
			
		| 
						 | 
					@ -37,19 +37,27 @@
 | 
				
			||||||
  #:use-module (guix build-system gnu)
 | 
					  #:use-module (guix build-system gnu)
 | 
				
			||||||
  #:use-module (guix build-system python)
 | 
					  #:use-module (guix build-system python)
 | 
				
			||||||
  #:use-module (gnu packages)
 | 
					  #:use-module (gnu packages)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages autotools)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages base)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages c)
 | 
				
			||||||
  #:use-module (gnu packages check)
 | 
					  #:use-module (gnu packages check)
 | 
				
			||||||
  #:use-module (gnu packages compression)
 | 
					  #:use-module (gnu packages compression)
 | 
				
			||||||
  #:use-module (gnu packages kde-frameworks)
 | 
					  #:use-module (gnu packages kde-frameworks)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages databases)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages docbook)
 | 
				
			||||||
  #:use-module (gnu packages linux)
 | 
					  #:use-module (gnu packages linux)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages lua)
 | 
				
			||||||
  #:use-module (gnu packages maths)
 | 
					  #:use-module (gnu packages maths)
 | 
				
			||||||
  #:use-module (gnu packages mpi)
 | 
					  #:use-module (gnu packages mpi)
 | 
				
			||||||
  #:use-module (gnu packages opencl)
 | 
					  #:use-module (gnu packages opencl)
 | 
				
			||||||
  #:use-module (gnu packages perl)
 | 
					  #:use-module (gnu packages perl)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages pkg-config)
 | 
				
			||||||
  #:use-module (gnu packages python)
 | 
					  #:use-module (gnu packages python)
 | 
				
			||||||
  #:use-module (gnu packages python-science)
 | 
					  #:use-module (gnu packages python-science)
 | 
				
			||||||
  #:use-module (gnu packages python-web)
 | 
					  #:use-module (gnu packages python-web)
 | 
				
			||||||
  #:use-module (gnu packages python-xyz)
 | 
					  #:use-module (gnu packages python-xyz)
 | 
				
			||||||
  #:use-module (gnu packages qt)
 | 
					  #:use-module (gnu packages qt)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages xml)
 | 
				
			||||||
  #:use-module (ice-9 match))
 | 
					  #:use-module (ice-9 match))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-public fio
 | 
					(define-public fio
 | 
				
			||||||
| 
						 | 
					@ -430,3 +438,134 @@ its features are:
 | 
				
			||||||
@item Report generation.
 | 
					@item Report generation.
 | 
				
			||||||
@end itemize")
 | 
					@end itemize")
 | 
				
			||||||
    (license license:gpl3+)))
 | 
					    (license license:gpl3+)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-public sysbench
 | 
				
			||||||
 | 
					  (package
 | 
				
			||||||
 | 
					    (name "sysbench")
 | 
				
			||||||
 | 
					    (version "1.0.20")
 | 
				
			||||||
 | 
					    (source (origin
 | 
				
			||||||
 | 
					              (method git-fetch)
 | 
				
			||||||
 | 
					              (uri (git-reference
 | 
				
			||||||
 | 
					                    (url "https://github.com/akopytov/sysbench")
 | 
				
			||||||
 | 
					                    (commit version)))
 | 
				
			||||||
 | 
					              (file-name (git-file-name name version))
 | 
				
			||||||
 | 
					              (modules '((guix build utils)))
 | 
				
			||||||
 | 
					              (snippet '(begin
 | 
				
			||||||
 | 
					                          ;; Ensure no bundled libraries get used.
 | 
				
			||||||
 | 
					                          (delete-file-recursively "third_party")
 | 
				
			||||||
 | 
					                          (substitute* "configure.ac"
 | 
				
			||||||
 | 
					                            (("^third_party/.*")
 | 
				
			||||||
 | 
					                             ""))
 | 
				
			||||||
 | 
					                          (substitute* "Makefile.am"
 | 
				
			||||||
 | 
					                            ((".*(LUAJIT|CK)_DIR =.*")
 | 
				
			||||||
 | 
					                             ""))))
 | 
				
			||||||
 | 
					              (sha256
 | 
				
			||||||
 | 
					               (base32
 | 
				
			||||||
 | 
					                "1sanvl2a52ff4shj62nw395zzgdgywplqvwip74ky8q7s6qjf5qy"))))
 | 
				
			||||||
 | 
					    (build-system gnu-build-system)
 | 
				
			||||||
 | 
					    (arguments
 | 
				
			||||||
 | 
					     (list
 | 
				
			||||||
 | 
					      #:configure-flags #~(list "--with-pgsql"
 | 
				
			||||||
 | 
					                                ;; Explicitly specify the library directory of
 | 
				
			||||||
 | 
					                                ;; MySQL, otherwise `mysql_config` gets
 | 
				
			||||||
 | 
					                                ;; consulted and adds unnecessary link
 | 
				
			||||||
 | 
					                                ;; directives.
 | 
				
			||||||
 | 
					                                (string-append "--with-mysql-libs="
 | 
				
			||||||
 | 
					                                               #$(this-package-input "mysql")
 | 
				
			||||||
 | 
					                                               "/lib")
 | 
				
			||||||
 | 
					                                "--with-system-luajit"
 | 
				
			||||||
 | 
					                                "--with-system-ck"
 | 
				
			||||||
 | 
					                                ;; If we let the build tool select the most
 | 
				
			||||||
 | 
					                                ;; optimal compiler architecture flag, the
 | 
				
			||||||
 | 
					                                ;; build is not reproducible.
 | 
				
			||||||
 | 
					                                "--without-gcc-arch")
 | 
				
			||||||
 | 
					      #:phases #~(modify-phases %standard-phases
 | 
				
			||||||
 | 
					                   (add-after 'unpack 'patch-test-runner
 | 
				
			||||||
 | 
					                     (lambda _
 | 
				
			||||||
 | 
					                       (substitute* "tests/test_run.sh"
 | 
				
			||||||
 | 
					                         (("/bin/bash")
 | 
				
			||||||
 | 
					                          (which "bash"))
 | 
				
			||||||
 | 
					                         ;; Do not attempt to invoke the cram command via
 | 
				
			||||||
 | 
					                         ;; Python, as on Guix it is a shell script (wrapper).
 | 
				
			||||||
 | 
					                         (("\\$\\(command -v cram\\)")
 | 
				
			||||||
 | 
					                          "-m cram"))))
 | 
				
			||||||
 | 
					                   (add-after 'unpack 'disable-test-installation
 | 
				
			||||||
 | 
					                     (lambda _
 | 
				
			||||||
 | 
					                       (substitute* "tests/Makefile.am"
 | 
				
			||||||
 | 
					                         (("install-data-local")
 | 
				
			||||||
 | 
					                          "do-not-install-data-local")
 | 
				
			||||||
 | 
					                         (("^test_SCRIPTS.*")
 | 
				
			||||||
 | 
					                          ""))))
 | 
				
			||||||
 | 
					                   (add-after 'unpack 'fix-docbook
 | 
				
			||||||
 | 
					                     (lambda* (#:key native-inputs inputs #:allow-other-keys)
 | 
				
			||||||
 | 
					                       (substitute* "m4/ax_check_docbook.m4"
 | 
				
			||||||
 | 
					                         (("DOCBOOK_ROOT=.*" all)
 | 
				
			||||||
 | 
					                          (string-append
 | 
				
			||||||
 | 
					                           all "XML_CATALOG="
 | 
				
			||||||
 | 
					                           (search-input-file (or native-inputs inputs)
 | 
				
			||||||
 | 
					                                              "xml/dtd/docbook/catalog.xml")
 | 
				
			||||||
 | 
					                           "\n")))
 | 
				
			||||||
 | 
					                       (substitute* "doc/xsl/xhtml.xsl"
 | 
				
			||||||
 | 
					                         (("http://docbook.sourceforge.net/release/xsl\
 | 
				
			||||||
 | 
					/current/xhtml/docbook.xsl")
 | 
				
			||||||
 | 
					                          (search-input-file
 | 
				
			||||||
 | 
					                           (or native-inputs inputs)
 | 
				
			||||||
 | 
					                           (string-append "xml/xsl/docbook-xsl-"
 | 
				
			||||||
 | 
					                                          #$(package-version docbook-xsl)
 | 
				
			||||||
 | 
					                                          "/xhtml/docbook.xsl"))))
 | 
				
			||||||
 | 
					                       (substitute* "doc/xsl/xhtml-chunk.xsl"
 | 
				
			||||||
 | 
					                         (("http://docbook.sourceforge.net/release/xsl\
 | 
				
			||||||
 | 
					/current/xhtml/chunk.xsl")
 | 
				
			||||||
 | 
					                          (search-input-file
 | 
				
			||||||
 | 
					                           (or native-inputs inputs)
 | 
				
			||||||
 | 
					                           (string-append "xml/xsl/docbook-xsl-"
 | 
				
			||||||
 | 
					                                          #$(package-version docbook-xsl)
 | 
				
			||||||
 | 
					                                          "/xhtml/chunk.xsl")))))))))
 | 
				
			||||||
 | 
					    (native-inputs (list autoconf
 | 
				
			||||||
 | 
					                         automake
 | 
				
			||||||
 | 
					                         libtool
 | 
				
			||||||
 | 
					                         pkg-config
 | 
				
			||||||
 | 
					                         python-cram
 | 
				
			||||||
 | 
					                         python-wrapper
 | 
				
			||||||
 | 
					                         which
 | 
				
			||||||
 | 
					                         ;; For documentation
 | 
				
			||||||
 | 
					                         libxml2        ;for XML_CATALOG_FILES
 | 
				
			||||||
 | 
					                         libxslt
 | 
				
			||||||
 | 
					                         docbook-xml
 | 
				
			||||||
 | 
					                         docbook-xsl))
 | 
				
			||||||
 | 
					    (inputs (list ck libaio luajit mysql postgresql))
 | 
				
			||||||
 | 
					    (home-page "https://github.com/akopytov/sysbench/")
 | 
				
			||||||
 | 
					    (synopsis "Scriptable database and system performance benchmark")
 | 
				
			||||||
 | 
					    (description "@command{sysbench} is a scriptable multi-threaded benchmark
 | 
				
			||||||
 | 
					tool based on LuaJIT.  It is most frequently used for database benchmarks, but
 | 
				
			||||||
 | 
					can also be used to create arbitrarily complex workloads that do not involve a
 | 
				
			||||||
 | 
					database server.  @command{sysbench} comes with the following bundled
 | 
				
			||||||
 | 
					benchmarks:
 | 
				
			||||||
 | 
					@table @file
 | 
				
			||||||
 | 
					@item oltp_*.lua
 | 
				
			||||||
 | 
					A collection of OLTP-like database benchmarks.
 | 
				
			||||||
 | 
					@item fileio
 | 
				
			||||||
 | 
					A filesystem-level benchmark.
 | 
				
			||||||
 | 
					@item cpu
 | 
				
			||||||
 | 
					A simple CPU benchmark.
 | 
				
			||||||
 | 
					@item memory
 | 
				
			||||||
 | 
					A memory access benchmark.
 | 
				
			||||||
 | 
					@item threads
 | 
				
			||||||
 | 
					A thread-based scheduler benchmark.
 | 
				
			||||||
 | 
					@item mutex
 | 
				
			||||||
 | 
					A POSIX mutex benchmark.
 | 
				
			||||||
 | 
					@end table
 | 
				
			||||||
 | 
					It includes features such as:
 | 
				
			||||||
 | 
					@itemize
 | 
				
			||||||
 | 
					@item
 | 
				
			||||||
 | 
					Extensive statistics about rate and latency is available, including latency
 | 
				
			||||||
 | 
					percentiles and histograms.
 | 
				
			||||||
 | 
					@item
 | 
				
			||||||
 | 
					Low overhead even with thousands of concurrent threads.  @command{sysbench} is
 | 
				
			||||||
 | 
					capable of generating and tracking hundreds of millions of events per second.
 | 
				
			||||||
 | 
					@item
 | 
				
			||||||
 | 
					New benchmarks can be easily created by implementing pre-defined hooks in
 | 
				
			||||||
 | 
					user-provided Lua scripts.
 | 
				
			||||||
 | 
					@item
 | 
				
			||||||
 | 
					@end itemize")
 | 
				
			||||||
 | 
					    (license license:gpl2+)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue