Hi, Vineet Gupta wrote,
Hi Thomas,
On 04/03/2017 09:57 PM, Thomas Petazzoni wrote:
So there's a small downside to this - which I reckon will likely not stand out in grand scheme of things - still tabling it here for people to be aware of. This can potentially degrade some of the micro-benchmarks such as LMBench lat_proc shell - since there's now an additional shared library (libtirpc) to load. We spotted this back in 2015 when comparing buildroot (using libtirpc) vs. our homegrown builds (using native toolchain rpc).
How big was the performance hit?
Processor, Processes - times in microseconds - smaller is better
Host OS Mhz null null open slct sig sig fork exec sh call I/O stat clos TCP inst hndl proc proc proc
A7-720mhz Linux 3.4.61 720 0.50 0.97 4.37 9.38 26.0 1.00 5.59 1103 5061 8432 A7-720mhz Linux 3.4.61 720 0.50 0.96 4.24 9.31 26.0 1.00 5.59 1093 5029 10.K
So ~19%
Is it just due to loading an additional library, or to internal RPC implementation aspects that differs between the uClibc built-in implementation and the libtirpc implementation?
So the thing is Busybox binary ends up being linked with 2 libs (instead of just libc.so) thus ldso loading takes more time. Now lat_proc shell ends up doing exec() of (busybox) shell and then hello world - hence the increased time.
If it's just due to loading an additional library, is this micro benchmark really representative of real-world workload? Is it really a real life situation to have very short-lived processes that need RPC support?
Hard to judge really - for a desktop/server system it probably doesn't matter - but for a typical embedded system ...
You are not forced to use busybox with libtirpc. You only need it for NFS stuff. For modern NFS stack with rpcbind and nfs-utils you need libtirpc anyway. Busybox just implements a mount helper which could use internal uClibc RPC implementation. But in the end you need libtirpc on the embedded device.
So avoid busybox+libtirpc and use rpcbind+nfs-utils+libtirpc if you require NFS on your device.
I still see no real use case for the old internal RPC implementation on a modern embedded device.
best regards Waldemar