Hi!
 
Can anyone please reveiw this patch
 
Explanation:
 
For small amount of objects (for example short ACL) there is no problems in python api, but if you trying to load thousands - papi works very slow. Loading ACL with 256k entries could take forever.
 
Here below is comparsion of uploading 128k entries ACL:
 
- excuted command:
r = vpp.api.acl_add_replace(acl_index=0xffffffff, count=len(rules[:128000]) , r=rules[:128000])
 
- without fix it took 121 seconds, and scales quadratically:
         15488160 function calls (14592160 primitive calls) in 121.454 seconds
 
   Ordered by: cumulative time
 
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000  121.454  121.454 {built-in method builtins.exec}
        1    0.022    0.022  121.454  121.454 <string>:1(<module>)
        1    0.000    0.000  121.432  121.432 vpp_papi.py:120(__call__)
        1    0.000    0.000  121.432  121.432 vpp_papi.py:494(f)
        1    0.001    0.001  121.432  121.432 vpp_papi.py:694(_call_vpp)
 896001/1    6.084    0.000  118.642  118.642 vpp_serializer.py:627(pack)
        1  103.522  103.522  118.640  118.640 vpp_serializer.py:298(pack)
   256000    0.469    0.000    9.855    0.000 vpp_serializer.py:47(conversion_packer)
   256000    1.368    0.000    3.942    0.000 vpp_serializer.py:472(pack)
   256008    1.338    0.000    3.349    0.000 {method 'format' of 'str' objects}
        1    0.000    0.000    2.715    2.715 vpp_papi.py:728(<listcomp>)
   256000    0.448    0.000    2.011    0.000 ipaddress.py:610(__repr__)
   256000    0.435    0.000    1.563    0.000 ipaddress.py:613(__str__)
  1792005    0.819    0.000    1.330    0.000 vpp_serializer.py:111(pack)
  1152001    0.690    0.000    1.281    0.000 vpp_serializer.py:37(conversion_required)
   256000    0.610    0.000    1.249    0.000 vpp_format.py:134(<lambda>)
   256000    0.323    0.000    1.151    0.000 vpp_serializer.py:521(pack)
   256000    0.215    0.000    1.077    0.000 ipaddress.py:585(__str__)
   512000    0.475    0.000    0.897    0.000 vpp_serializer.py:412(pack)
   256000    0.281    0.000    0.862    0.000 ipaddress.py:1162(_string_from_ip_int)
  2304008    0.774    0.000    0.774    0.000 {built-in method builtins.isinstance}
   256002    0.194    0.000    0.697    0.000 __init__.py:1286(debug)
 
 
- with proposed fix it took just 16.5 seconds, and what more important it scales linearly (that means 256k will upload for ~ 32 seconds)
         15488160 function calls (14592160 primitive calls) in 16.516 seconds
 
   Ordered by: cumulative time
 
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   16.516   16.516 {built-in method builtins.exec}
        1    0.012    0.012   16.516   16.516 <string>:1(<module>)
        1    0.000    0.000   16.504   16.504 vpp_papi.py:120(__call__)
        1    0.000    0.000   16.504   16.504 vpp_papi.py:494(f)
        1    0.001    0.001   16.504   16.504 vpp_papi.py:694(_call_vpp)
 896001/1    5.690    0.000   13.723   13.723 vpp_serializer.py:627(pack)
        1    0.133    0.133   13.719   13.719 vpp_serializer.py:298(pack)
   256000    0.474    0.000    9.162    0.000 vpp_serializer.py:47(conversion_packer)
   256000    1.155    0.000    3.370    0.000 vpp_serializer.py:472(pack)
   256008    1.162    0.000    3.161    0.000 {method 'format' of 'str' objects}
        1    0.000    0.000    2.706    2.706 vpp_papi.py:728(<listcomp>)
   256000    0.445    0.000    1.999    0.000 ipaddress.py:610(__repr__)
   256000    0.431    0.000    1.554    0.000 ipaddress.py:613(__str__)
  1792005    0.817    0.000    1.269    0.000 vpp_serializer.py:111(pack)
  1152001    0.633    0.000    1.167    0.000 vpp_serializer.py:37(conversion_required)
   256000    0.220    0.000    1.072    0.000 ipaddress.py:585(__str__)
   256000    0.280    0.000    1.066    0.000 vpp_serializer.py:521(pack)
   256000    0.487    0.000    1.032    0.000 vpp_format.py:134(<lambda>)
   256000    0.272    0.000    0.852    0.000 ipaddress.py:1162(_string_from_ip_int)
   512000    0.400    0.000    0.779    0.000 vpp_serializer.py:412(pack)
  2304008    0.669    0.000    0.669    0.000 {built-in method builtins.isinstance}
   256002    0.178    0.000    0.615    0.000 __init__.py:1286(debug)
 
 
Thanks!
--------------------
Velichkin Viktor,
network engineer
 
 
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#21487): https://lists.fd.io/g/vpp-dev/message/21487
Mute This Topic: https://lists.fd.io/mt/91461104/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to