zoukankan      html  css  js  c++  java
  • NUMA

    在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。

    在使用spark standalone或者yarn时,如果碰到跨cpu核数访问的情况,可以修改相应的代码。

    Yarn:

     --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java
    +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor_patched.java
     
       private static final int WIN_MAX_PATH = 260;
     
    +  //Soji
    +  private static int count = 0;
    +
       protected final FileContext lfs;
     
       public DefaultContainerExecutor() {
    @@ -78,7 +81,11 @@
       DefaultContainerExecutor(FileContext lfs) {
         this.lfs = lfs;
       }
    -
    +   
    +  protected int updateCount(){
    +  //Change '4' to nummber of NUMA nodes on your system
    +    return count++%4;
    +  }
       protected void copyFile(Path src, Path dst, String owner) throws IOException {
         lfs.util().copy(src, dst);
       }
    @@ -310,9 +317,11 @@
       private final class UnixLocalWrapperScriptBuilder
           extends LocalWrapperScriptBuilder {
         private final Path sessionScriptPath;
    +    private int count;
     
         public UnixLocalWrapperScriptBuilder(Path containerWorkDir) {
           super(containerWorkDir);
    +      this.count=0;
           this.sessionScriptPath = new Path(containerWorkDir,
               Shell.appendScriptExtension("default_container_executor_session"));
         }
    @@ -342,6 +351,7 @@
             throws IOException {
           DataOutputStream out = null;
           PrintStream pout = null;
    +      int numanode = updateCount();
           try {
             out = lfs.create(sessionScriptPath, EnumSet.of(CREATE, OVERWRITE));
             pout = new PrintStream(out, false, "UTF-8");
    @@ -353,7 +363,10 @@
             pout.println("echo $$ > " + pidFile.toString() + ".tmp");
             pout.println("/bin/mv -f " + pidFile.toString() + ".tmp " + pidFile);
             String exec = Shell.isSetsidAvailable? "exec setsid" : "exec";
    -        pout.println(exec + " /bin/bash "" +
    +        //pout.println("#numanode is "+numanode);
    +        //pout.println(exec + " /bin/bash "" +
    +        pout.println(exec +" numactl --membind="+numanode+" --cpunodebind="+numanode+ " /bin/bash "" +
    +        //pout.println(exec +" numactl --localalloc --cpunodebind="+numanode+ " /bin/bash "" +
                 launchDst.toUri().getPath().toString() + """);
           } finally {
             IOUtils.cleanup(LOG, pout, out);

    Standalone:

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/lightsun/p/7099170.html
Copyright © 2011-2022 走看看