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:

  • 相关阅读:
    Linux 磁盘分区
    curl
    Metasploit ms10_046_shortcut_icon_dllloader 利用
    Ettercap 入门
    Ettercap dos_attack
    Centos7/Debian 配置双网卡
    Centos7配置单网卡,多IP
    Ettercap MITM Arp Poisoning
    Ettercap DNS Spoofing
    java常用设计模式--工厂模式简单例子
  • 原文地址:https://www.cnblogs.com/lightsun/p/7099170.html
Copyright © 2011-2022 走看看