echo 65535 > /proc/sys/net/core/somaxconnecho 65535 > /proc/sys/net/ipv4/tcp_max_syn_backlogecho never > /sys/kernel/mm/transparent_hugepage/enabledsysctl vm.overcommit_memory=1sysctl vm.swappiness=0
Furthermore, I turned off the swap, which will cause very unstable throughput when AOF re-write happened. As observed, 15 million records occupy around 48G memory.
workload=com.yahoo.ycsb.workloads.CoreWorkloadrecordcount=15000000operationcount=150000000insertstart=0fieldcount=21fieldlength=188readallfields=truewriteallfields=falsefieldlengthdistribution=zipfianreadproportion=0.0updateproportion=1.0insertproportion=0readmodifywriteproportion=0.0scanproportion=0maxscanlength=1000scanlengthdistribution=uniforminsertorder=hashedrequestdistribution=zipfianhotspotdatafraction=0.2hotspotopnfraction=0.8table=subscribermeasurementtype=histogramhistogram.buckets=1000timeseries.granularity=1000
Hi Bill,Thank you for your answer. But I can't fully catch your points.First of all, let me clarify some terms during this conversation to avoid any confusing. Yes, in my last post, "node" is equal to "instance". If my understanding right, your "node" is more like one server or machine. By this terms, I've created one Redis Cluster on two nodes by script redis-trib.rb. What's more I force all master instances deployed on one node, and all slave instances on another node.Do you mean the throughput of this cluster deployment can't be increased linearly as the increased number of Redis instances on a single node? Shall I have to deploy them on multiple nodes to achieve the linear scalability?!
I've thought the Redis is a single-thread program and there are much more resource available, especially the CPU capacity. So running multiple instances on a single node is quite straight-forward.
If it's NOT, are there any other resources/factors on a single node to limit its scalability?
On Tuesday, August 16, 2016 at 1:14:21 PM UTC+8, The Real Bill wrote:So what you are describing is you testing one node from one other node. That won't allow you to see linear scalability across multiple nodes, or lack thereof. Unless you take lot more fine grained system level effort you won't even see consistent performance with multiple Redis instances on a single node. Your artificial benchmark isn't even a good route to go. You want to profile your application, not a generic combination of factors.
--
You received this message because you are subscribed to a topic in the Google Groups "Redis DB" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/redis-db/dY07-dRyHz4/unsubscribe.
To unsubscribe from this group and all its topics, send an email to redis-db+u...@googlegroups.com.
To post to this group, send email to redi...@googlegroups.com.
Visit this group at https://groups.google.com/group/redis-db.
For more options, visit https://groups.google.com/d/optout.
Hi Bill,
Thank you very much for your more interpretation.
Resource contention
For your comments about resource, yes, there are more resources/factors besides CPU/memory/IO, etc. As you point out, my question is that I can't find the bottleneck. I suppose there is something limit the scaling. That's why I come to here to seek any possible help.
Bandwidth should not be the bottleneck. I have measured the max in/out bps on the master node as following figure. Insert could reach around 1 Gbps and Update never exceed 600 Mbps. They are far from our LAN bandwidth, 10G bps.
To me, network interrupts might be an issue. But I am not sure. As I observed, all interrupts are mainly distributed on 8 CPUs of 24 belonging to the same physical processor (there are 2 physical processors in total). The measured result shows 15~25% consumed on each CPU and consumed on the whole machine.
top - 15:44:11 up 49 days, 4:30, 4 users, load average: 7.52, 5.47, 2.84 Tasks: 287 total, 8 running, 279 sleeping, 0 stopped, 0 zombie%Cpu0 : 24.2 us, 26.6 sy, 0.0 ni, 28.7 id, 0.0 wa, 0.0 hi, 20.5 si, 0.0 st%Cpu1 : 29.0 us, 33.3 sy, 0.0 ni, 17.0 id, 0.0 wa, 0.0 hi, 20.7 si, 0.0 st%Cpu2 : 15.8 us, 21.2 sy, 0.0 ni, 62.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu3 : 26.8 us, 33.9 sy, 0.0 ni, 19.1 id, 0.0 wa, 0.0 hi, 20.1 si, 0.0 st%Cpu4 : 20.9 us, 25.2 sy, 0.0 ni, 53.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu5 : 27.5 us, 30.3 sy, 0.0 ni, 19.5 id, 0.0 wa, 0.0 hi, 22.6 si, 0.0 st%Cpu6 : 0.7 us, 0.3 sy, 0.0 ni, 94.5 id, 0.0 wa, 0.0 hi, 4.6 si, 0.0 st%Cpu7 : 0.0 us, 0.7 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 1.6 si, 0.0 st%Cpu8 : 0.7 us, 1.3 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu9 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu10 : 0.3 us, 1.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu11 : 0.3 us, 2.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu12 : 9.6 us, 10.6 sy, 0.0 ni, 79.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu13 : 27.7 us, 32.4 sy, 0.0 ni, 22.3 id, 0.0 wa, 0.0 hi, 17.6 si, 0.0 st%Cpu14 : 19.0 us, 27.2 sy, 0.0 ni, 29.6 id, 0.0 wa, 0.0 hi, 24.1 si, 0.0 st%Cpu15 : 24.5 us, 30.6 sy, 0.0 ni, 21.1 id, 0.0 wa, 0.0 hi, 23.8 si, 0.0 st%Cpu16 : 7.2 us, 9.9 sy, 0.0 ni, 82.6 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu17 : 27.6 us, 29.7 sy, 0.0 ni, 19.5 id, 0.0 wa, 0.0 hi, 23.2 si, 0.0 st%Cpu18 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu19 : 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st%Cpu20 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu21 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu22 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu23 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem: 65865712 total, 65598776 used, 266936 free, 37316 buffersKiB Swap: 0 total, 0 used, 0 free. 17710152 cached Mem
As memory bandwidth, core caches, I didn't look into them and honestly don't know how.
I am thinking one scenario. If a single node can’t hold so many redis instance with higher throughput, what if we deploy redis instances on multiple cloud/VM nodes. And it’s happened all these VM nodes are located on the same physical node. Here, let’s limit the biggest scale as 8 VM nodes with similar EC2 m4.large (2 CPU, 8G memory). Will the cloud/hypervisor help to distribute all of these resources? E.g. CPU pining, memory/network bandwidth assignment, IRQ distribution, etc. Can we see the linear scalability?
Client: YCSB (0.6.0) + Jedis cluster (2.8.0)
In my tests, I didn't use pipelining. I just want to know the throughput without pipline. Furthermore as I know, redis cluster can't support pipline.
Actually, it's one of DB binding implemented with jedis (JedisCluster) to manage the clients inter-working with redis cluster. I believe the JedisCluster works well with the cluster.
As my understanding, Sentinel manages failover in one HA solution and doesn’t care any data sharding. However, sharding could be one of the performance killers. I am not questioning the linear scalability of redis cluster. I just want to know how’s the linear relationship., i.e. the ratio, steep or not, which could be different from the case of Sentinel + independent instances. But now obviously, I've got problem and want to know anything wrong. Thanks!
Best Regards,
//Bin
On Aug 19, 2016, at 4:52 AM, Bin He <heb...@gmail.com> wrote:
Hi Bill,
Thank you very much for your more interpretation.
Resource contention
For your comments about resource, yes, there are more resources/factors besides CPU/memory/IO, etc. As you point out, my question is that I can't find the bottleneck. I suppose there is something limit the scaling. That's why I come to here to seek any possible help.
Bandwidth should not be the bottleneck. I have measured the max in/out bps on the master node as following figure. Insert could reach around 1 Gbps and Update never exceed 600 Mbps. They are far from our LAN bandwidth, 10G bps.
To me, network interrupts might be an issue. But I am not sure. As I observed, all interrupts are mainly distributed on 8 CPUs of 24 belonging to the same physical processor (there are 2 physical processors in total). The measured result shows 15~25% consumed on each CPU and consumed on the whole machine.
As memory bandwidth, core caches, I didn't look into them and honestly don't know how.
I am thinking one scenario. If a single node can’t hold so many redis instance with higher throughput, what if we deploy redis instances on multiple cloud/VM nodes. And it’s happened all these VM nodes are located on the same physical node. Here, let’s limit the biggest scale as 8 VM nodes with similar EC2 m4.large (2 CPU, 8G memory). Will the cloud/hypervisor help to distribute all of these resources? E.g. CPU pining, memory/network bandwidth assignment, IRQ distribution, etc. Can we see the linear scalability?
Client: YCSB (0.6.0) + Jedis cluster (2.8.0)
In my tests, I didn't use pipelining. I just want to know the throughput without pipline. Furthermore as I know, redis cluster can't support pipeline.
Actually, it's one of DB binding implemented with jedis (JedisCluster) to manage the clients inter-working with redis cluster. I believe the JedisCluster works well with the cluster.
As my understanding, Sentinel manages failover in one HA solution and doesn’t care any data sharing.
However, sharding could be one of the performance killers.