[requirements][placement] orjson instead of stdlib json
Matthew Thode
mthode at mthode.org
Wed Aug 28 11:30:36 UTC 2019
On 19-08-28 10:13:01, Sean Mooney wrote:
> On Wed, 2019-08-28 at 09:47 +0100, Chris Dent wrote:
> > Requirements people:
> >
> > For the past few months we've been doing profiling of placement,
> > modeling large clouds where many results (7000 resource providers)
> > will be returned in response to common requests.
> >
> > One of the last remaining chunks of slowness is serializing the very
> > large dicts representing those providers (and associated allocation
> > requests) to JSON (greater than 100k lines when pretty printed).
> > Using the oslo jsonutils (which is a light wrapper over the stdlib
> > 'json' module) approximately 25% of time is consumed by dumps().
> >
> > Using orjson [1] instead, time consumption drops to 1%, so this is
> > something it would be good to make real in placement (and perhaps
> > other projects that have large result sets).
> if the 25% to 1% numbers are real. e.g. the cpu time does not move to
> somewhere else instead then i would be very interested to see this
> used in oslo.versioned object and/or the sdk.
> > There's a WIP that
> > demonstrates its use at [2].
> >
> > I'm posting about it because JSON serialization seems like it might
> > be an area that the requirements team has greater interest than some
> > other areas.
> >
> > Also, orjson is only Python 3, so use needs to be adapted for Python
> > 2, as shown in the WIP [2].
> or wait untill octber/novemebr when we officly drop python 2 support
> that said from a redhat point of view all our future openstack release form
> stien will be on rhel8 which is python36 only by default(python2 is not install on rhel8).
> so we will be shipping openstack on python 3 stating with stien.
> >
> > Otherwise it's fine: active, Apache2 or MIT license.
> >
> > Thoughts?
> >
> > [1] https://pypi.org/project/orjson/
> > [2] https://review.opendev.org/#/c/674661/
> >
> >
> >
>
>
One thing we seek to avoid is duplicating requirements we already track.
Though we have allowed C based python libs for speed.
Is it possible to try ujson as that's approved and in global-reqs
already (and supported by anyjson, also in global-reqs). It hasn't been
updated since 2016 and simple PRs/issues are unresolved, though
monasca-common and x/kiloeyes use it. Anyjson itself seems to be in a
similiar situation.
If we'd move to another c based json-lib I'd like to remove ujson (and
possibly look at anyjson too, though it has slightly more usage). There
may be other json-libs in global reqs that meet your needs though. I'd
recommend checking it out first.
https://github.com/openstack/requirements/blob/master/global-requirements.txt
UJSON
+--------------------------+----------------------------------------------------------+------+-------------------+
| Repository | Filename | Line | Text |
+--------------------------+----------------------------------------------------------+------+-------------------+
| openstack/monasca-common | requirements.txt | 11 | ujson>=1.35 # BSD |
| x/kiloeyes | requirements.txt | 19 | ujson>=1.33 |
+--------------------------+----------------------------------------------------------+------+-------------------+
ANYJSON
+-----------------------------+---------------------------------------------------------------------+------+-----------------------+
| Repository | Filename | Line | Text |
+-----------------------------+---------------------------------------------------------------------+------+-----------------------+
| openstack/faafo | requirements.txt | 5 | anyjson>=0.3.3 |
| openstack/fuel-qa | fuelweb_test/requirements.txt | 5 | anyjson>=0.3.3 # BSD |
| openstack/fuel-web | nailgun/requirements.txt | 8 | anyjson>=0.3.3 |
| openstack/murano-agent | requirements.txt | 5 | anyjson>=0.3.3 # BSD |
| openstack/os-apply-config | requirements.txt | 6 | anyjson>=0.3.3 # BSD |
| openstack/os-collect-config | requirements.txt | 6 | anyjson>=0.3.3 # BSD |
| openstack/os-net-config | requirements.txt | 5 | anyjson>=0.3.3 # BSD |
| openstack/tacker | requirements.txt | 9 | anyjson>=0.3.3 # BSD |
| starlingx/config | sysinv/sysinv/sysinv/requirements.txt | 4 | anyjson>=0.3.3 |
| starlingx/ha | service-mgmt-client/sm-client/requirements.txt | 2 | anyjson>=0.3.3 |
| starlingx/metal | inventory/inventory/requirements.txt | 8 | anyjson>=0.3.3 |
| x/apmec | requirements.txt | 9 | anyjson>=0.3.3 # BSD |
| x/daisycloud-core | code/daisy/requirements.txt | 9 | anyjson>=0.3.3 |
| x/novajoin | test-requirements.txt | 8 | anyjson>=0.3.3 # BSD |
| x/omni | creds_manager/test-requirements.txt | 8 | anyjson>=0.3.3 # BSD |
+-----------------------------+---------------------------------------------------------------------+------+-----------------------+
--
Matthew Thode
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.openstack.org/pipermail/openstack-discuss/attachments/20190828/7644cf19/attachment.sig>
More information about the openstack-discuss
mailing list