Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式获取Azure批处理节点中的核心数?_C#_.net_Azure_Azure Batch - Fatal编程技术网

C# 如何以编程方式获取Azure批处理节点中的核心数?

C# 如何以编程方式获取Azure批处理节点中的核心数?,c#,.net,azure,azure-batch,C#,.net,Azure,Azure Batch,我们正在使用Azure批处理服务运行一些计算引擎代码,并在创建池时指定VM的大小: var pool = batchClient.PoolOperations.CreatePool(poolId: $"{PoolIdPrefix}-{poolGuid}", virtualMachineSize: "STANDARD_G4", cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "4"), targetDedicat

我们正在使用Azure批处理服务运行一些计算引擎代码,并在创建池时指定VM的大小:

var pool = batchClient.PoolOperations.CreatePool(poolId: $"{PoolIdPrefix}-{poolGuid}", virtualMachineSize: "STANDARD_G4", cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "4"), targetDedicatedComputeNodes: 31, targetLowPriorityComputeNodes: 0);
注意:
targetIdeficatedComputeNodes
当前是硬编码的,但一旦解决此问题,将进行更改

使用这个,我们决定虚拟机的大小,在本例中,虚拟机恰好有16个内核

问题是,在执行此代码之前,我们需要检查当前存在的池,并计算(或者最好是简单地读取)当前正在使用的内核数量,以了解何时可以创建另一个包含所需数量内核(以及节点)的池

一个例子是,如果我们限制160个核心(因此10个节点采用这种配置),我们希望创建一个本身使用120个核心的池,然后在创建该池并开始执行之后,我们就有另一个要创建的池。这个新池还需要120个内核,因此我们需要能够告诉新池等待,因为没有足够的内核来制作它

我找到了一种方法,可以使用以下代码获取正在使用的
ComputeNode
s的数量:

var batchManagementClient = new BatchManagementClient(new TokenCredentials(token))
{
    SubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
};

var currentNodes = 0;
using (var batchClient = BatchClient.Open(credentials))
{
    var pools = batchClient.PoolOperations.ListPools();
    foreach (var cloudPool in pools)
    {
        if (cloudPool.CurrentDedicatedComputeNodes != null)
        {
            currentNodes += cloudPool.CurrentDedicatedComputeNodes.Value;
        }
    }
}
但是这里的问题是,
ComputeNode
s没有任何属性可以告诉我它已经/正在使用多少个内核,而且我还没有找到任何类似ManagementClient的类,或任何其他类或方法来获取给定池或所有池中使用的内核数量,或者单个
ComputeNode
分配给它的核数

或者,我还没有找到一种方法,根据我们在创建新池时使用的
virtualMachineSize
属性来获取分配给每个
ComputeNode
的核心数

在此方面的任何帮助都将不胜感激,因为我更希望获得代码中的内核数量,以防止Microsoft将来可能对
virtualMachineSize
进行的任何大小更改,因为否则我将不得不根据指定的VM大小硬编码内核数量

注意:似乎存在一个获取当前使用的内核和给定位置中所有池的可用内核限制的表,Azure Portal池刀片显示了一个表,该表具有一个可选列,用于报告当前使用的内核。所以我认为这在C#中也是可能的

请让我知道,如果有任何其他信息,我可以提供


谢谢。

您可以通过将上面使用的与结合使用来完成此操作。或者,您可以使用按需获取批处理帐户的核心配额

  • 首先,在你的帐户中输入一个
  • 对于帐户中的每个批处理池,获取字符串和计数。请注意,专用计数与低优先级计数(和配额)是分开的
  • 使用Azure管理SDK(计算)获取批处理帐户所在区域的名称。这将返回一个iterable的列表,您可以从中获得与#2相关的相应VirtualMachine的
    numberOfCores
  • SumAllBatchPools的计算结果(VirtualMachineSize.numberOfCores*currentIficatedComputeNodes)
  • (可选)使用Azure Batch Management.NET API查询您的批处理帐户,并计算#5的差值,以获得批处理帐户的即时可用核心配额

  • 非常感谢!这正是我需要的!