[ 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