[pypy-dev] PyPy proved slower than Python when used os.rename and os.link [ Suggest how to get rid of this ]
Alex Gaynor
alex.gaynor at gmail.com
Fri May 18 07:46:30 CEST 2012
On Fri, May 18, 2012 at 1:42 AM, Sasikanth Eda <sasikanth.ece at gmail.com>wrote:
> Hai Alex,
>
> Thanks for your reply and making me understand about PyPy Jit.
>
> Some more query on PyPy;
>
> 1. In my trails I agree that I don't have loops in my program so PyPy is
> not able to optimize it. But it should at least should give me the same
> execution time as when executed with python.
> So what might be the reason for this that PyPy took more time than
> Python ?
>
>
PyPy's interpreter isn't as fast as CPython, it's only with our JIT that we
are faster for most code.
> 2. Suppose assume a condition where we have a lot of loops and function
> calls in a python program and it is called by several independent processes
> (a typical cgi-model). Then what could be the thought is we use PyPy for
> such programs (i.e in specific whether are we going to get any performance
> changes when compared with python ? )
>
>
This is a very non-optimal case for PyPy, a persistant server model, as
used by most WSGI servers would be much better.
Alex
> Thanking you,
> Sasikanth
>
> On Fri, May 18, 2012 at 10:41 AM, Alex Gaynor <alex.gaynor at gmail.com>wrote:
>
>>
>>
>> On Fri, May 18, 2012 at 12:58 AM, Sasikanth Eda <sasikanth.ece at gmail.com>wrote:
>>
>>> Hai All,
>>>
>>> In trails of finding the execution time lapse between Python and PyPy ,
>>> its proved that PyPy is slower than Python.
>>>
>>> Here are the trials done ;
>>>
>>> *Step-1: Written a Python code that uses repeated os.rename()*
>>> *
>>> *
>>> *code: (file name : rename.py)*
>>> * #!/usr/bin/env python*
>>> *
>>> *
>>> * import os*
>>> * import sys*
>>> *
>>> *
>>> * os.chdir("/opt/pypy-1.8/bin")*
>>> * print "Rename count -1 (a1 -> a2)"*
>>> * os.rename("a1","a2")*
>>> * print "Rename count -2 (a2 -> a3)"*
>>> * os.rename("a2","a3")*
>>> * print "Rename count -3 (a3 -> a4)"*
>>> * os.rename("a3","a4")*
>>> * print "Rename count -4 (a4 -> a5)"*
>>> * os.rename("a4","a5")*
>>> * print "Rename count -5 (a5 -> a6)"*
>>> * os.rename("a5","a6")*
>>> * print "Rename count -6 (a6 -> a7)"*
>>> * os.rename("a6","a7")*
>>> * print "Rename count -7 (a7 -> a8)"*
>>> * os.rename("a7","a8")*
>>> * print "Rename count -8 (a8 -> a9)"*
>>> * os.rename("a8","a9")*
>>> * print "Rename count -9 (a9 -> a0)"*
>>> * os.rename("a9","a0")*
>>> * print "Rename count -10 (a0 -> B0)"*
>>> * os.rename("a0","B0")*
>>> *
>>> *
>>> *Step-2: Observed Execution time with Python 2.7*
>>> *
>>> *
>>> * [root at Manojkiran bin]# time python rename.py *
>>> * Rename count -1 (a1 -> a2)*
>>> * Rename count -2 (a2 -> a3)*
>>> * Rename count -3 (a3 -> a4)*
>>> * Rename count -4 (a4 -> a5)*
>>> * Rename count -5 (a5 -> a6)*
>>> * Rename count -6 (a6 -> a7)*
>>> * Rename count -7 (a7 -> a8)*
>>> * Rename count -8 (a8 -> a9)*
>>> * Rename count -9 (a9 -> a0)*
>>> * Rename count -10 (a0 -> B0)*
>>> *
>>> *
>>> * real 0m0.031s*
>>> * user 0m0.021s*
>>> * sys 0m0.010s*
>>>
>>> Step-3:* Observed Execution time with PyPy 1.8*
>>> *
>>> *
>>> [root at Manojkiran bin]# time ./pypy rename.py
>>> * ./pypy: /usr/local/ssl/lib/libssl.so.0.9.8: no version
>>> information available (required by ./pypy)*
>>> * ./pypy: /usr/local/ssl/lib/libcrypto.so.0.9.8: no version
>>> information available (required by ./pypy)*
>>> * Rename count -1 (a1 -> a2)*
>>> * Rename count -2 (a2 -> a3)*
>>> * Rename count -3 (a3 -> a4)*
>>> * Rename count -4 (a4 -> a5)*
>>> * Rename count -5 (a5 -> a6)*
>>> * Rename count -6 (a6 -> a7)*
>>> * Rename count -7 (a7 -> a8)*
>>> * Rename count -8 (a8 -> a9)*
>>> * Rename count -9 (a9 -> a0)*
>>> * Rename count -10 (a0 -> B0)*
>>>
>>> real 0m0.054s
>>> user 0m0.036s
>>> sys 0m0.016s
>>> *
>>> *
>>> *Step-4: Written a Python code that uses repeated os.link()*
>>> *
>>> *
>>> *code: (file name : link.py)*
>>> * #!/usr/bin/env python*
>>> *
>>> *
>>> * import os*
>>> * import sys*
>>> *
>>> *
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l0")*
>>> * print "Linked count -1 (l0 -> lo)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l1")*
>>> * print "Linked count -2 (l0 -> l1)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l2")*
>>> * print "Linked count -3 (l0 -> l2)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l3")*
>>> * print "Linked count -4 (l0 -> l3)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l4")*
>>> * print "Linked count -5 (l0 -> l4)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l5")*
>>> * print "Linked count -6 (l0 -> l5)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l6")*
>>> * print "Linked count -7 (l0 -> l6)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l7")*
>>> * print "Linked count -8 (l0 -> l7)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l8")*
>>> * print "Linked count -9 (l0 -> l8)"*
>>> * os.link("/opt/pypy-1.8/bin/l0","/opt/pypy-1.8/bin/test/l9")*
>>> * print "Linked count -10 (l0 -> l9)"*
>>>
>>> *Step-5: Observed Execution time with Python 2.7*
>>> *
>>> *
>>> * [root at Manojkiran bin]# time python link.py *
>>> * Linked count -1 (l0 -> l0)*
>>> * **Linked** count -2 (l0 -> l1)*
>>> * **Linked** count -3 (l0 -> l2)*
>>> * **Linked** count -4 (l0 -> l3)*
>>> * **Linked** count -5 (l0 -> l4)*
>>> * **Linked** count -6 (l0 -> l5)*
>>> * **Linked** count -7 (l0 -> l6)*
>>> * **Linked** count -8 (l0 -> l7)*
>>> * **Linked** count -9 (l0 -> l8)*
>>> * **Linked** count -10 (l0 -> l9)*
>>> *
>>> *
>>> * real 0m0.028s*
>>> * user 0m0.020s*
>>> * sys 0m0.008s*
>>>
>>> Step-6:* Observed Execution time with PyPy 1.8*
>>> *
>>> *
>>> [root at Manojkiran bin]# time ./pypy link.py
>>> * ./pypy: /usr/local/ssl/lib/libssl.so.0.9.8: no version
>>> information available (required by ./pypy)*
>>> * ./pypy: /usr/local/ssl/lib/libcrypto.so.0.9.8: no version
>>> information available (required by ./pypy)*
>>> * Linked count -1 (l0 -> l0)*
>>> * **Linked** count -2 (l0 -> l1)*
>>> * **Linked** count -3 (l0 -> l2)*
>>> * **Linked** count -4 (l0 -> l3)*
>>> * **Linked** count -5 (l0 -> l4)*
>>> * **Linked** count -6 (l0 -> l5)*
>>> * **Linked** count -7 (l0 -> l6)*
>>> * **Linked** count -8 (l0 -> l7)*
>>> * **Linked** count -9 (l0 -> l8)*
>>> * **Linked** count -10 (l0 -> l9)*
>>> *
>>> *
>>> real 0m0.056s
>>> user 0m0.032s
>>> sys 0m0.023s
>>>
>>> Hence in my understanding Python is better in terms of execution time
>>> when compared with PyPy.
>>>
>>> Kindly suggest me if my trails are proper and why PyPy failed to achieve
>>> better speed then PyPy ?
>>>
>>> Is this a know issue or whether we have any fix for this ?
>>>
>>> Thanking you,
>>> --
>>> Sasikanth
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> pypy-dev mailing list
>>> pypy-dev at python.org
>>> http://mail.python.org/mailman/listinfo/pypy-dev
>>>
>>>
>> PyPy's JIT works by optimizing loops and functions that are frequently
>> run, this generally means your code needs to run at least .5 seconds for
>> the JIT to kick in and show benefits. Your code contains no loops for the
>> JIT to optimize.
>>
>> Alex
>>
>> --
>> "I disapprove of what you say, but I will defend to the death your right
>> to say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
>> "The people's good is the highest law." -- Cicero
>>
>>
>
>
>
>
>
>
--
"I disapprove of what you say, but I will defend to the death your right to
say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
"The people's good is the highest law." -- Cicero
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20120518/839ab410/attachment-0001.html>
More information about the pypy-dev
mailing list