<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/rabbitmq-server-git.git, branch decode-method-fields</title>
<subtitle>github.com: rabbitmq/rabbitmq-server.git
</subtitle>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/'/>
<entry>
<title>Reduce CPU usage of rabbit_framing_amqp_0_9_1:decode_method_fields/2</title>
<updated>2021-12-31T01:26:21+00:00</updated>
<author>
<name>David Ansari</name>
<email>david.ansari@gmx.de</email>
</author>
<published>2021-12-31T00:46:18+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=e10247feeedb529692234c3cacb8ecb1bb6c09e6'/>
<id>e10247feeedb529692234c3cacb8ecb1bb6c09e6</id>
<content type='text'>
This diff will generate module rabbit_framing_amqp_0_9_1 with
re-ordered clauses of function decode_method_fields/2.

After this change, basic class will be at the top of the function
clauses. That's better because for example basic.publish and basic.ack
are called far more often than for example methods of class connection,
channel or exchange.

Note that "the compiler does not rearrange clauses that match binaries."
See https://www.erlang.org/doc/efficiency_guide/functions.html#pattern-matching

Measurement taken on an Ubuntu 20.04 VM before and after this change:
1. Install latest Erlang from master (i.e. Erlang 25)
2. RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+JPperf true +S 1" make run-broker
   (Single scheduler makes the flame graph easier to read.)
3. Run rabbitmq-perf-test without any parameters
4. sudo perf record -g -F 9999 -p &lt;pid&gt; -- sleep 5
   where &lt;pid&gt; is the output of 'os:getpid().' (in the Erlang shell).
   This samples CPU stack traces via frame pointers of
   rabbitmq-server at 9999 Hertz for 5 seconds.
5. Generate a differential flame graph as described in
   https://www.brendangregg.com/blog/2014-11-09/differential-flame-graphs.html

Before this change, stack frame rabbit_framing_amqp_0_9_1:decode_method_fields/2
was 1.57% present in all stack trackes, most of the time (&gt; 1%) running
on the CPU, i.e. directly consuming CPU cycles.
This does not sound like a lot, but is actually quite a lot for a single
function!

The diffential flame graph depicts a single dark blue frame: function decode_method_fields
with a reduction of ~0.85%.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This diff will generate module rabbit_framing_amqp_0_9_1 with
re-ordered clauses of function decode_method_fields/2.

After this change, basic class will be at the top of the function
clauses. That's better because for example basic.publish and basic.ack
are called far more often than for example methods of class connection,
channel or exchange.

Note that "the compiler does not rearrange clauses that match binaries."
See https://www.erlang.org/doc/efficiency_guide/functions.html#pattern-matching

Measurement taken on an Ubuntu 20.04 VM before and after this change:
1. Install latest Erlang from master (i.e. Erlang 25)
2. RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+JPperf true +S 1" make run-broker
   (Single scheduler makes the flame graph easier to read.)
3. Run rabbitmq-perf-test without any parameters
4. sudo perf record -g -F 9999 -p &lt;pid&gt; -- sleep 5
   where &lt;pid&gt; is the output of 'os:getpid().' (in the Erlang shell).
   This samples CPU stack traces via frame pointers of
   rabbitmq-server at 9999 Hertz for 5 seconds.
5. Generate a differential flame graph as described in
   https://www.brendangregg.com/blog/2014-11-09/differential-flame-graphs.html

Before this change, stack frame rabbit_framing_amqp_0_9_1:decode_method_fields/2
was 1.57% present in all stack trackes, most of the time (&gt; 1%) running
on the CPU, i.e. directly consuming CPU cycles.
This does not sound like a lot, but is actually quite a lot for a single
function!

The diffential flame graph depicts a single dark blue frame: function decode_method_fields
with a reduction of ~0.85%.
</pre>
</div>
</content>
</entry>
<entry>
<title>#3925 follow-up: add a rabbit_common Bazel dep</title>
<updated>2021-12-27T22:30:07+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-27T22:30:07+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=4993fefa08fa0785385d23465d1f6de20bd4649c'/>
<id>4993fefa08fa0785385d23465d1f6de20bd4649c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>#3925 follow-up: don't include Erlang client headers</title>
<updated>2021-12-27T22:24:32+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-27T22:24:32+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=19ae35aa14a97400d8052dffa52bfdd2eed30086'/>
<id>19ae35aa14a97400d8052dffa52bfdd2eed30086</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>#3925 follow-up: update Bazel files to match new suite names</title>
<updated>2021-12-27T22:19:00+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-27T22:19:00+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=7ded41f26a6cff8d0de13b8022c2985db7405ebb'/>
<id>7ded41f26a6cff8d0de13b8022c2985db7405ebb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'thuandb-master'</title>
<updated>2021-12-27T21:36:22+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-27T21:36:22+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=a29a68a63297ec64a28d14ae260ef66511f2c5d1'/>
<id>a29a68a63297ec64a28d14ae260ef66511f2c5d1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Rename two newly introduced test modules</title>
<updated>2021-12-27T21:35:55+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-27T21:35:55+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=b569ab5d74c9078c285e1b1cfce6fdd5f2291c79'/>
<id>b569ab5d74c9078c285e1b1cfce6fdd5f2291c79</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>delegate: documentation edits</title>
<updated>2021-12-26T01:32:00+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-26T00:19:33+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=dfa730b7370664ae40011cf83a911be018523c73'/>
<id>dfa730b7370664ae40011cf83a911be018523c73</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Make xref happy</title>
<updated>2021-12-26T01:32:00+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-23T14:28:01+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=202f881601128e729d1d98184cbb3690773d6df4'/>
<id>202f881601128e729d1d98184cbb3690773d6df4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Import definitions: support user limits</title>
<updated>2021-12-26T01:32:00+00:00</updated>
<author>
<name>dcorbacho</name>
<email>dparracorbacho@piotal.io</email>
</author>
<published>2021-12-23T10:33:44+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=c88605aab43f8da060522b2fcd8ad9c35757cb18'/>
<id>c88605aab43f8da060522b2fcd8ad9c35757cb18</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Cosmetics</title>
<updated>2021-12-26T01:32:00+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>michael@clojurewerkz.org</email>
</author>
<published>2021-12-22T15:42:33+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=5d2a735ae74c076b1f57e6d9c211cc4aab991788'/>
<id>5d2a735ae74c076b1f57e6d9c211cc4aab991788</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
