Re: serialization format

Markus Wanner <[email protected]> Tue, 5 Apr 2016 18:25:21 +0200
Newsgroups gmane.comp.version-control.monotone.devel
Message-ID <[email protected]>
On 04/04/2016 10:02 PM, Ludovic Brenta wrote:
> No but they might care about performance.  How much of monotone's time
> is actually spent translating between binary and hex?  Is this really a
> major performance bottleneck?

Well, not the conversion between hex and binary itself, no. But the
effect the serialization format has on hashing.

Let's have a look at some perf samples gathered during a functional test
run:

> #
> # Overhead  Shared Object          Symbol                                                                                         
> # ........  .....................  ...................................................................................................................
> #
>      6.80%  libbotan-1.10.so.1.10  [.] _ZN5Botan12SHA_160_SSE210compress_nEPKhm                                                                       
>      3.74%  libc-2.21.so           [.] _int_free                                                                                                      
>      2.60%  libstdc++.so.6.0.21    [.] _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base                                                               
>      2.24%  libstdc++.so.6.0.21    [.] _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_                                              
>      1.85%  libc-2.21.so           [.] malloc                                                                                                         
>      1.85%  mtn                    [.] _ZNSt8_Rb_treeIN6option6optionI7optionsEES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE7_M_copyINS9_20_Reuse_or_alloc
>      1.73%  mtn                    [.] _ZSt11__set_unionISt23_Rb_tree_const_iteratorIN6option6optionI7optionsEEES5_St15insert_iteratorISt3setIS4_St4le
>      1.66%  ld-2.21.so             [.] do_lookup_x                                                                                                    
>      1.57%  libcrypto.so.1.0.0     [.] DES_encrypt2                                                                                                   
>      1.36%  libc-2.21.so           [.] __memcmp_sse4_1                                                                                                
>      1.17%  mtn                    [.] _ZNSt8_Rb_treeIN6option6optionI7optionsEES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS
>      1.04%  libc-2.21.so           [.] free                                                                                                           
>      1.03%  libc-2.21.so           [.] malloc_consolidate                                                                                             
>      0.98%  [unknown]              [k] 0xffffffff817f4ca0                                                                                             
>      0.75%  mtn                    [.] _ZNSt17_Function_handlerIFvP7optionsNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEMS0_FvS7_EE10_M_manage
>      0.71%  ld-2.21.so             [.] _dl_lookup_symbol_x                                                                                            
>      0.71%  mtn                    [.] _ZNSt17_Function_handlerIFvP7optionsEMS0_FvvEE10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation            
>      0.67%  libcrypto.so.1.0.0     [.] DES_encrypt1                                                                                                   
>      0.64%  libbotan-1.10.so.1.10  [.] _ZN5Botan16MDx_HashFunction12final_resultEPh                                                                   
>      0.64%  libgmp.so.10.2.0       [.] __gmpn_redc_1                                                                                                  
>      0.62%  [unknown]              [k] 0xffffffff811b24fa                                                                                             
>      0.58%  libc-2.21.so           [.] strlen                                                                                                         
>      0.58%  libbotan-1.10.so.1.10  [.] _ZN5Botan16MDx_HashFunction8add_dataEPKhm                                                                      
>      0.57%  [unknown]              [k] 0xffffffff813d3417                                                                                            
...
>      0.06%  libbotan-1.10.so.1.10  [.] _ZN5Botan10hex_decodeEPhPKcmRmb        
...
>      0.02%  libbotan-1.10.so.1.10  [.] _ZN5Botan10hex_encodeEPcPKhmb 


Hashing probably is the single most time consuming operation here, with
about 8% of the time spent (note that the add_data and final_result
methods are within the top 25 as well).

The CPU time that's used for the actual hex encoding and decoding is
vanishingly small, below 0.1%.


Now, I'm clearly not into micro optimizations (but rather consider
modifications like using base58 instead of the hex encoding for hashes
presented to the user - an encoding that's certain to consume more CPU
time, not sure how much more, though.)

However, reducing the amount of data to be hashed, cached and moved
around (in memory, network, etc..) sounds like a generally good idea to
me (performance wise). However, it's equally clearly a bad idea from a
usability perspective. So there's a balance. That's why I started this
thread.

Given the arguments so far I tend towards a binary encoding, as I think
developers should be able to handle binary data. And if users really
don't care...

Regards

Markus Wanner

_______________________________________________
Monotone-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/monotone-devel
signature.asc (application/pgp-signature, 1.5 KB)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQQcBAEBCAAGBQJXA+b3AAoJEOhoLRs/Memzu54gAOSaRVSpjpFN+TTAFiCM+90T
1HXmVtLPYUTeRoxinxMrY4wR4Nuz2CiZbddrwG2UQjJv4BNSEr1iAUhVywS6gbya
Hzs/ECsRJJvcB6cA7IeIFVfHWTkvaUOFNwCzUGreuviUmaMaizqCMnACXvJFbBMB
+JSURa+zqzJi/SyOztYq4FsXaC+76E0nG12aOhLO7KNfuFFEJqP3wH9qa/p226ao
BBh+5HnYq+j6iWxQZiuHxdFSl2F6JKIgNZaj4BWXuTCY7FDPh9XUlu+545gMMUQt
gkX+qALf2NBbEZkAGIdV0I321AtnufwezmNy6dVgOTrZXUlsSBED3AgHwWbmXxRi
8Mf0vI74bcQKaVvbFbrGiIBhrqslN7G0ukE+B+APjk4pYRXNw8PhCPhjpMGAKBpr
/Ka3Tf0QFHGizdTJkbL8T+fTGgiSYbAINfteYqqKsJ5VPU8MY9Oq6Z0MYzGh1SnW
z37/5cDI91HzWt8c70t1+i/7xom925KeIDir/S6b9d5IIEQ5jTI7+GoPlhz+gSiu
UyPrfTApz/18jgM90PGnaxati5VFBDCRNOxQ0TqF/xUfPAmOlKKg/A9ySTlsijqE
0+Uloe6ij+T4rIveCQD2pqApUee+RZQdi7xPEuzAGl4XPS0xnE5c9DBPIgJNieCS
U74K517M4OjZGZiNnRM7HT5/V5pui+iQ3nhVNCpYvPNehtVbT5YLPK+H4LWkDL5v
6hvllGy+sW5r5HPm6Vcq7Fa+nmPnnhy0coiDXJOq628bDkob2Mo0z3DyENkWQDEw
FJihWtbH4LZKaKqX5yPJpB4pbjWMpZIwZUmQ/G1/7IG2g7Wh5ME5NWuZ3tawKnwS
/7ThHDmjEDztTiQYZ0WfPFuYbjz2YkEuBUmMej8wtdH70D5XuZdXNdlj3s7TVeMM
Nj8zqiFfoNhmkpMKfsn78KMFiQEwhvZdSrbehHqGNn3IxI9QpsIYad12lfNg0gRa
oLgSQZLJEeCiB0E9xaQEpFVZDhVSK7mQ616tHcikEYb8eRu3Akf/hG8NBVflx/Sw
IXsowCN0Y+bmY4Pl2YAU9Fy7MAvfTzTIXfGT20d+efRMDOzRPMqhs3DL/d3Y2Zro
5QCR+vng/r2qqL2xQ7KkOnxkVnJf7MpQz6EinOaQA0sgqQIqN4h39cwU8mTmXqOz
aUpO5xp0S5bgNvw5fZBn03ChgfXRSHUdorlya0LQaZHvOzjJI91w0H8moIe4mUyt
FhQPU55ENbbbn+nGkjz/5WLERF27wcUOEx8WK3bVvObQa5Zsb1GsHPVfTbjbfesv
cn++S/UnC8gT8J/d1zaUHCPnfZDe185kScFRGvFWHVuSe/AxpfLR6Hf4mVTuSM4=
=LpSo
-----END PGP SIGNATURE-----