Example #1
0
        internal virtual void Init(LinuxContainerExecutor lce, ResourceCalculatorPlugin plugin
                                   )
        {
            InitConfig();
            // mount cgroups if requested
            if (cgroupMount && cgroupMountPath != null)
            {
                AList <string> cgroupKVs = new AList <string>();
                cgroupKVs.AddItem(ControllerCpu + "=" + cgroupMountPath + "/" + ControllerCpu);
                lce.MountCgroups(cgroupKVs, cgroupPrefix);
            }
            InitializeControllerPaths();
            // cap overall usage to the number of cores allocated to YARN
            yarnProcessors = NodeManagerHardwareUtils.GetContainersCores(plugin, conf);
            int systemProcessors = plugin.GetNumProcessors();

            if (systemProcessors != (int)yarnProcessors)
            {
                Log.Info("YARN containers restricted to " + yarnProcessors + " cores");
                int[] limits = GetOverallLimits(yarnProcessors);
                UpdateCgroup(ControllerCpu, string.Empty, CpuPeriodUs, limits[0].ToString());
                UpdateCgroup(ControllerCpu, string.Empty, CpuQuotaUs, limits[1].ToString());
            }
            else
            {
                if (CpuLimitsExist())
                {
                    Log.Info("Removing CPU constraints for YARN containers.");
                    UpdateCgroup(ControllerCpu, string.Empty, CpuQuotaUs, (-1).ToString());
                }
            }
        }
        /// <summary>Returns the fraction of CPU cores that should be used for YARN containers.
        ///     </summary>
        /// <remarks>
        /// Returns the fraction of CPU cores that should be used for YARN containers.
        /// The number is derived based on various configuration params such as
        /// YarnConfiguration.NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT
        /// </remarks>
        /// <param name="plugin">- ResourceCalculatorPlugin object to determine hardware specs
        ///     </param>
        /// <param name="conf">- Configuration object</param>
        /// <returns>Fraction of CPU cores to be used for YARN containers</returns>
        public static float GetContainersCores(ResourceCalculatorPlugin plugin, Configuration
                                               conf)
        {
            int numProcessors     = plugin.GetNumProcessors();
            int nodeCpuPercentage = GetNodeCpuPercentage(conf);

            return((nodeCpuPercentage * numProcessors) / 100.0f);
        }