> However, for both writes and reads there was virtually no difference in the 
> latencies.
What sort of latency were you getting ? 

> I’m still not very sure where the current *write* bottleneck is though. 
What numbers are you getting ? 
Could the bottle neck be the client ? Can it send writes fast enough to 
saturate the nodes ?

As a rule of thumb you should get 3,000 to 4,000 (non counter) writes per 
second per core. 

> Sample iostat data (captured every 10s) for the dedicated disk where commit 
> logs are written is below. Does this seem like a bottle neck?
Does not look too bad. 

> Another interesting thing is that the linux disk cache doesn’t seem to be 
> growing in spite of a lot of free memory available. 
Things will only get paged in when they are accessed. 

Cheers


-----------------
Aaron Morton
New Zealand
@aaronmorton

Co-Founder & Principal Consultant
Apache Cassandra Consulting
http://www.thelastpickle.com

On 21/11/2013, at 12:42 pm, Arindam Barua <aba...@247-inc.com> wrote:

>  
> Thanks for the suggestions Aaron.
>  
> As a follow up, we ran a bunch of tests with different combinations of these 
> changes on a 2-node ring. The load was generated using cassandra-stress, run 
> with default values to write 30 million rows, and read them back.
> However, for both writes and reads there was virtually no difference in the 
> latencies.
>  
> The different combinations attempted:
> 1.       Baseline test with none of the below changes.
> 2.       Grabbing the TLAB setting from 1.2
> 3.       Moving the commit logs too to the 7 disk RAID 0.
> 4.       Increasing the concurrent_read to 32, and concurrent_write to 64
> 5.       (3) + (4), i.e. moving commit logs to the RAID + increasing 
> concurrent_read and concurrent_write config to 32 and 64.
>  
> The write latencies were very similar, except them being ~3x worse for the 
> 99.9th percentile and above for scenario (5) above.
> The read latencies were also similar, with (3) and (5) being a little worse 
> for the 99.99th percentile.
>  
> Overall, not making any changes, i.e. (1) performed as well or slightly 
> better than any of the other changes.
>  
> Running cassandra-stress on both the old and new hardware without making any 
> config changes, the write performance was very similar, but the new hardware 
> did show ~10x improvement in the read for the 99.9th percentile and higher. 
> After thinking about this, the reason why we were not seeing any difference 
> with our test framework was perhaps the nature of the test where we write the 
> rows, and then do a bunch of reads to read the rows that were just written 
> immediately following. The data is read back from the memtables, and never 
> from the disk/sstables. Hence the new hardware’s increased RAM and size of 
> the disk cache or higher number of disks never helps.
>  
> I’m still not very sure where the current *write* bottleneck is though. The 
> new hardware has 32 cores vs 8 cores of the old hardware. Moving the commit 
> log from a dedicated disk to a 7 RAID-0 disk system (where it would be shared 
> by other data though) didn’t make a difference too. (unless the extra 
> contention on the RAID nullified the positive effects of the RAID).
>  
> Sample iostat data (captured every 10s) for the dedicated disk where commit 
> logs are written is below. Does this seem like a bottle neck? When the commit 
> logs are written the await/svctm ratio is high.
>  
> Device:         rrqm/s   wrqm/s   r/s   w/s    rMB/s    wMB/s avgrq-sz 
> avgqu-sz   await  svctm  %util
>                0.00     8.09  0.04  8.85     0.00     0.07    15.74     0.00  
>   0.12   0.03   0.02
>                0.00   768.03  0.00  9.49     0.00     3.04   655.41     0.04  
>   4.52   0.33   0.31
>                0.00     8.10  0.04  8.85     0.00     0.07    15.75     0.00  
>   0.12   0.03   0.02
>                0.00   752.65  0.00 10.09     0.00     2.98   604.75     0.03  
>   3.00   0.26   0.26
>  
> Another interesting thing is that the linux disk cache doesn’t seem to be 
> growing in spite of a lot of free memory available. The total disk cache used 
> reported by ‘free’ is less than the size of the sstables written with over 
> 100 GB unused RAM.
> Even in production, where we have the older hardware running with 32 GB RAM 
> for a long time now, looking at 5 hosts in 1 DC, only 2.5 GB to 8 GB was used 
> for the disk cache. The Cassandra java process uses the 8 GB allocated to it, 
> and at least 10-15 GB on all the hosts is not used at all.
>  
> Thanks,
> Arindam
>  
> From: Aaron Morton [mailto:aa...@thelastpickle.com] 
> Sent: Wednesday, November 06, 2013 8:34 PM
> To: Cassandra User
> Subject: Re: Config changes to leverage new hardware
>  
> Running Cassandra 1.1.5 currently, but evaluating to upgrade to 1.2.11 soon.
> You will make more use of the extra memory moving to 1.2 as it moves bloom 
> filters and compression data off heap. 
>  
> Also grab the TLAB setting from cassandra-env.sh in v1.2
>  
> As of now, our performance tests (our application specific as well as 
> cassandra-stress) are not showing any significant difference in the 
> hardwares, which is a little disheartening, since the new hardware has a lot 
> more RAM and CPU.
> For reads or writes or both ? 
>  
> Writes tend to scale with cores as long as the commit log can keep up. 
> Reads improve with disk IO and page cache size when the hot set is in memory. 
>  
> Old Hardware: 8 cores (2 quad core), 32 GB RAM, four 1-TB disks ( 1 disk used 
> for commitlog and 3 disks RAID 0 for data)
> New Hardware: 32 cores (2 8-core with hyperthreading), 128 GB RAM, eight 1-TB 
> disks ( 1 disk used for commitlog and 7 disks RAID 0 for data)
> Is the disk IO on the commit log volume keeping up ?
> You cranked up the concurrent writers and the commit log may not keep up. You 
> could put the commit log on the same RAID volume to see if that improves 
> writes. 
>  
> The config we tried modifying so far was concurrent_reads to (16 * number of 
> drives) and concurrent_writes to (8 * number of cores) as per 
> 256 write threads is a lot. Make sure the commit log can keep up, I would put 
> it back to 32, maybe try 64. Not sure the concurrent list for the commit log 
> will work well with that many threads. 
>  
> May want to put the reads down as well. 
>  
> It’s easier to tune the system if you can provide some info on the workload. 
>  
> Cheers
>  
> -----------------
> Aaron Morton
> New Zealand
> @aaronmorton
>  
> Co-Founder & Principal Consultant
> Apache Cassandra Consulting
> http://www.thelastpickle.com
>  
> On 7/11/2013, at 12:35 pm, Arindam Barua <aba...@247-inc.com> wrote:
> 
> 
>  
> We want to upgrade our Cassandra cluster to have newer hardware, and were 
> wondering if anyone has suggestions on Cassandra or linux config changes that 
> will prove to be beneficial.
> As of now, our performance tests (our application specific as well as 
> cassandra-stress) are not showing any significant difference in the 
> hardwares, which is a little disheartening, since the new hardware has a lot 
> more RAM and CPU.
>  
> Old Hardware: 8 cores (2 quad core), 32 GB RAM, four 1-TB disks ( 1 disk used 
> for commitlog and 3 disks RAID 0 for data)
> New Hardware: 32 cores (2 8-core with hyperthreading), 128 GB RAM, eight 1-TB 
> disks ( 1 disk used for commitlog and 7 disks RAID 0 for data)
>  
> Most of the cassandra config currently is the default, and we are using 
> LeveledCompaction strategy. Default key cache, row cache turned off.
> The config we tried modifying so far was concurrent_reads to (16 * number of 
> drives) and concurrent_writes to (8 * number of cores) as per recommendation 
> in cassandra.yaml, but that didn’t make much difference.
> We were hoping that at least the extra RAM in the new hardware will be used 
> for Linux file caching and hence an improvement in performance will be 
> observed.
>  
> Running Cassandra 1.1.5 currently, but evaluating to upgrade to 1.2.11 soon.
>  
> Thanks,
> Arindam

Reply via email to