You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-issues@hadoop.apache.org by "Todd Lipcon (JIRA)" <ji...@apache.org> on 2012/10/06 14:15:06 UTC

[jira] [Commented] (MAPREDUCE-4469) Resource calculation in child tasks is CPU-heavy

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

Todd Lipcon commented on MAPREDUCE-4469:
----------------------------------------

- the two overloads of getProcessOwner are repetitive - you could implement one in terms of the other
- I'd like to avoid the shell command usages here - forks can be reasonably expensive and also blow up the virtual size of the process tree. Instead, I think it's sufficient to check something like:

{code}
boolean isPidOwnedByMe(int pid) {
  File pidDir = new File(procFsDir, String.valueOf(pid));
  // the environment of a process is only readable by the user
  // running that process
  File fileInPidDir = new File(pidDir, "environ");
  return fileInPidDir.canRead();
}
{code}

This wouldn't cause extra forks and I think would have equivalent results, so long as the user running the code isn't root.

----

- excludeList should be named something like {{excludedPids}}
- The following would be faster using StringUtils.split:
{code}
String[] strSplitted = str.split("\\s+");
{code}
(since the data is exactly space-delimited, we dont need the full overhead of a regex)
- Rather than setting the configuration as a number of updates to skip, I think it's better to set an interval at which the data will be re-calculated. Otherwise the value of this configuration is scaled with respect to another configuration (the counter update interval), which gets messy.
- I'm wondering, if we did the owner exclusion, and we improved the parsing to use StringUtils.split, if it might be fast enough to avoid having to cache the exclusions. Any chance you could run a benchmark? My concern is that the exclusion idea doesn't work when pids get recycled (there are only 64k of them so this happens pretty often)
                
> Resource calculation in child tasks is CPU-heavy
> ------------------------------------------------
>
>                 Key: MAPREDUCE-4469
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-4469
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: performance, task
>    Affects Versions: 1.0.3
>            Reporter: Todd Lipcon
>            Assignee: Ahmed Radwan
>         Attachments: MAPREDUCE-4469.patch, MAPREDUCE-4469_rev2.patch, MAPREDUCE-4469_rev3.patch, MAPREDUCE-4469_rev4.patch
>
>
> In doing some benchmarking on a hadoop-1 derived codebase, I noticed that each of the child tasks was doing a ton of syscalls. Upon stracing, I noticed that it's spending a lot of time looping through all the files in /proc to calculate resource usage.
> As a test, I added a flag to disable use of the ResourceCalculatorPlugin within the tasks. On a CPU-bound 500G-sort workload, this improved total job runtime by about 10% (map slot-seconds by 14%, reduce slot seconds by 8%)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira