https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112015-06-24T09:10:46ZRuby Issue Tracking SystemRuby master - Feature #11298: [PATCH] socket: memoize common socket families in fptr->modehttps://redmine.ruby-lang.org/issues/11298?journal_id=531112015-06-24T09:10:46Zfunny_falcon (Yura Sokolov)funny.falcon@gmail.com
<ul></ul><p>Did you make a mistake, or <code>after</code> is really slower?</p> Ruby master - Feature #11298: [PATCH] socket: memoize common socket families in fptr->modehttps://redmine.ruby-lang.org/issues/11298?journal_id=531122015-06-24T15:38:52Znormalperson (Eric Wong)normalperson@yhbt.net
<ul></ul><p><a href="mailto:funny.falcon@gmail.com" class="email">funny.falcon@gmail.com</a> wrote:</p>
<blockquote>
<p>Did you make a mistake, or <code>after</code> is really slower?</p>
</blockquote>
<p>Good catch! I mislabeled the lines. This patch makes things faster.</p> Ruby master - Feature #11298: [PATCH] socket: memoize common socket families in fptr->modehttps://redmine.ruby-lang.org/issues/11298?journal_id=532342015-07-02T02:36:52ZAnonymous
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>Applied in changeset r51097.</p>
<hr>
<p>socket: memoize common socket families in fptr->mode</p>
<p>This provides a minor speedup by avoiding an extra syscall</p>
<pre><code>require 'socket'
require 'benchmark'
nr = 100000
msg = 'hello world'
buf = ''
size = msg.bytesize
puts(Benchmark.measure do
UNIXSocket.pair(:SEQPACKET) do |a, b|
nr.times do
a.sendmsg_nonblock(msg, 0, exception: false)
b.recv(size, 0, buf)
end
end
end)
user system total real
</code></pre>
<p>before: 0.330000 0.340000 0.670000 ( 0.678235)<br>
after: 0.290000 0.240000 0.530000 ( 0.534527)</p>
<ul>
<li>ext/socket/rubysocket.h: flags for common socket families<br>
(rsock_getfamily): update signature</li>
<li>include/ruby/io.h: comment socket FMODE flags</li>
<li>ext/socket/init.c (rsock_getfamily): memoize family</li>
<li>ext/socket/basicsocket.c: adjust rsock_getfamily calls</li>
<li>ext/socket/ancdata.c: ditto<br>
<a href="/issues/11298">[ruby-core:69713]</a> [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: [PATCH] socket: memoize common socket families in fptr->mode (Closed)" href="https://redmine.ruby-lang.org/issues/11298">#11298</a>]</li>
</ul>