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

Add benchmark for pn_data_t initialization (PROTON-2229)

VotersStop watchingWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Test
    • Status: Closed
    • Major
    • Resolution: Fixed
    • proton-c-0.33.0
    • proton-c-0.35.0
    • proton-c
    • 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

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            jdanek Jiri Daněk
            jdanek Jiri Daněk
            Votes:
            0 Vote for this issue
            Watchers:
            3 Stop watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment