interesting timings..<br>specially interesting to see that pyrpm is alot faster than the yum for fc7 and the yum used in PRE fc7..<br><br>yum (pre fc7) vs yum fc7 doesn't realy seem to be much of a speed improvement.. some parts are faster but some parts are slower.
<br>funny to see how those 3 versions differ in speed<br><br>i still thinks that a pure c or c++ implementation in combination with mysql will be the fastest.. downside of that is that python and the repository data itself will have to be rebuilded.. and RPM itself will most likely have to get some vital updates.. like bringing in logic in versioning. o well.. that will take time till it gets done i guess.
<br><br><div><span class="gmail_quote">2007/5/15, Florian Festi <<a href="mailto:ffesti@redhat.com">ffesti@redhat.com</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi!<br><br>Yum traditionally used the rpmlib to resolve the dependecies of the packages<br>being installed/removed/updated. This has always restricted yum to very<br>simple algorithms as the interface of the rpmlib doesn't allow much control.
<br><br>The current yum - that will be shipped with F7 - has now replaced the rpmlib<br>by a Python only resolver. I did some test runs to find out the current<br>state of development and to see if the new resolver is an improvement over
<br>the rpmlib.<br><br>The candidates:<br>===============<br><br>* yum-3.0.3 as used in FC6<br>* yum from CVS head (2007/05/07), which is very similar to the yum in F7<br>* pyrpmyum CVS head (2007/05/07) - a pure Python implementation developed
<br>     for testing purposed [1].<br><br>The test cases:<br>===============<br><br>Tests are based in FC-5 run on FC-6.x86_64. All operations are aborted by<br>"pressing n".<br><br>Installs:<br>Try to install into an empty build root. There is a big number of excluded
<br>pkgs to make the install '*' work.<br>    * Normal install: several groups, 856 Pkgs<br>    * Full install: "*", 6057 Pkgs<br>    * Install "[a-k]*", 3052 Pkgs - needs to drag in a lot of<br>
                                    pkgs to satisfy dependencies<br><br>Updates:<br>Before the Updates the "Normal Install" is run and the Pkgs are installed<br>into the build root.<br>    * Empty update<br>    * Update libgnome: 1 Pkg
<br>    * Big update:  346u+12i Pkgs<br>    * Dist upgrade: Enable FC6 repos and do an upgrade; fails for both yum<br>      versions,so don't take results too serious<br><br>Erase:<br>    * glibc: 828 Pkgs<br><br>Warm ups:
<br>Do a install '*'/upgrade to build the caches. Each program has different<br>issues with that. yum-3.0.3 needs to download the rpm headers (Test was run<br>with repos in a NFS mount). All need to build the sqlite databases. pyrpmyum
<br>currently uses a Python only implementation that uses a lot of time. Warm up<br>operations fail for all programs.<br>This all make the results of the warm ups a bit unreliable and questionable.<br>They are included for completeness.
<br><br>Measured Values:<br>================<br><br>All data is from just one test run - so don't expect too high precision. I<br>put 3 different test results into tables:<br><br>    * Real time passed during the test
<br>    * Heap peak - maximum of Memory used<br>    * Heap total - amount of heap memory allocated<br><br>The last one gives an idea of how much data has been moved around.<br><br>Conclusions:<br>============<br><br>Please read the data tables first to get your own impression.
<br><br>Memory usage:<br><br>The new yum saves a lot of memory for big operations (about 50%). The<br>comparison to pyrpmyum shows that it is possible to save even more memory<br>and to drop memory usage below 100MB for all cases. In pyrpmyum this is
<br>achieved with dynamic loading of rpm tags. Some are not even kept in the<br>pkgs but just cached in a least recently used list.<br><br>For really small updates the old 3.0.3 yum wins. I guess this is because it<br>does not do any obsolete handling.
<br><br>Runtime:<br><br>Although the new yum save the very costly rpm header downloads (which take<br>nearly 3 minutes for the whole repository) it is still significantly slower<br>for big operations. Things may look a bit different in real world scenarios
<br>where downloading the headers is even more expensive.<br><br>Nevertheless the performance of the current yum is poor. Runtime behavior<br>has dropped from O(#prco * #rpmlib_calls) to O(#prco^2) (prco = Provides,<br>Requires, Conflicts, Obsoletes). The results of pyrpmyum show that is it
<br>possible to do the depsolving in O(#prco) (Probably just O(#prco * log<br>#prco) but that doesn't matter much).<br><br>There are already plans how to get rid of the quadratic behavior and I hope<br>we can fix these issues before Fedora 8.
<br><br>Have fun<br><br>Florian Festi<br><br>[1] <a href="https://hosted.fedoraproject.org/projects/pyrpm">https://hosted.fedoraproject.org/projects/pyrpm</a><br><br><br><br>Heap peak (MB)<br><br>Operation               | 
3.0.3 | 05/07 | pyrpm<br>------------------------------------------------<br>Warmup: Full install    | 475.3 | 226.6 | 128.6<br>Resolve normal install  |  94.6 |  74.1 |  27.0<br>Resolve full install    | 462.4 | 218.5 |  
59.8<br>Resolve install [a-k]*  | 278.5 | 137.8 |  52.0<br>Resolve empty update    |  25.9 |  52.9 |  45.2<br>Resolve update libgnome |  30.3 |  57.0 |  48.8<br>Resolve big update      | 112.5 | 108.2 |  60.3<br>Resolve erase glibc     | 
210.0 |  99.8 |  39.6<br>Warmup: Dist upgrade    | 162.7 | 107.3 | 112.0<br>Resolve dist upgrade    | 162.4 | 107.3 |  62.9<br><br><br><br><br><br>Heap total (MB)<br><br>This is the total amount of memory requested.<br>The amount of memory being allocated at one time
<br>is much less!<br><br>Operation               | 3.0.3 | 05/07 | pyrpm<br>-----------------------------------------------<br>Warmup: Full install    | 20003 | 90859 | 10829<br>Resolve normal install  |  2088 |  9448 |   639
<br>Resolve full install    | 15402 | 84951 |  4987<br>Resolve install [a-k]*  | 17542 | 24805 |  4121<br>Resolve empty update    |   167 |    80 |   747<br>Resolve update libgnome |   282 |   136 |  1247<br>Resolve big update      |  3497 |  2699 |  2574
<br>Resolve erase glibc     |  1732 |  2192 |  3369<br>Warmup: Dist upgrade    |  6203 |  2644 |  7395<br>Resolve dist upgrade    |  5869 |  2644 |  2154<br><br><br><br><br><br>Real time (s)<br><br>Operation                | 
3.0.3  | 07/05/07| pyrpm<br>----------------------------------------------------<br>Warmup: Full install     | 653.51 | 1064.35 | 147.23<br>Resolve normal install   |  40.59 |  134.11 |   8.04<br>Resolve full install     | 
477.67 | 1093.57 |  51.01<br>Resolve install [a-k]*   | 313.56 |  887.40 |  33.52<br>Resolve empty update     |   6.91 |    6.57 |  13.36<br>Resolve update libgnome  |   3.34 |    2.57 |   7.51<br>Resolve big update       |  
33.04 |   45.56 |  24.81<br>Resolve erase glibc      |  29.83 |   37.72 |  30.95<br>Warmup: Dist upgrade     |  81.42 |   40.67 | 108.50<br>Resolve dist upgrade     |  52.07 |   40.29 |  27.20<br><br><br><br>--<br>fedora-devel-list mailing list
<br><a href="mailto:fedora-devel-list@redhat.com">fedora-devel-list@redhat.com</a><br><a href="https://www.redhat.com/mailman/listinfo/fedora-devel-list">https://www.redhat.com/mailman/listinfo/fedora-devel-list</a><br></blockquote>
</div><br>