Questions:

   - Are you discarding Gin's log output? Writing stderr/stdout *to a 
   terminal *can be a major bottleneck.
   - I can't see where you've allowed more ephemeral ports? By default it's 
   around ~28k ephemeral ports on most Linux distros; you may wish to increase 
   this.
   - On a i7 4770k w/ 16GB RAM (SSD, but there's no disk IO here, so makes 
   no difference) - I can realize about 45k req/s with stdout+stderr 
   re-directed to /dev/null, talking to Redis over a Unix socket instead of 
   TCP.

You should profile your application to see where it's spending the most 
time waiting, otherwise we are both ultimately guessing.


On Monday, July 11, 2016 at 12:18:19 AM UTC-7, desaia...@gmail.com wrote:
>
> Hi Matt
>
> Thanks for the reply
>
> Test is done on different server on the same network
> Application using "gopkg.in/redis.v3" as plugin so TCP
> Pool size = 100000
>
> Below is the simple program storing "Hello World" small data compare to 
> what I use to store in my actual application where Redis not even 
> supporting 4k reads/sec even after using snapply and probuffing compression
>
> Redis-benchmark utility shows 80 k reads etc
>
> //Output - "Hello World" http://server:8001/testkey
>
> package main
>
> import (
>           "gopkg.in/redis.v3"
>           "github.com/gin-gonic/gin"
>        )
>
> var redisClient *redis.Client
> func main() {
>   redisClient = redis.NewClient(&redis.Options{
>       Addr:     "localhost:6379",
>       Password: "",
>       DB:       0,
>       PoolSize: 100000,
>   })
>
>   //Gin Code
>   gin.SetMode(gin.ReleaseMode)
>   r := gin.Default()
>   //r.Use(Proton.Gzip(Proton.BestSpeed))
>        
>   r.GET("/:key", func(c *gin.Context) {
>     key := c.Param("key")
>     value, _ := redisClient.Get(key).Result()
>     c.JSON(200, gin.H{"response": value})
>   })
>   r.Run(":8001")
> }
>
> $ wrk -t1 -c500 http://server:8001/testkey
> Running 10s test @ http://server:8001/testkey
>   1 threads and 500 connections
>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>     Latency    15.24ms   16.99ms 296.58ms   90.73%
>     Req/Sec    28.84k     3.20k   35.90k    87.88%
>   288461 requests in 10.08s, 41.81MB read
> Requests/sec:  28606.13
> Transfer/sec:      4.15MB
>
> $ wrk -t4 -c500 http://server:8001/testkey
> Running 10s test @ http://server:8001/testkey
>   4 threads and 500 connections
>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>     Latency    19.41ms   17.19ms 306.65ms   68.10%
>     Req/Sec     7.08k     1.00k    8.91k    73.75%
>   281946 requests in 10.03s, 40.87MB read
> Requests/sec:  28098.00
> Transfer/sec:      4.07MB
>
> $ wrk -t10 -c500 http://server:8001/testkey
> Running 10s test @ http://server:8001/testkey
>   10 threads and 500 connections
>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>     Latency    19.51ms   18.30ms 316.32ms   66.97%
>     Req/Sec     2.86k   349.38     3.88k    78.39%
>   286221 requests in 10.07s, 41.49MB read
> Requests/sec:  28413.52
> Transfer/sec:      4.12MB
>
> Thanks for your help
>
> Rgds,
>
> Abhi 
>
>
> On Monday, July 11, 2016 at 4:08:36 AM UTC+5:30, Matt Silverlock wrote:
>>
>>
>>    - Are your wrk threads starving your Go program? (why 10 threads? Why 
>>    not 4 for wrk, 4 for Go?)
>>    - How are you connecting to Redis? (TCP? Unix socket?)
>>    - What size pool have you set for Redis?
>>    - Show us your code.
>>
>> This is likely a classic example of where framework 'benchmarks' are 
>> completely divorced from reality. 
>>
>>
>> On Sunday, July 10, 2016 at 4:55:56 AM UTC-7, desaia...@gmail.com wrote:
>>>
>>> I am getting only - 29 k req/sec, can you please help me as Redis 
>>> document says it support 80 k+ req/sec reads not sure if I am doing any 
>>> wrong
>>>
>>> Machine - 8 core with 57 gb ram + ssd
>>> Go - 1.6.2 linux/amd64
>>> Ubuntu - 15.10
>>> DB - Redis 
>>> Plugin - gopkg.in/redis.v3
>>> Key - only "hello" value
>>> Webservice - Gin framework
>>>
>>> Sysctl - 
>>>
>>> file-max = 5752905
>>> file-nr = 1888 0 5752905
>>>
>>> net.core.rmem_max = 134217728
>>>
>>> net.core.wmem_max = 134217728
>>>
>>> net.ipv4.tcp_rmem = 4096 87380 67108864
>>>
>>> net.ipv4.tcp_wmem = 4096 65536 67108864
>>>
>>> net.core.netdev_max_backlog = 250000
>>>
>>> net.ipv4.tcp_congestion_control=htcp
>>>
>>> net.ipv4.tcp_mtu_probing=1
>>>
>>> ulimits - 200000
>>>
>>>
>>>
>>> wrk -t10 -c500 http://xx/testkey
>>>
>>> Running 10s test @ http://xx/testkey
>>>
>>>   10 threads and 500 connections
>>>
>>>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>>>
>>>     Latency    18.84ms   16.90ms 309.98ms   58.24%
>>>
>>>     Req/Sec     2.93k   382.13     4.46k    76.62%
>>>
>>>   293282 requests in 10.08s, 42.51MB read
>>>
>>> Requests/sec:  29090.62
>>>
>>> Transfer/sec:      4.22MB
>>>
>>>
>>> Thanks,
>>>
>>>
>>> Abhi
>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to