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:

 

转载于:https://www.cnblogs.com/lightsun/p/7099170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值