Add numa_node info to NIC meta

Get numa_node ID for each NIC, add this info to interface meta and
report it to Nailgun.

Depends-on: I62299123b7ba783544a0b7411d5ee95bcab726f3
Change-Id: Ib75afde70da938fee95822c4575068c74efb8c93
Implements: blueprint support-dpdk
This commit is contained in:
Aleksandr Didenko 2016-02-22 12:37:26 +01:00
parent 5433c081ea
commit 70d6c56b2f
1 changed files with 26 additions and 1 deletions

27
agent
View File

@ -310,6 +310,15 @@ class NodeAgent
"" ""
end end
def nic_numa_node(int_bus_info)
numa_node = @numa_topology[:numa_nodes].select { |node|
node[:pcidevs].include?(int_meta[:bus_info])
}
numa_node.first[:id].to_i
rescue
nil
end
def _detailed def _detailed
detailed_meta = { detailed_meta = {
:system => _system_info, :system => _system_info,
@ -403,6 +412,8 @@ class NodeAgent
int_meta[:interface_properties][:sriov] = sriov_info(int, int_meta[:bus_info]) int_meta[:interface_properties][:sriov] = sriov_info(int, int_meta[:bus_info])
# Get PCI-ID # Get PCI-ID
int_meta[:interface_properties][:pci_id] = nic_pci_id(int) int_meta[:interface_properties][:pci_id] = nic_pci_id(int)
# Get numa node
int_meta[:interface_properties][:numa_node] = nic_numa_node(int_meta[:bus_info])
detailed_meta[:interfaces] << int_meta detailed_meta[:interfaces] << int_meta
end end
rescue Exception => e rescue Exception => e
@ -872,6 +883,17 @@ class NodeAgent
# <object type="NUMANode" os_index="0" cpuset="0x3ff003ff" complete_cpuset="0x3ff003ff" online_cpuset="0x3ff003ff" allowed_cpuset="0x3ff003ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="67452473344"> # <object type="NUMANode" os_index="0" cpuset="0x3ff003ff" complete_cpuset="0x3ff003ff" online_cpuset="0x3ff003ff" allowed_cpuset="0x3ff003ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="67452473344">
# <page_type size="4096" count="14370737"/> # <page_type size="4096" count="14370737"/>
# <page_type size="1073741824" count="8"/> # <page_type size="1073741824" count="8"/>
# ...
# <object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-07]">
# <object type="Bridge" os_index="51" name="Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3" bridge_type="1-1" depth="1" bridge_pci="0000:[04-04]" pci_busid="0000:00:03.3" pci_type="0604 [8086:2f0b] [0000:0000] 02" pci_link_speed="2.000000">
# <info name="PCIVendor" value="Intel Corporation"/>
# <info name="PCIDevice" value="Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3"/>
# <object type="PCIDev" os_index="16384" name="Intel Corporation I350 Gigabit Network Connection" pci_busid="0000:04:00.0" pci_type="0200 [8086:1521] [15d9:1521] 01" pci_link_speed="2.000000">
# <info name="PCIVendor" value="Intel Corporation"/>
# <info name="PCIDevice" value="I350 Gigabit Network Connection"/>
# <object type="OSDev" name="em1" osdev_type="2">
# <info name="Address" value="0c:c4:7a:6d:06:c6"/>
doc = Document.new `lstopo --no-caches --of xml` doc = Document.new `lstopo --no-caches --of xml`
topology = {:numa_nodes => [], :supported_hugepages => supported_hugepages, :distances => nil} topology = {:numa_nodes => [], :supported_hugepages => supported_hugepages, :distances => nil}
@ -886,13 +908,16 @@ class NodeAgent
doc.elements.each(element) do |numa| doc.elements.each(element) do |numa|
struct = {:id=> nil, :cpus => [], :memory => nil} struct = {:id=> nil, :cpus => [], :memory => nil, :pcidevs => []}
struct[:id] = numa.attributes['os_index'].to_i struct[:id] = numa.attributes['os_index'].to_i
struct[:memory] = numa.attributes['local_memory'].to_i struct[:memory] = numa.attributes['local_memory'].to_i
numa.elements.each("object/object/object[@type='PU']") do |pu| numa.elements.each("object/object/object[@type='PU']") do |pu|
struct[:cpus] << pu.attributes['os_index'].to_i struct[:cpus] << pu.attributes['os_index'].to_i
end end
numa.elements.each("object/object/object[@type='PCIDev']") do |pcidev|
struct[:pcidevs] << pcidev.attributes['pci_busid']
end
topology[:numa_nodes] << struct topology[:numa_nodes] << struct
end end
topology topology