public void ProcessorCoreInfoMatchesProcessorCount()
        {
            var cores     = MultiProcessorInformation.GetProcessorCoreInfo();
            int coreCount = cores.Sum(core => core.IsSMT ? 2 : 1);

            Assert.Equal(coreCount, Environment.ProcessorCount);
        }
        public void NumaNodeAffinitiesAreNotZero()
        {
            var nodes = MultiProcessorInformation.GetNumaNodeInfo();

            foreach (var node in nodes)
            {
                Assert.True(node.Affinity.Mask != UIntPtr.Zero);
            }
        }
Exemplo n.º 3
0
        public void ProcessorPackageGroupMaskIsNotEmpty()
        {
            var packages = MultiProcessorInformation.GetProcessorPackageInfo();

            foreach (var package in packages)
            {
                Assert.NotEmpty(package.Affinities);
            }
        }
Exemplo n.º 4
0
        public void GroupMasksAreNotZero()
        {
            var groupInfo = MultiProcessorInformation.GetGroupsInfo();

            foreach (var group in groupInfo.Groups)
            {
                Assert.True(group.ActiveProcessorMask != UIntPtr.Zero);
            }
        }
        public void ProcessorCacheGroupMasksAreNotZero()
        {
            var caches = MultiProcessorInformation.GetCacheInfo();

            foreach (var cache in caches)
            {
                Assert.True(cache.Affinity.Mask != UIntPtr.Zero);
            }
        }
        public void ProcessorCoreGroupMaskIsNotEmpty()
        {
            var cores = MultiProcessorInformation.GetProcessorCoreInfo();

            foreach (var core in cores)
            {
                Assert.NotEmpty(core.Affinities);
            }
        }
        public void ProcessorCacheLineSizeGreaterThanZero()
        {
            var caches = MultiProcessorInformation.GetCacheInfo();

            foreach (var cache in caches)
            {
                Assert.True(cache.LineSize > 0);
            }
        }
        public void ProcessorCacheTypesWithinRange()
        {
            var caches = MultiProcessorInformation.GetCacheInfo();

            foreach (var cache in caches)
            {
                Assert.True(Enum.IsDefined(typeof(CacheType), cache.Type));
            }
        }
Exemplo n.º 9
0
        public void ProcessorPackageGroupMaskIsNotZero()
        {
            var packages = MultiProcessorInformation.GetProcessorPackageInfo();

            foreach (var package in packages)
            {
                foreach (var affinity in package.Affinities)
                {
                    Assert.True(affinity.Mask != UIntPtr.Zero);
                }
            }
        }
        public void CanSetProcessorGroup()
        {
            // get the first group so we can extract its affinity
            var firstGroup = MultiProcessorInformation.GetGroupsInfo().Groups.First();

            foreach (ProcessThread pt in Process.GetCurrentProcess().Threads)
            {
                // set the thread affinity to the first group on the system (group 0)
                pt.SetProcessorGroup(0, firstGroup.ActiveProcessorMask);

                // only process the first thread
                break;
            }
        }
        public void NumaNodeInfoReturnsData()
        {
            var nodes = MultiProcessorInformation.GetNumaNodeInfo();

            Assert.NotEmpty(nodes);
        }
Exemplo n.º 12
0
        static void Main(string[] args)
        {
            // print information about group affinities for processor packages
            var packages = MultiProcessorInformation.GetProcessorPackageInfo();

            for (int i = 0; i < packages.Length; i++)
            {
                Console.WriteLine($"Processor Package {i}:");
                foreach (var affinity in packages[i].Affinities)
                {
                    Console.WriteLine($"\tAffinity: {affinity.Group} (mask: {affinity.Mask.ToUInt64():x16})");
                }
            }
            Console.WriteLine();

            // print information about group affinities for processor cores
            var cores = MultiProcessorInformation.GetProcessorCoreInfo();

            Console.WriteLine($"Core Count: {cores.Length}");
            for (int i = 0; i < cores.Length; i++)
            {
                Console.WriteLine($"Processor Core {i} (SMT: {cores[i].IsSMT}, Efficiency Class {cores[i].EfficiencyClass})");
                foreach (var affinity in cores[i].Affinities)
                {
                    Console.WriteLine($"\tAffinity: {affinity.Group} (Mask: {affinity.Mask.ToUInt64():x16})");
                }
            }
            Console.WriteLine();

            // print information about processor caches and their associated affinities
            var caches = MultiProcessorInformation.GetCacheInfo();

            Console.WriteLine($"Cache Count: {caches.Length}");
            for (int i = 0; i < caches.Length; i++)
            {
                Console.WriteLine($"Cache {i}:");
                Console.WriteLine($"\t Level:          {caches[i].Level}");
                Console.WriteLine($"\t Associativity:  {caches[i].Associativity}");
                Console.WriteLine($"\t Line Size:      {caches[i].LineSize}");
                Console.WriteLine($"\t Cache Size:     {caches[i].Level}");
                Console.WriteLine($"\t Group Number:   {caches[i].Affinity.Group}");
                Console.WriteLine($"\t Group Mask:     {caches[i].Affinity.Mask.ToUInt64():x16}");
            }
            Console.WriteLine();

            // print information about processor groups on the system
            var groupInfo = MultiProcessorInformation.GetGroupsInfo();

            Console.WriteLine($"Maximum Group Count: {groupInfo.MaximumGroupCount}");
            Console.WriteLine($"Active Group Count:  {groupInfo.ActiveGroupCount}");
            Console.WriteLine("Active Groups:");
            for (int i = 0; i < groupInfo.Groups.Length; i++)
            {
                Console.WriteLine($"\tGroup {i} (Active Count: {groupInfo.Groups[i].ActiveProcessorCount}, Maximum Count: {groupInfo.Groups[i].MaximumProcessorCount}, Mask: {groupInfo.Groups[i].ActiveProcessorMask.ToUInt64():x16})");
            }
            Console.WriteLine();

            // get the process group numbers associated with the current process
            ushort[] processGroups = Process.GetCurrentProcess().GetGroupAffinity();
            Console.WriteLine("Current Process Group Numbers: {" + string.Join(", ", processGroups) + "}");
            Console.WriteLine();

            // print the group affinities for all native threads in the current process
            foreach (ProcessThread pt in Process.GetCurrentProcess().Threads)
            {
                var affinity = pt.GetProcessorGroup();
                Console.WriteLine($"Thread {pt.Id.ToString().PadRight(8, ' ')} is assigned group {affinity.Group.ToString().PadRight(2, ' ')} (mask {affinity.Mask.ToUInt64():x16})");
            }
            Console.WriteLine();

            // set the processor group for a native thread to group number 0 with a mask of 0xff (the default)
            Process.GetCurrentProcess().Threads[0].SetProcessorGroup(0, new UIntPtr(0xff));
        }
Exemplo n.º 13
0
        public void ProcessorPackageInfoReturnsData()
        {
            var packages = MultiProcessorInformation.GetProcessorPackageInfo();

            Assert.NotEmpty(packages);
        }
Exemplo n.º 14
0
        public void GroupInfoReturnsData()
        {
            var groupInfo = MultiProcessorInformation.GetGroupsInfo();

            Assert.NotEmpty(groupInfo.Groups);
        }
        public void ProcessorCoreInfoReturnsData()
        {
            var cores = MultiProcessorInformation.GetProcessorCoreInfo();

            Assert.NotEmpty(cores);
        }
        public void ProcessorCacheInfoReturnsData()
        {
            var caches = MultiProcessorInformation.GetCacheInfo();

            Assert.NotEmpty(caches);
        }