Uploaded image for project: 'Qpid Proton'
  1. Qpid Proton
  2. PROTON-2321

Add benchmark for pn_data_t initialization (PROTON-2229)

    XMLWordPrintableJSON

    Details

    • Type: Test
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: proton-c-0.33.0
    • Fix Version/s: proton-c-0.35.0
    • Component/s: proton-c
    • Labels:
      None

      Description

      -----------------------------------------------------------------------------------
      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
      

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

      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);
         ...
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                jdanek Jiri Daněk
                Reporter:
                jdanek Jiri Daněk
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: