[ https://issues.apache.org/jira/browse/CASSANDRA-1896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12975319#action_12975319 ]
Tsiki commented on CASSANDRA-1896: ---------------------------------- As I had this issue not only with Cassandra, I tried several settings. First, was just to increase the heap size (Xmx). Then I tried specifying XX:NewRatio but that didn't work well at all. I also tried setting Xmx=Xms with NewRatio. Finally, I landed with XX:NewSize to explicitly set the young generation size. I didn't play around with survivor spaces. > Improve throughput by adding buffering to the inter-node TCP communication > -------------------------------------------------------------------------- > > Key: CASSANDRA-1896 > URL: https://issues.apache.org/jira/browse/CASSANDRA-1896 > Project: Cassandra > Issue Type: Improvement > Components: Core > Affects Versions: 0.6 > Reporter: Tsiki > Assignee: Brandon Williams > Fix For: 0.6.9, 0.7.1 > > Attachments: 1896.txt > > > The inbound and outbound TCP implementation under org.apache.cassandra.net > does not buffer the socket streams. A simple change in IncomingTcpConnection > and OutboundTcpConnection may give a rather big throughput increase. In my > tests, I got up t o 30% more out of my cluster. Below is the diff of these > two files with buffering included. The diff is over release 0.6.5 but can be > quite simply applied also to 0.7. I suggest perhaps to limit the buffered > input stream I added in IncomingTcpConnection to 4K. The Outbound > implementation can surely be implemented a bit better (remove some of the > code I duplicated there). > diff -r > apache-cassandra-0.6.5-src/src/java/org/apache/cassandra/net/IncomingTcpConnection.java > > fix/apache-cassandra-0.6.5-src/src/java/org/apache/cassandra/net/IncomingTcpConnection.java > 44c44 > < input = new DataInputStream(new > BufferedInputStream(socket.getInputStream())); > --- > > input = new DataInputStream(socket.getInputStream()); > diff -r > apache-cassandra-0.6.5-src/src/java/org/apache/cassandra/net/OutboundTcpConnection.java > > fix/apache-cassandra-0.6.5-src/src/java/org/apache/cassandra/net/OutboundTcpConnection.java > 77d76 > < byte[] buf = new byte[4096]; > 80,112c79,89 > < int l = 0; > < ByteBuffer bb; > < while ((bb = queue.peek()) != null && l+bb.limit() < > buf.length) { > < bb = take(); > < System.arraycopy(bb.array(), 0, buf, l, bb.limit()); > < l += bb.limit(); > < } > < if (l == 0) { > < bb = take(); > < if (bb == CLOSE_SENTINEL) > < { > < disconnect(); > < continue; > < } > < if (socket != null || connect()) > < writeConnected(bb); > < else > < // clear out the queue, else gossip messages back up. > < queue.clear(); > < } else { > < if (socket != null || connect()) { > < try { > < output.write(buf, 0, l); > < if (queue.peek() == null) > < output.flush(); > < } catch (IOException e) { > < logger.info("error writing to " + endpoint); > < disconnect(); > < } > < } else { > < queue.clear(); > < } > < } > --- > > ByteBuffer bb = take(); > > if (bb == CLOSE_SENTINEL) > > { > > disconnect(); > > continue; > > } > > if (socket != null || connect()) > > writeConnected(bb); > > else > > // clear out the queue, else gossip messages back up. > > queue.clear(); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.