Как получить разницу NUMA для конкретного сетевого адаптера, который использует RSS в Powershell - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу написать сценарий powershell, который проверяет, использует ли сетевая карта, которая использует масштабирование на стороне приема, процессор с расстоянием NUMA (неоднородный доступ к памяти)> 0.

Что я имеюсделано до сих пор:

$name = "Ethernet"
$adapter = Get-NetAdapterRss -Name $name

Выводит данные процессора RSS-адаптера (вместе с другой информацией), например:

RssProcessorArray: [Group: Number / NUMA Distance]: 0: 0/0 0: 2/0 0: 4/0 0: 6/0 0: 8/0 0: 10/0 0: 12/0 0: 14/0 0: 16/0 0: 18/0 0: 20/0 0: 22/0 0: 24/32767 0: 26/32767 0: 28/32767 0: 30/32767 0: 32/32767 0: 34/32767 0: 36/32767 0: 38/32767 0: 40/32767 0: 42/32767 0: 44/32767 0: 46/32767

Как видите, расстояние NUMA - это значение, стоящее за '/'.Теперь я хочу получить его как:

foreach($processor in $adapter.RssProcessorArray) 
{
    Write-Host $processor.ProcessorGroup
    Write-Host $processor.ProcessorNumber
    Write-Host $processor.??
}

Каким-то образом у объекта, который я получаю, нет свойства ".NumaDistance".Как я могу получить это значение для каждого процессора в списке?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Аналогичная идея, но с регулярным выражением:

$str = (Get-NetAdapterrss -name "Ethernet" | Out-String).Split("`n") | where {$_ -like 'RssProcessorArray*'}
$rss =  $str | Select-String '\d+:\d+/\d+' -AllMatches
Write-Output $rss.Matches.Value
$rss.Matches.Value | foreach { ($_ -split "[:/]") -join "---" } #if need each value separetly
0 голосов
/ 21 ноября 2018

Использование статических данных в качестве примера, но надеюсь, что это поможет

$text = 'RssProcessorArray: [Group:Number/NUMA Distance] : 0:0/0 0:2/0 0:4/0 0:6/0 0:8/0 0:10/0 0:12/0 0:14/0 0:16/0 0:18/0 0:20/0 0:22/0 0:24/32767 0:26/32767 0:28/32767 0:30/32767 0:32/32767 0:34/32767 0:36/32767 0:38/32767 0:40/32767 0:42/32767 0:44/32767 0:46/32767'

# split the text up on spaces
$firstSplit = $text.Split(' ')

# take all results starting at the first 0:0/0
# put into an array
[array]$processData = $firstSplit[4..($firstSplit.Count -1)]

# get just the data after the / for each item in the array
[array]$splitProcessData = $processData.split('/') | ? {$_ -notmatch ':'}

foreach($processor in $adapter.RssProcessorArray) 
{
    Write-Host $processor.ProcessorGroup
    Write-Host $processor.ProcessorNumber

    foreach($entry in $splitProcessData)
    {
        Write-Host $entry
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...