Browse Source

Merge pull request #2073 from saturday06/haskell-stack

Modernize Haskell benchmarks
Nate 9 years ago
parent
commit
814bac3185

+ 1 - 3
frameworks/Haskell/snap/.gitignore

@@ -1,3 +1 @@
-dist/
-/bench/.cabal-sandbox/
-/bench/cabal.sandbox.config
+/bench/.stack-work/

+ 7 - 8
frameworks/Haskell/snap/README.md

@@ -7,14 +7,13 @@ This is the Snap portion of a [benchmarking test suite](../) comparing a variety
 
 
 ## Infrastructure Software Versions
 ## Infrastructure Software Versions
 The tests were run with:
 The tests were run with:
-* GHC 7.4.1
-* snap-core 0.9.3.1
-* snap-server 0.9.3.3
-* json 0.7
-* configurator 0.2.0.2
-* resource-pool 0.2.1.1
-* HDBC-mysql 0.6.6.1
-* HDBC 2.3.1.2
+* GHC 7.10.3
+* snap-core 0.9.8.0
+* snap-server 0.9.5.1
+* aeson 0.11.2.0
+* configurator 0.3.0.0
+* resource-pool 0.2.3.2
+* mysql-simple 0.2.2.5
 
 
 ## Test URLs
 ## Test URLs
 ### JSON Encoding Test
 ### JSON Encoding Test

+ 16 - 19
frameworks/Haskell/snap/bench/snap-bench.cabal

@@ -15,23 +15,20 @@ Executable snap-bench
   main-is: Main.hs
   main-is: Main.hs
 
 
   Build-depends:
   Build-depends:
-    aeson                     >= 0.6.1.0  && < 0.7,
-    base                      >= 4        && < 5,
-    bytestring                >= 0.9.1    && < 0.11,
-    MonadCatchIO-transformers >= 0.2.1    && < 0.4,
-    mtl                       >= 2        && < 3,
-    snap-core                 >= 0.9      && < 0.10,
-    snap-server               >= 0.9      && < 0.10,
-    configurator              >= 0.2      && < 0.3,
-    resource-pool             >= 0.2      && < 0.3,
-    mysql-simple              >= 0.2.2.4  && < 0.3,
-    text                      >= 0.11.0.0 && < 0.12,
-    transformers              >= 0.3      && < 0.4,
-    random                    >= 1        && < 2,
-    unordered-containers      >= 0.2.3.1  && < 0.3
+    aeson,
+    base,
+    bytestring,
+    MonadCatchIO-transformers,
+    mtl,
+    snap-core,
+    snap-server,
+    configurator,
+    resource-pool,
+    mysql-simple,
+    text,
+    transformers,
+    random,
+    unordered-containers
 
 
-  if impl(ghc >= 6.12.0)
-    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields -O2
-                 -fno-warn-unused-do-bind -rtsopts
-  else
-    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields -O2
+  ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields -O2
+               -fno-warn-unused-do-bind -rtsopts

+ 6 - 1
frameworks/Haskell/snap/bench/src/Main.hs

@@ -66,7 +66,7 @@ site pool = route
     [ ("json",      jsonHandler)
     [ ("json",      jsonHandler)
     , ("db",        dbHandler pool)
     , ("db",        dbHandler pool)
     , ("dbs",       dbsHandler pool)
     , ("dbs",       dbsHandler pool)
-    , ("plaintext", writeBS "Hello, World!")
+    , ("plaintext", plaintextHandler pool)
     ]
     ]
 
 
 jsonHandler :: Snap ()
 jsonHandler :: Snap ()
@@ -87,6 +87,11 @@ dbsHandler pool = do
     qs <- getQueryParam "queries"
     qs <- getQueryParam "queries"
     runAll pool $ maybe 1 fst (qs >>= B.readInt)
     runAll pool $ maybe 1 fst (qs >>= B.readInt)
 
 
+plaintextHandler :: Pool Connection -> Snap ()
+plaintextHandler pool = do
+    modifyResponse (setContentType "text/plain")
+    writeBS "Hello, World!"
+
 runAll :: Pool Connection -> Int -> Snap ()
 runAll :: Pool Connection -> Int -> Snap ()
 runAll pool i | i < 1 = runAll pool 1
 runAll pool i | i < 1 = runAll pool 1
               | i > 500 = runAll pool 500
               | i > 500 = runAll pool 500

+ 5 - 0
frameworks/Haskell/snap/bench/stack.yaml

@@ -0,0 +1,5 @@
+flags: {}
+packages:
+- '.'
+extra-deps: []
+resolver: lts-6.3

+ 3 - 5
frameworks/Haskell/snap/setup.sh

@@ -2,12 +2,10 @@
 
 
 sed -i 's|host=".*"|host="'"${DBHOST}"'"|g' bench/cfg/db.cfg
 sed -i 's|host=".*"|host="'"${DBHOST}"'"|g' bench/cfg/db.cfg
 
 
-fw_depends haskell
+fw_depends stack
 
 
 cd bench
 cd bench
 
 
-cabal update
-cabal sandbox init
-cabal --bindir=${TROOT}/bench/dist/build/snap-bench install
+${IROOT}/stack --allow-different-user build --install-ghc
 
 
-dist/build/snap-bench/snap-bench +RTS -A4M -N -qg2 -I0 -G2 &
+${IROOT}/stack --allow-different-user exec snap-bench -- +RTS -A4M -N -qg2 -I0 -G2 &

+ 5 - 2
frameworks/Haskell/spock/setup.sh

@@ -4,7 +4,10 @@ fw_depends stack
 
 
 sed -i 's|PG.connectHost     = "localhost"|PG.connectHost     = "'"${DBHOST}"'"|g' src/Main.hs
 sed -i 's|PG.connectHost     = "localhost"|PG.connectHost     = "'"${DBHOST}"'"|g' src/Main.hs
 
 
-${IROOT}/stack --allow-different-user setup
-${IROOT}/stack --allow-different-user build
+if [ "$TRAVIS" = "true" ]; then
+    sed -i 's|PoolCfg 50 50 60|PoolCfg 20 25 60|g' src/Main.hs
+fi
+
+${IROOT}/stack --allow-different-user build --install-ghc
 
 
 ${IROOT}/stack --allow-different-user exec spock-exe -- +RTS -A32m -N${MAX_THREADS} &
 ${IROOT}/stack --allow-different-user exec spock-exe -- +RTS -A32m -N${MAX_THREADS} &

+ 2 - 3
frameworks/Haskell/spock/stack.yaml

@@ -2,14 +2,13 @@
 # For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration/
 # For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration/
 
 
 # Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
 # Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
-resolver: lts-5.4
+resolver: lts-6.3
 
 
 # Local packages, usually specified by relative directory name
 # Local packages, usually specified by relative directory name
 packages:
 packages:
 - '.'
 - '.'
 # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
 # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
-extra-deps:
-- aeson-0.11.0.0
+extra-deps: []
 
 
 # Override default flag values for local packages and extra-deps
 # Override default flag values for local packages and extra-deps
 flags: {}
 flags: {}

+ 1 - 4
frameworks/Haskell/wai/.gitignore

@@ -1,4 +1 @@
-bench/cabal-dev
-bench/dist
-/bench/.cabal-sandbox/
-/bench/cabal.sandbox.config
+/bench/.stack-work/

+ 8 - 8
frameworks/Haskell/wai/bench/bench.cabal

@@ -1,4 +1,4 @@
-name:              bench-wai
+name:              bench
 version:           0.0.0
 version:           0.0.0
 cabal-version:     >= 1.8
 cabal-version:     >= 1.8
 build-type:        Simple
 build-type:        Simple
@@ -11,12 +11,12 @@ executable         bench
 
 
     extensions: OverloadedStrings
     extensions: OverloadedStrings
 
 
-    build-depends: base                          >= 4.7        && < 5
-                 , aeson                         >= 0.6.1.0
+    build-depends: base
+                 , aeson
                  , http-types
                  , http-types
-                 , network                       >= 2.4
-                 , text                          >= 1.0
-                 , wai                           >= 3.0
-                 , warp                          >= 3.0
+                 , network
+                 , text
+                 , wai
+                 , warp
                  , blaze-builder
                  , blaze-builder
-                 , bytestring                    >= 0.10
+                 , bytestring

+ 5 - 0
frameworks/Haskell/wai/bench/stack.yaml

@@ -0,0 +1,5 @@
+flags: {}
+packages:
+- '.'
+extra-deps: []
+resolver: lts-6.3

+ 3 - 5
frameworks/Haskell/wai/setup.sh

@@ -1,11 +1,9 @@
 #!/bin/bash
 #!/bin/bash
 
 
-fw_depends haskell
+fw_depends stack
 
 
 cd bench
 cd bench
 
 
-cabal update
-cabal sandbox init
-cabal --bindir=${TROOT}/bench/dist/build/bench install
+${IROOT}/stack --allow-different-user build --install-ghc
 
 
-dist/build/bench/bench ${MAX_THREADS} ${DBHOST} +RTS -A32m -N${MAX_THREADS} &
+${IROOT}/stack --allow-different-user exec bench -- ${MAX_THREADS} ${DBHOST} +RTS -A32m -N${MAX_THREADS} &

+ 0 - 1
frameworks/Haskell/wai/source_code

@@ -1,3 +1,2 @@
 ./wai/bench/
 ./wai/bench/
 ./wai/bench/wai.hs
 ./wai/bench/wai.hs
-./wai/bench/bench.cabal

+ 1 - 3
frameworks/Haskell/yesod/.gitignore

@@ -1,3 +1 @@
-bench/cabal-dev
-/bench/.cabal-sandbox/
-/bench/cabal.sandbox.config
+/bench/.stack-work/

+ 1 - 1
frameworks/Haskell/yesod/README.md

@@ -5,5 +5,5 @@ This is the Yesod portion of a [benchmarking test suite](../) comparing a variet
 
 
 ## Infrastructure Software Versions
 ## Infrastructure Software Versions
 The tests were run with:
 The tests were run with:
-* GHC 7.8.3
+* GHC 7.10.3
 * Yesod 1.4
 * Yesod 1.4

+ 1 - 1
frameworks/Haskell/yesod/bench/bench.cabal

@@ -28,7 +28,7 @@ executable         bench
                  , auto-update
                  , auto-update
                  , primitive
                  , primitive
                  , mwc-random
                  , mwc-random
-                 , pool-conduit
+                 , resource-pool
                  , network
                  , network
                  , mongoDB
                  , mongoDB
                  , monad-logger
                  , monad-logger

+ 4 - 4
frameworks/Haskell/yesod/bench/src/yesod.hs

@@ -23,7 +23,7 @@ import           Control.Monad.Reader          (ReaderT)
 import           Control.Monad.Trans.Resource  (InternalState)
 import           Control.Monad.Trans.Resource  (InternalState)
 import           Data.Aeson                    (encode)
 import           Data.Aeson                    (encode)
 import qualified Data.ByteString.Lazy          as L
 import qualified Data.ByteString.Lazy          as L
-import           Data.Conduit.Pool             (Pool, createPool)
+import           Data.Pool                     (Pool, createPool)
 import           Data.Int                      (Int64)
 import           Data.Int                      (Int64)
 import           Data.IORef                    (newIORef)
 import           Data.IORef                    (newIORef)
 import           Data.Function                 (on)
 import           Data.Function                 (on)
@@ -108,7 +108,7 @@ getJsonR :: Handler ()
 getJsonR = sendWaiResponse
 getJsonR = sendWaiResponse
          $ responseBuilder
          $ responseBuilder
             status200
             status200
-            [("Content-Type", typeJson)]
+            [("Content-Type", simpleContentType typeJson)]
          $ copyByteString
          $ copyByteString
          $ L.toStrict
          $ L.toStrict
          $ encode
          $ encode
@@ -168,7 +168,7 @@ getDb query = do
     sendWaiResponse
     sendWaiResponse
         $ responseBuilder
         $ responseBuilder
             status200
             status200
-            [("Content-Type", typeJson)]
+            [("Content-Type", simpleContentType typeJson)]
         $ copyByteString
         $ copyByteString
         $ L.toStrict
         $ L.toStrict
         $ encode value
         $ encode value
@@ -257,7 +257,7 @@ getPlaintextR :: Handler ()
 getPlaintextR = sendWaiResponse
 getPlaintextR = sendWaiResponse
               $ responseBuilder
               $ responseBuilder
                 status200
                 status200
-                [("Content-Type", typePlain)]
+                [("Content-Type", simpleContentType typePlain)]
               $ copyByteString "Hello, World!"
               $ copyByteString "Hello, World!"
 
 
 fortuneTemplate :: [(Int64, Text)] -> Builder
 fortuneTemplate :: [(Int64, Text)] -> Builder

+ 2 - 4
frameworks/Haskell/yesod/bench/stack.yaml

@@ -1,7 +1,5 @@
 flags: {}
 flags: {}
 packages:
 packages:
 - '.'
 - '.'
-extra-deps:
-- pool-conduit-0.1.2.3
-- monad-control-0.3.3.1
-resolver: lts-5.0
+extra-deps: []
+resolver: lts-6.3

+ 2 - 3
frameworks/Haskell/yesod/setup.sh

@@ -4,7 +4,6 @@ fw_depends stack
 
 
 cd bench
 cd bench
 
 
-${IROOT}/stack --allow-different-user setup
-${IROOT}/stack --allow-different-user build
+${IROOT}/stack --allow-different-user build --install-ghc
 
 
-${IROOT}/stack --allow-different-user exec bench ${MAX_THREADS} ${DBHOST} +RTS -A32m -N${MAX_THREADS} &
+${IROOT}/stack --allow-different-user exec bench -- ${MAX_THREADS} ${DBHOST} +RTS -A32m -N${MAX_THREADS} &