You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Craig Hansen-Sturm (JIRA)" <ji...@apache.org> on 2014/08/01 21:43:38 UTC

[jira] [Comment Edited] (MESOS-1199) Subprocess is "slow" -> gated by process::reap poll interval

    [ https://issues.apache.org/jira/browse/MESOS-1199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14082780#comment-14082780 ] 

Craig Hansen-Sturm edited comment on MESOS-1199 at 8/1/14 7:42 PM:
-------------------------------------------------------------------

Completed testing.    Created a new reaping test which collects N-subprocess notifications after killing each child, while varying the reaping interval I.

Attached color-coded chart shows %CPU utilization when:

I = 2s,1s,500ms,250ms,125ms,63ms,31ms,16ms,8ms,4ms,2ms,1ms
N = 1,4,16,64,256

For example, with 64 child processes (orange curve) and a 250ms reaping interval, 21% of the CPU is used.   At 16ms, the machine is completely saturated.

The attached chart (waitpid.pdf) demonstrates that no polling mechanism which blocks on each child pid (in succession) will scale at lower polling intervals and higher process counts.

That said, I believe this chart demonstrates that we can safely lower the time to 500 or 250ms if child process count <=64.

I recommend that we immediately do this; however, we still need a general non-blocking notification mechanism which scales linearly.   

Assuming there is consensus on this, I would like to create a seperate JIRA which addresses lowering the polling interval, and keep this one open for the longer term solution.

Opinions ?



was (Author: craig-mesos):
Completed testing.    Created a new reaping test which collects N-subprocess notifications after killing each child, while varying the reaping interval I.

Attached color-coded chart shows %CPU utilization when:

I = 2s,1s,500ms,250ms,125ms,63ms,31ms,16ms,8ms,4ms,2ms,1ms
N = 1,4,16,64,256

For example, with 64 child processes (orange curve) and a 250ms reaping interval, 21% of the CPU is used.   At 16ms, the machine is completely saturated.

This chart demonstrates that no polling mechanism which blocks on each child pid (in succession) will scale at lower polling intervals and higher process counts.

That said, I believe this chart demonstrates that we can safely lower the time to 500 or 250ms if child process count <=64.

I recommend that we immediately do this; however, we still need a general non-blocking notification mechanism which scales linearly.   

Assuming there is consensus on this, I would like to create a seperate JIRA which addresses lowering the polling interval, and keep this one open for the longer term solution.

Opinions ?


> Subprocess is "slow" -> gated by process::reap poll interval
> ------------------------------------------------------------
>
>                 Key: MESOS-1199
>                 URL: https://issues.apache.org/jira/browse/MESOS-1199
>             Project: Mesos
>          Issue Type: Improvement
>    Affects Versions: 0.18.0
>            Reporter: Ian Downes
>            Assignee: Craig Hansen-Sturm
>         Attachments: wiatpid.pdf
>
>
> Subprocess uses process::reap to wait on the subprocess pid and set the exit status. However, process::reap polls with a one second interval resulting in a delay up to the interval duration before the status future is set.
> This means if you need to wait for the subprocess to complete you get hit with E(delay) = 0.5 seconds, independent of the execution time. For example, the MesosContainerizer uses mesos-fetcher in a Subprocess to fetch the executor during launch. At Twitter we fetch a local file, i.e., a very fast operation, but the launch is blocked until the mesos-fetcher pid is reaped -> adding 0 to 1 seconds for every launch!
> The problem is even worse with a chain of short Subprocesses because after the first Subprocess completes you'll be synchronized with the reap interval and you'll see nearly the full interval before notification, i.e., 10 Subprocesses each of << 1 second duration with take ~10 seconds!
> This has become particularly apparent in some new tests I'm working on where test durations are now greatly extended with each taking several seconds.



--
This message was sent by Atlassian JIRA
(v6.2#6252)