iris/_benchmarks
2017-08-20 10:42:31 +03:00
..
iris .NET Core vs Iris MVC vs Iris (classic API with Handlers) 2017-08-19 07:11:30 +03:00
iris-mvc .NET Core vs Iris MVC vs Iris (classic API with Handlers) 2017-08-19 07:11:30 +03:00
iris-mvc-templates Add .NET Core MVC with Templates vs Iris MVC with Templates 2017-08-20 10:42:31 +03:00
netcore-mvc Update the benchmarks results as Scott Hanselman‏ and Josh Clark noted. 2017-08-20 06:53:15 +03:00
netcore-mvc-templates Add .NET Core MVC with Templates vs Iris MVC with Templates 2017-08-20 10:42:31 +03:00
screens Add .NET Core MVC with Templates vs Iris MVC with Templates 2017-08-20 10:42:31 +03:00
README.md Add .NET Core MVC with Templates vs Iris MVC with Templates 2017-08-20 10:42:31 +03:00

Hardware

  • Processor: Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz 2.50GHz
  • RAM: 8.00 GB

Software

Results

We will compare two identical things here, in terms of application, the expected response and the stability of their run times, so we will not try to put more things in the game like JSON or XML encoders and decoders, just a simple text message. To achieve a fair comparison we will use the MVC architecture pattern on both sides, Go and .NET Core.

.NET Core MVC

$ cd netcore-mvc
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 requests using 125 connections
 5000000 / 5000000 [=====================================================================================] 100.00% 2m3s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     40226.03    8724.30     161919
  Latency        3.09ms     1.40ms   169.12ms
  HTTP codes:
    1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     8.91MB/s

Iris MVC

$ cd iris-mvc
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 requests using 125 connections
 5000000 / 5000000 [======================================================================================] 100.00% 47s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec    105643.81    7687.79     122564
  Latency        1.18ms   366.55us    22.01ms
  HTTP codes:
    1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    19.65MB/s

Iris

$ cd iris
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 requests using 125 connections
 5000000 / 5000000 [======================================================================================] 100.00% 45s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec    110809.98    8209.87     128212
  Latency        1.13ms   307.86us    18.02ms
  HTTP codes:
    1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    20.61MB/s

Click here to navigate to the screenshots.

Summary

  • Time to complete the 5000000 requests - smaller is better.
  • Reqs/sec - bigger is better.
  • Latency - smaller is better
  • Throughput - bigger is better.
  • Memory usage - smaller is better.
  • LOC (Lines Of Code) - smaller is better.

.NET Core MVC Application, written using 86 lines of code, ran for 2 minutes and 3 seconds serving 40226.03 requests per second within 3.09ms latency in average and 169.12ms max, the memory usage of all these was ~123MB (without the dotnet host).

Iris MVC Application, written using 27 lines of code, ran for 47 seconds serving 105643.71 requests per second within 1.18ms latency in average and 22.01ms max, the memory usage of all these was ~12MB.

Iris Application, written using 22 lines of code, ran for 45 seconds serving 110809.98 requests per second within 1.13ms latency in average and 18.02ms max, the memory usage of all these was ~11MB.

Update: 20 August 2017

As Josh Clark and Scott Hanselman pointed out on this status, on .NET Core MVC Startup.cs file the line with services.AddMvc(); can be replaced with services.AddMvcCore();. I followed their helpful instructions and re-run the benchmarks. The article now contains the latest benchmark output for the .NET Core application with the change both Josh and Scott noted.

The twitter conversion: https://twitter.com/MakisMaropoulos/status/899113215895982080

For those who want to compare with the standard services.AddMvc(); you can see the old output by pressing here.

Results with Templates

Lets run one more benchmark, spawn 1000000 requests but this time we expect HTML generated by templates via the view engine.

.NET Core MVC with Templates

$ cd netcore-mvc-templates
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc-templates
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Bombarding http://localhost:5000 with 1000000 requests using 125 connections
 1000000 / 1000000 [=====================================================================================] 100.00% 1m20s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     11738.60    7741.36     125887
  Latency       10.10ms    22.10ms      1.97s
  HTTP codes:
    1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    89.03MB/s

Iris MVC with Templates

$ cd iris-mvc-templates
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
Bombarding http://localhost:5000 with 1000000 requests using 125 connections
 1000000 / 1000000 [======================================================================================] 100.00% 37s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     26656.76    1944.73      31188
  Latency        4.69ms     1.20ms    22.52ms
  HTTP codes:
    1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:   192.51MB/s

Summary

  • Time to complete the 1000000 requests - smaller is better.
  • Reqs/sec - bigger is better.
  • Latency - smaller is better
  • Memory usage - smaller is better.
  • Throughput - bigger is better.

.NET Core MVC with Templates Application ran for 1 minute and 20 seconds serving 11738.60 requests per second with 89.03MB/s within 10.10ms latency in average and 1.97s max, the memory usage of all these was ~193MB (without the dotnet host).

Iris MVC with Templates Application ran for 37 seconds serving 26656.76 requests per second with 192.51MB/s within 1.18ms latency in average and 22.52ms max, the memory usage of all these was ~17MB.

Thank you all for the 100% green feedback, have fun!