Github user nonstop-qfchen commented on a diff in the pull request:

    https://github.com/apache/incubator-trafodion/pull/250#discussion_r49027797
  
    --- Diff: core/sql/sqlcomp/nadefaults.cpp ---
    @@ -5914,6 +5866,73 @@ enum DefaultConstants 
NADefaults::validateAndInsert(const char *attrName,
     
     } // NADefaults::validateAndInsert()
     
    +float NADefaults::computeNumESPsPerCore(NABoolean aggressive)
    +{
    +   #define DEFAULT_ESPS_PER_NODE 2   // for conservation allocation
    +   #define DEFAULT_ESPS_PER_CORE 0.5 // for aggressive allocation
    +
    +     // Make sure the gpClusterInfo points at an NAClusterLinux object.
    +     // In osim simulation mode, the pointer can point at a NAClusterNSK
    +     // object, for which the method numTSEsForPOS() is not defined.
    +   NAClusterInfoLinux* gpLinux = 
dynamic_cast<NAClusterInfoLinux*>(gpClusterInfo);
    +   assert(gpLinux);                
    +
    +   // cores per node
    +   Lng32 coresPerNode = gpClusterInfo->numberOfCpusPerSMP();
    +
    +   if ( aggressive ) {
    +      float totalMemory = gpLinux->totalMemoryAvailable(); // per Node, in 
KB
    +      totalMemory /= 1024; // per Node, in GB
    +      totalMemory /= coresPerNode ; // per core, in GB
    +      totalMemory /= 2; // per core, 2GB per ESP
    +      return MINOF(DEFAULT_ESPS_PER_CORE, totalMemory);
    +   }
    +
    +   Lng32 numESPsPerNode = DEFAULT_ESPS_PER_NODE;
    +
    +     // number of POS TSE
    +   Lng32 numTSEsPerCluster = gpLinux->numTSEsForPOS();
    +
    +     // cluster nodes
    +   Lng32 nodesdPerCluster = gpClusterInfo->getTotalNumberOfCPUs();
    +
    +     // TSEs per node
    +   Lng32 TSEsPerNode = numTSEsPerCluster/nodesdPerCluster;
    +
    +
    +
    +     // For Linux/nt, we conservatively allocate ESPs per node as follows
    +     // - 1 ESP per 2 cpu cores if cores are equal or less than TSEs
    +     // - 1 ESP per TSE if number of cores is more than double the TSEs
    +     // - 1 ESP per 2 TSEs if cores are more than TSEs but less than 
double the TSEs
    +     // - 1 ESP per node. Only possible on NT or workstations
    +     //      - number of cores less than TSEs and there are 1 or 2 cpur 
cores per node
    +     //      - number of TSEs is less than cpu cores and there 1 or 2 TSEs 
per node.
    +     //        This case is probable if virtual nodes are used
    +
    +     // TSEsPerNode is 0 for arkcmps started by the seapilot universal 
comsumers
    +     // in this case we only consider cpu cores
    +   if ( coresPerNode <= TSEsPerNode || TSEsPerNode == 0 )
    +   {
    +       if (coresPerNode > 1)
    +           numESPsPerNode = DEFAULT_ESPS_PER_NODE; 
    +   }
    +   else if (coresPerNode > (TSEsPerNode*2))
    +   {
    +        numESPsPerNode = TSEsPerNode;
    +   }
    +   else if (TSEsPerNode > 1)
    +   {
    +        numESPsPerNode = TSEsPerNode/2;
    +   }
    +   else // not really needed since numESPsPerNode is set to 1 from above
    +   {
    +        numESPsPerNode = DEFAULT_ESPS_PER_NODE;
    +   }
    +        
    +   return (float)(numESPsPerNode)/(float)(coresPerNode);
    --- End diff --
    
    yes. the code is inherited from the work in HP and computes # of ESps very 
conservatively. 


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to