[
https://issues.apache.org/jira/browse/ZOOKEEPER-2425?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yip Ng updated ZOOKEEPER-2425:
------------------------------
Attachment: ZOOKEEPER-2425-v3.4.patch
Patch for v3.4.8
> Slow ZooKeeper operation on Linux PowerPC
> -----------------------------------------
>
> Key: ZOOKEEPER-2425
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2425
> Project: ZooKeeper
> Issue Type: Bug
> Components: c client
> Affects Versions: 3.4.6, 3.4.8
> Environment: Linux 2.6.32-431.el6.ppc64
> Reporter: Yip Ng
> Attachments: ZOOKEEPER-2425-v3.4.patch
>
>
> We ran into this performance issue in a production environment where
> the ZooKeeper operations(create, set, etc.) was very slow.
> After some analysis we discover that there appears to be a TCP ACK delay of
> ~40+ ms when sending a very small size message(length field) followed by its
> payload in ZooKeeper C client(v3.4.6) on a Linux PowerPC machine. The Linux
> version is 2.6.32-431.el6.ppc64.
> Here is a sample of the strace that illustrates the delays:
> 39314 1459790083.730221 send(13, "\0\0\0e", 4, MSG_NOSIGNAL) = 4 <0.000010>
> 39314 1459790083.730259 send(13,
> "W\2\234\215\0\0\0\6\0\0\0Y/nnn.nnn.nn.nnnnnnn/"..., 101, MSG_NOSIGNAL) = 101
> <0.000009>
> 39314 1459790083.730297 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN}], 2, 13333) = 1 ([{fd=13, revents=POLLIN}]) <0.000204>
> 39314 1459790083.730535 recv(13, "\0\0\0\216", 4, 0) = 4 <0.000008>
> 39314 1459790083.730571 recv(13,
> "W\2\234\215\0\0\0\1\0\0\n7\0\0\0\0\0\0\0\1\0\0\0\37\0\0\0\6dige"..., 142, 0)
> = 142 <0.000008>
> 39314 1459790083.730615 futex(0x1003bd90a2c, FUTEX_CMP_REQUEUE_PRIVATE, 1,
> 2147483647, 0x1003bd90a58, 2) = 1 <0.000010>
> 39279 1459790083.730647 <... futex resumed> ) = 0 <0.000488>
> 39314 1459790083.730659 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN}], 2, 13333 <unfinished ...>
> 39279 1459790083.730681 futex(0x1003bd90a58, FUTEX_WAKE_PRIVATE, 1) = 0
> <0.000012>
> 39279 1459790083.730737 write(12, "\0", 1 <unfinished ...>
> 39314 1459790083.730762 <... poll resumed> ) = 1 ([{fd=11, revents=POLLIN}])
> <0.000091>
> 39279 1459790083.730776 <... write resumed> ) = 1 <0.000030>
> 39314 1459790083.730791 read(11, <unfinished ...>
> 39279 1459790083.730809 futex(0x1003bd90a2c, FUTEX_WAIT_PRIVATE, 1, NULL
> <unfinished ...>
> 39314 1459790083.730819 <... read resumed> "\0", 128) = 1 <0.000021>
> 39314 1459790083.730838 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN|POLLOUT}], 2, 13333) = 1 ([{fd=13, revents=POLLOUT}]) <0.000008>
> 39314 1459790083.730879 send(13, "\0\0\0f", 4, MSG_NOSIGNAL) = 4 <0.000010>
> 39314 1459790083.730917 send(13,
> "W\2\234\216\0\0\0\f\0\0\0Y/nnn.nnn.nn.nnnnnnn/"..., 102, MSG_NOSIGNAL) = 102
> <0.000010>
> 39314 1459790083.730961 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN}], 2, 13333) = 1 ([{fd=13, revents=POLLIN}]) <0.000189>
> 39314 1459790083.731184 recv(13, "\0\0\0k", 4, 0) = 4 <0.000007>
> 39314 1459790083.731219 recv(13,
> "W\2\234\216\0\0\0\1\0\0\n7\0\0\0\0\0\0\0\2\0\0\0\4stop\0\0\0\7"..., 107, 0)
> = 107 <0.000008>
> 39314 1459790083.731264 futex(0x1003bd90a2c, FUTEX_CMP_REQUEUE_PRIVATE, 1,
> 2147483647, 0x1003bd90a58, 2) = 1 <0.000010>
> 39279 1459790083.731296 <... futex resumed> ) = 0 <0.000480>
> 39314 1459790083.731307 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN}], 2, 13333 <unfinished ...>
> 39279 1459790083.731329 futex(0x1003bd90a58, FUTEX_WAKE_PRIVATE, 1) = 0
> <0.000013>
> 39279 1459790083.731443 write(12, "\0", 1) = 1 <0.000019>
> 39314 1459790083.731485 <... poll resumed> ) = 1 ([{fd=11, revents=POLLIN}])
> <0.000165>
> 39279 1459790083.731508 futex(0x1003bd90a2c, FUTEX_WAIT_PRIVATE, 1, NULL
> <unfinished ...>
> 39314 1459790083.731524 read(11, "\0", 128) = 1 <0.000009>
> 39314 1459790083.731557 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN|POLLOUT}], 2, 13333) = 1 ([{fd=13, revents=POLLOUT}]) <0.000008>
> 39314 1459790083.731598 send(13, "\0\0\0k", 4, MSG_NOSIGNAL) = 4 <0.000010>
> 39314 1459790083.731636 send(13,
> "W\2\234\217\0\0\0\f\0\0\0^/nnn.nnn.nn.nnnnnnn/"..., 107, MSG_NOSIGNAL) = 107
> <0.000010>
> 39314 1459790083.731677 poll([{fd=11, events=POLLIN}, {fd=13,
> events=POLLIN}], 2, 13333) = 1 ([{fd=13, revents=POLLIN}]) <0.000188>
> 39314 1459790083.731900 recv(13, "\0\0\0X", 4, 0) = 4 <0.000008>
> 39314 1459790083.731936 recv(13,
> "W\2\234\217\0\0\0\1\0\0\n7\0\0\0\0\0\0\0\0\0\0\0\1\0\0\n&\0\0\0\1"..., 88,
> 0) = 88 <0.000007>
> The fix is to collapse the 2 sends (length + payload) into a single send.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)