コード例 #1
0
        /// <summary>
        /// Creates instance
        /// </summary>
        public PipQueue(LoggingContext loggingContext, IConfiguration config)
        {
            Contract.Requires(config != null);

            m_scheduleConfig = config.Schedule;

            // If adaptive IO is enabled, then start with the half of the maxIO.
            var ioLimit = m_scheduleConfig.AdaptiveIO ? (m_scheduleConfig.MaxIO + 1) / 2 : m_scheduleConfig.MaxIO;

            m_chooseWorkerLightQueue       = new ChooseWorkerQueue(this, 1);
            m_chooseWorkerCacheLookupQueue = new ChooseWorkerQueue(this, m_scheduleConfig.MaxChooseWorkerCacheLookup);
            m_chooseWorkerCpuQueue         = m_scheduleConfig.ModuleAffinityEnabled() ?
                                             new NestedChooseWorkerQueue(this, m_scheduleConfig.MaxChooseWorkerCpu, config.Distribution.BuildWorkers.Count + 1) :
                                             new ChooseWorkerQueue(this, m_scheduleConfig.MaxChooseWorkerCpu);

            m_queuesByKind = new Dictionary <DispatcherKind, DispatcherQueue>()
            {
                { DispatcherKind.IO, new DispatcherQueue(this, ioLimit) },
                { DispatcherKind.DelayedCacheLookup, new DispatcherQueue(this, maxParallelDegree: 1) },
                { DispatcherKind.ChooseWorkerCacheLookup, m_chooseWorkerCacheLookupQueue },
                { DispatcherKind.ChooseWorkerLight, m_chooseWorkerLightQueue },
                { DispatcherKind.CacheLookup, new DispatcherQueue(this, m_scheduleConfig.MaxCacheLookup) },
                { DispatcherKind.ChooseWorkerCpu, m_chooseWorkerCpuQueue },
                { DispatcherKind.CPU, new DispatcherQueue(this, m_scheduleConfig.EffectiveMaxProcesses, useWeight: true) },
                { DispatcherKind.Materialize, new DispatcherQueue(this, m_scheduleConfig.MaxMaterialize) },
                { DispatcherKind.Light, new DispatcherQueue(this, m_scheduleConfig.MaxLightProcesses) },
                { DispatcherKind.SealDirs, new DispatcherQueue(this, m_scheduleConfig.MaxSealDirs) },
            };

            m_hasAnyChange = new ManualResetEventSlim(initialState: true /* signaled */);

            Tracing.Logger.Log.PipQueueConcurrency(
                loggingContext,
                ioLimit,
                m_scheduleConfig.MaxChooseWorkerCacheLookup,
                m_scheduleConfig.MaxCacheLookup,
                m_scheduleConfig.MaxChooseWorkerCpu,
                m_scheduleConfig.EffectiveMaxProcesses,
                m_scheduleConfig.MaxMaterialize,
                m_scheduleConfig.MaxLightProcesses,
                m_scheduleConfig.OrchestratorCacheLookupMultiplier.ToString(),
                m_scheduleConfig.OrchestratorCpuMultiplier.ToString());
        }
コード例 #2
0
        /// <summary>
        /// Creates instance
        /// </summary>
        public PipQueue(IScheduleConfiguration config)
        {
            Contract.Requires(config != null);

            m_config = config;

            // If adaptive IO is enabled, then start with the half of the maxIO.
            var ioLimit = config.AdaptiveIO ? (config.MaxIO + 1) / 2 : config.MaxIO;

            m_chooseWorkerCacheLookupQueue = new ChooseWorkerQueue(this, config.MaxChooseWorkerCacheLookup);
            m_chooseWorkerCpuQueue = new ChooseWorkerQueue(this, config.MaxChooseWorkerCpu);

            m_queuesByKind = new Dictionary<DispatcherKind, DispatcherQueue>()
                             {
                                 {DispatcherKind.IO, new DispatcherQueue(this, ioLimit)},
                                 {DispatcherKind.ChooseWorkerCacheLookup, m_chooseWorkerCacheLookupQueue},
                                 {DispatcherKind.CacheLookup, new DispatcherQueue(this, config.MaxCacheLookup)},
                                 {DispatcherKind.ChooseWorkerCpu, m_chooseWorkerCpuQueue},
                                 {DispatcherKind.CPU, new DispatcherQueue(this, config.MaxProcesses)},
                                 {DispatcherKind.Materialize, new DispatcherQueue(this, config.MaxMaterialize)},
                                 {DispatcherKind.Light, new DispatcherQueue(this, config.MaxLightProcesses)}
                             };

            m_hasAnyChange = new ManualResetEventSlim(initialState: true /* signaled */);

            Tracing.Logger.Log.PipQueueConcurrency(
                Events.StaticContext,
                ioLimit,
                config.MaxChooseWorkerCacheLookup,
                config.MaxCacheLookup,
                config.MaxChooseWorkerCpu,
                config.MaxProcesses,
                config.MaxMaterialize,
                config.MaxLightProcesses,
                config.MasterCacheLookupMultiplier.ToString(),
                config.MasterCpuMultiplier.ToString());
        }