[ 
https://issues.apache.org/jira/browse/PROTON-2321?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jiri Daněk updated PROTON-2321:
-------------------------------
    Description: 
{noformat}
-----------------------------------------------------------------------------------
Benchmark                                         Time             CPU   
Iterations
-----------------------------------------------------------------------------------

// size_t size = bytes->size + 0;
BM_Encode10MbMessage/put_binary count:1        71.7 ms         70.4 ms          
 10
BM_Encode10MbMessage/put_binary count:10        239 ms          205 ms          
  3

// size_t size = bytes->size + 1;
BM_Encode10MbMessage/put_binary count:1        1.25 ms        0.874 ms          
744
BM_Encode10MbMessage/put_binary count:10       1059 ms         1045 ms          
  1

// size_t size = bytes->size + 2;
BM_Encode10MbMessage/put_binary count:1        1.22 ms        0.916 ms          
634
BM_Encode10MbMessage/put_binary count:10        178 ms          135 ms          
  5

// size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
BM_Encode10MbMessage/put_binary count:1       0.941 ms        0.815 ms          
783
BM_Encode10MbMessage/put_binary count:10       1390 ms         1187 ms          
  1

// size_t size = pn_max(bytes->size+2, PNI_INTERN_MINSIZE);
BM_Encode10MbMessage/put_binary count:1       0.922 ms        0.811 ms          
718
BM_Encode10MbMessage/put_binary count:10        184 ms          144 ms          
  5
{noformat}

The above shows that + 1 improves things significantly, but there is a scenario 
where + 2 is even better.

{code}
static int pni_data_intern_node(pn_data_t *data, pni_node_t *node)
{
  pn_bytes_t *bytes = pni_data_bytes(data, node);
  if (!bytes) return 0;
  if (data->buf == NULL) {
    // Heuristic to avoid growing small buffers too much
    // size + 1 to allow for zero termination
    size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
   ...
{code}

  was:
{noformat}
-----------------------------------------------------------------------------------
Benchmark                                         Time             CPU   
Iterations
-----------------------------------------------------------------------------------

// size_t size = bytes->size + 0;
BM_Encode10MbMessage/put_binary count:1        71.7 ms         70.4 ms          
 10
BM_Encode10MbMessage/put_binary count:10        239 ms          205 ms          
  3

size_t size = bytes->size + 1;
BM_Encode10MbMessage/put_binary count:1        1.25 ms        0.874 ms          
744
BM_Encode10MbMessage/put_binary count:10       1059 ms         1045 ms          
  1

size_t size = bytes->size + 2;
BM_Encode10MbMessage/put_binary count:1        1.22 ms        0.916 ms          
634
BM_Encode10MbMessage/put_binary count:10        178 ms          135 ms          
  5

// size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
BM_Encode10MbMessage/put_binary count:1       0.941 ms        0.815 ms          
783
BM_Encode10MbMessage/put_binary count:10       1390 ms         1187 ms          
  1

// size_t size = pn_max(bytes->size+2, PNI_INTERN_MINSIZE);
BM_Encode10MbMessage/put_binary count:1       0.922 ms        0.811 ms          
718
BM_Encode10MbMessage/put_binary count:10        184 ms          144 ms          
  5
{noformat}

The above shows that + 1 improves things significantly, but there is a scenario 
where + 2 is even better.

{code}
static int pni_data_intern_node(pn_data_t *data, pni_node_t *node)
{
  pn_bytes_t *bytes = pni_data_bytes(data, node);
  if (!bytes) return 0;
  if (data->buf == NULL) {
    // Heuristic to avoid growing small buffers too much
    // size + 1 to allow for zero termination
    size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
   ...
{code}


> Add benchmark for pn_data_t initialization (PROTON-2229)
> --------------------------------------------------------
>
>                 Key: PROTON-2321
>                 URL: https://issues.apache.org/jira/browse/PROTON-2321
>             Project: Qpid Proton
>          Issue Type: Test
>          Components: proton-c
>    Affects Versions: proton-c-0.33.0
>            Reporter: Jiri Daněk
>            Assignee: Jiri Daněk
>            Priority: Major
>             Fix For: proton-c-0.34.0
>
>
> {noformat}
> -----------------------------------------------------------------------------------
> Benchmark                                         Time             CPU   
> Iterations
> -----------------------------------------------------------------------------------
> // size_t size = bytes->size + 0;
> BM_Encode10MbMessage/put_binary count:1        71.7 ms         70.4 ms        
>    10
> BM_Encode10MbMessage/put_binary count:10        239 ms          205 ms        
>     3
> // size_t size = bytes->size + 1;
> BM_Encode10MbMessage/put_binary count:1        1.25 ms        0.874 ms        
>   744
> BM_Encode10MbMessage/put_binary count:10       1059 ms         1045 ms        
>     1
> // size_t size = bytes->size + 2;
> BM_Encode10MbMessage/put_binary count:1        1.22 ms        0.916 ms        
>   634
> BM_Encode10MbMessage/put_binary count:10        178 ms          135 ms        
>     5
> // size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
> BM_Encode10MbMessage/put_binary count:1       0.941 ms        0.815 ms        
>   783
> BM_Encode10MbMessage/put_binary count:10       1390 ms         1187 ms        
>     1
> // size_t size = pn_max(bytes->size+2, PNI_INTERN_MINSIZE);
> BM_Encode10MbMessage/put_binary count:1       0.922 ms        0.811 ms        
>   718
> BM_Encode10MbMessage/put_binary count:10        184 ms          144 ms        
>     5
> {noformat}
> The above shows that + 1 improves things significantly, but there is a 
> scenario where + 2 is even better.
> {code}
> static int pni_data_intern_node(pn_data_t *data, pni_node_t *node)
> {
>   pn_bytes_t *bytes = pni_data_bytes(data, node);
>   if (!bytes) return 0;
>   if (data->buf == NULL) {
>     // Heuristic to avoid growing small buffers too much
>     // size + 1 to allow for zero termination
>     size_t size = pn_max(bytes->size+1, PNI_INTERN_MINSIZE);
>    ...
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to