These are indeed interesting numbers, thanks for running them!  The one thing to be careful of is that IPython uses JSON to serialize by default.  If you are on Python 2.6, the stdlib json is *extremely* slow.  IPython will prefer jsonlib/jsonlib2 or more recent simplejson if you have them, all of which are significantly faster.  If you are concerned with serialization performance, you can specify a different serialization scheme, such as cPickle, which you can activate with:<div>


<br></div><div>c.Session.packer=&#39;pickle&#39; in your config files or on the command-line (you will then also have to specify `rc = Client(packer=&#39;pickle&#39;) when you create your Client`</div><div><br></div><div>

When I am checking performance limits, I tend to use <a href="http://msgpack.org/" target="_blank">msgpack</a>, which I enable with:</div>
<div><br></div><div>c.Session.packer=&#39;msgpack.packb&#39;</div><div>c.Session.unpacker=&#39;msgpack.unpackb&#39;</div><div><br></div><div>in my config files.</div><div><br></div><div>(again, now you have to do: `rc = Client(packer=&#39;msgpack.packb&#39;, upacker=&#39;msgpack.unpackb&#39;)`  I will get the config properly hooked up to the Client soon, so it will inherit correctly from the controller)</div>


<div><br></div><div>Serializing a list of ints is more a test of the message serialization scheme than IPython&#39;s throughput, because pretty much the whole time will be spent making a giant JSON list (pickle should be much faster).  If you really want to test the raw throughput of IPython+ØMQ, you should try sending numpy arrays, which are supported with zero-copy sends, that allow us to reach ~Gb limits on unimpressive laptops:</div>


<div><br></div><div>rc = Client()</div><div>dview = rc[:]</div><div>with dview.sync_imports():</div><div>    import numpy</div><div>dview.execute(&quot;foo=numpy.random.random(62500)&quot;, block=True) # 8-byte floats</div>


<div>%time dview.pull(&#39;foo&#39;, block=True);</div><div><br></div><div>-MinRK</div><div><br></div><div><div class="gmail_quote">On Sun, Aug 7, 2011 at 19:38, RICHARD Georges-Emmanuel <span dir="ltr">&lt;<a href="mailto:perspective.electronic@gmail.com" target="_blank">perspective.electronic@gmail.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Minrk,<br>
<br>
first of all congratulation to all the ipython team for the great work<br>
you did with the release 0.11, and ZMQ 2.1.7. I&#39;m a fan.<br>
<br>
I tried the parallel with direct views, that&#39;s great.<br>
<br>
with a machine A (192.168.1.4)<br>
1)    ipcontroller --ip=&#39;*&#39;<br>
from machine&quot;A&quot; I remote start ipengine on machine&quot;B&quot; (192.168.1.200)<br>
2)    ssh <a href="mailto:root@192.168.1.200" target="_blank">root@192.168.1.200</a> ipengine<br>
--file=/sharedMachineAfs/root/.config/ipython/profile_default/security/ipcontroller-engine.json<br>
&amp;<br>
(I do the point 2)  twice to get 2 ipengines, I also tried in local with<br>
only machine&quot;A&quot;)<br>
<br>
then I start ipython to start a client, and I want to evaluate the<br>
bandwith (and latency in a second step).<br>
<br>
import time<br>
from IPython.parallel import Client<br>
rc = Client()<br>
dview=rc[:]<br>
dview.execute(&quot;FOO=[0.0 for i in xrange(62500)&quot;,block=True)  #  62500 *<br>
float 64 -&gt; 500kB of data to transfer<br>
[None,None]<br>
T=time.time();tmp=dview.pull(&#39;FOO&#39;);print time.time() - T    # for 2<br>
ipengines<br>
T=time.time();tmp=dview.pull(&#39;FOO&#39;,0);print time.time() - T # for 1<br>
ipengine<br>
<br>
in case of machine&quot;A&quot; as controller and machine&quot;B&quot; as 2 ipengines<br>
pull FOO from machine&quot;B&quot; 2 engines 9.03 seconds        (2*500kB/9.03 =&gt;<br>
110kB/s)     on a network 100Mb/s (12.MB/s)<br>
pull FOO from machine&quot;B&quot; 1 engine 4.7     seconds        (500kB/4.7 =&gt;<br>
106kB/s)<br>
<div><br>
in case of machine&quot;A&quot; as controller and as 2 ipengines<br>
pull FOO from machine&quot;A&quot; 2 engines 3.4   seconds        (2*500kB/3.4 =&gt;<br>
294kB/s) on a local machine<br>
pull FOO from machine&quot;A&quot; 1 engine 2.7     seconds        (500kB/2.7 =&gt;<br>
185kB/s)<br>
<br>
</div>I guess I&#39;m doing something wrong, or I missuse something. Any hint<br>
would be appreciate, anyway I will continue to dig in.<br>
<br>
Machine&quot;A&quot; and &quot;B&quot; are running under RHEL5 flavoured distro, with python<br>
2.6, ipython 0.11 installed from source.<br>
Machine&quot;A&quot; is a Quad core 2.6GHz<br>
Machine&quot;B&quot; is an AMD64 3000+  1.8GHz (pretty old but still alive)<br>
<br>
cheers.<br>
             Joe<br>
<font color="#888888"><br>
<br>
<br>
--<br>
RICHARD Georges-Emmanuel<br>
CEO - Electronic and Computer Engineer<br>
<a href="mailto:perspective.electronic@gmail.com" target="_blank">perspective.electronic@gmail.com</a><br>
遠大電子有限公司 (統一編號24470425)<br>
手機 <a href="tel:%2B886930319433" value="+886930319433" target="_blank">+886930319433</a><br>
電話 <a href="tel:%2B88635735463" value="+88635735463" target="_blank">+88635735463</a><br>
</font><div><div></div><div><br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org" target="_blank">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</div></div></blockquote></div><br></div>