[ https://issues.apache.org/jira/browse/CASSANDRA-9673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14629357#comment-14629357 ]
Stefania commented on CASSANDRA-9673: ------------------------------------- I've attached an archive containing .jfr files for trunk and the patched branch. I generated the files using the following dtest: {code} def logged_batch_stress_test(self): """ @jira_ticket CASSANDRA-9673, a stress test to record any improvements in GC usage """ cluster = self.cluster cluster.populate(3) cluster.start(wait_other_notice=True, jvm_args=["-XX:+UnlockCommercialFeatures", "-XX:+FlightRecorder"]) nodes = cluster.nodelist() self._start_jfr_recording(nodes) nodes[0].stress(['user', 'profile=/home/stefania/git/cstar/9673.yaml', 'ops(insert=1,)', 'n=50000', '-rate', 'threads=8']) self._dump_jfr_recording(nodes) def _start_jfr_recording(self, nodes): """ Start jfr recording provided the cluster was started with jvm_args=["-XX:+UnlockCommercialFeatures", "-XX:+FlightRecorder"] """ for node in nodes: p = subprocess.Popen(['jcmd', str(node.pid), 'JFR.start'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() debug(stdout) debug(stderr) def _dump_jfr_recording(self, nodes): """ Save jfr recording to file """ for node in nodes: p = subprocess.Popen(['jcmd', str(node.pid), 'JFR.dump', 'recording=1', 'filename=recording_{}.jfr'.format(node.address())], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() debug(stdout) debug(stderr) {code} 9673.yaml is included in the archive attached or available [here|https://dl.dropboxusercontent.com/u/15683245/9673.yaml]. I couldn't figure out any other way to use logged batches in cassandra-stress other than with a user schema, that is the only reason for the user schema. I've also run a cperf test with the same stress test: http://cstar.datastax.com/tests/id/20a0d848-2b84-11e5-be06-42010af0688f I don't notice any differences in the cperf test and I am not at all familiar with analyzing .jfr files (first time I use FlightRecorder ever). If anything it seems to me the patched branch uses less memory but has more GCs but perhaps I should have used a bigger sample. I also only looked at the coordinator .jfrs (the first node). [~JoshuaMcKenzie], any suggestions or comments? > Improve batchlog write path > --------------------------- > > Key: CASSANDRA-9673 > URL: https://issues.apache.org/jira/browse/CASSANDRA-9673 > Project: Cassandra > Issue Type: Improvement > Reporter: Aleksey Yeschenko > Assignee: Stefania > Fix For: 3.0.0 rc1 > > Attachments: 9673.tar.gz > > > Currently we allocate an on-heap {{ByteBuffer}} to serialize the batched > mutations into, before sending it to a distant node, generating unnecessary > garbage (potentially a lot of it). > With materialized views using the batchlog, it would be nice to optimise the > write path: > - introduce a new verb ({{Batch}}) > - introduce a new message ({{BatchMessage}}) that would encapsulate the > mutations, expiration, and creation time (similar to {{HintMessage}} in > CASSANDRA-6230) > - have MS serialize it directly instead of relying on an intermediate buffer > To avoid merely shifting the temp buffer to the receiving side(s) we should > change the structure of the batchlog table to use a list or a map of > individual mutations. -- This message was sent by Atlassian JIRA (v6.3.4#6332)