summaryrefslogtreecommitdiffstats
path: root/mibs/Intel-Pmu.txt
diff options
context:
space:
mode:
Diffstat (limited to 'mibs/Intel-Pmu.txt')
-rw-r--r--mibs/Intel-Pmu.txt409
1 files changed, 409 insertions, 0 deletions
diff --git a/mibs/Intel-Pmu.txt b/mibs/Intel-Pmu.txt
new file mode 100644
index 00000000..328c5049
--- /dev/null
+++ b/mibs/Intel-Pmu.txt
@@ -0,0 +1,409 @@
+INTEL-PMU-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ MODULE-IDENTITY, OBJECT-TYPE, Integer32, Counter64
+ FROM SNMPv2-SMI
+
+ hostAssist
+ FROM Intel-SA-MIB
+
+ DisplayString
+ FROM SNMPv2-TC;
+
+--*****************************************************************************
+--
+-- MODULE IDENTITY AND REVISION GROUP
+--
+--*****************************************************************************
+
+intelPmu MODULE-IDENTITY
+ LAST-UPDATED "201703061700Z" -- coordinated universal time UTC format is YYMMDDHHmmZ
+ ORGANIZATION "Intel, Server Management Software"
+ CONTACT-INFO " "
+ DESCRIPTION "This SNMP MIB module supports the Intel PMU SNMP subagent for getting
+ performance counters data on Intel CPUs.
+
+ Version: 1.0 3/6/2017
+
+ Intel copyright information 2017"
+ ::= { hostAssist 5 }
+
+OneBasedIndex ::= Integer32(1..2147483647)
+
+-------------------------------------------------------------------------------
+-- Intel PMU Table
+-------------------------------------------------------------------------------
+
+pmuTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF PmuTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION "This Group defines the Intel PMU Table."
+ ::= { intelPmu 1 }
+
+pmuTableEntry OBJECT-TYPE
+ SYNTAX PmuTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION "This Group defines the Intel PMU Table Entry."
+ INDEX { pmuGroupIndex }
+ ::= { pmuTable 1 }
+
+PmuTableEntry ::= SEQUENCE {
+ pmuGroupIndex OneBasedIndex,
+ pmuGroupDescr DisplayString,
+ pmuL1DCacheLoads Counter64,
+ pmuL1DCacheLoadMisses Counter64,
+ pmuL1DCacheStores Counter64,
+ pmuL1DCacheStoreMisses Counter64,
+ pmuL1DCachePrefetches Counter64,
+ pmuL1DCachePrefetchMisses Counter64,
+ pmuL1ICacheLoads Counter64,
+ pmuL1ICacheLoadMisses Counter64,
+ pmuL1ICachePrefetches Counter64,
+ pmuL1ICachePrefetchMisses Counter64,
+ pmuLLCLoads Counter64,
+ pmuLLCLoadMisses Counter64,
+ pmuLLCStores Counter64,
+ pmuLLCStoreMisses Counter64,
+ pmuLLCPrefetches Counter64,
+ pmuLLCPrefetchMisses Counter64,
+ pmuDTLBLoads Counter64,
+ pmuDTLBLoadMisses Counter64,
+ pmuDTLBStores Counter64,
+ pmuDTLBStoreMisses Counter64,
+ pmuDTLBPrefetches Counter64,
+ pmuDTLBPrefetchMisses Counter64,
+ pmuITLBLoads Counter64,
+ pmuITLBLoadMisses Counter64,
+ pmuBranchLoads Counter64,
+ pmuBranchLoadMisses Counter64,
+ pmuCpuCycles Counter64,
+ pmuInstructions Counter64,
+ pmuCacheReferences Counter64,
+ pmuCacheMisses Counter64,
+ pmuBranches Counter64,
+ pmuBranchMisses Counter64,
+ pmuBusCycles Counter64,
+ pmuCpuClock Counter64,
+ pmuTaskClock Counter64,
+ pmuContextSwitches Counter64,
+ pmuCpuMigrations Counter64,
+ pmuPageFaults Counter64,
+ pmuMinorFaults Counter64,
+ pmuMajorFaults Counter64,
+ pmuAlignmentFaults Counter64,
+ pmuEmulationFaults Counter64
+}
+
+pmuGroupIndex OBJECT-TYPE
+ SYNTAX OneBasedIndex
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "This attribute defines the index of the CPU cores group."
+ ::= { pmuTableEntry 1 }
+
+pmuGroupDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A textual string containing information about the group of cores
+ on which counters are collected."
+ ::= { pmuTableEntry 2 }
+
+pmuL1DCacheLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Loads"
+ ::= { pmuTableEntry 3 }
+
+pmuL1DCacheLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Load Misses"
+ ::= { pmuTableEntry 4 }
+
+pmuL1DCacheStores OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Stores"
+ ::= { pmuTableEntry 5 }
+
+pmuL1DCacheStoreMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Store Misses"
+ ::= { pmuTableEntry 6 }
+
+pmuL1DCachePrefetches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Prefetches"
+ ::= { pmuTableEntry 7 }
+
+pmuL1DCachePrefetchMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 DCache Prefetch Misses"
+ ::= { pmuTableEntry 8 }
+
+pmuL1ICacheLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 ICache Loads"
+ ::= { pmuTableEntry 9 }
+
+pmuL1ICacheLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 ICache Load Misses"
+ ::= { pmuTableEntry 10 }
+
+pmuL1ICachePrefetches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 ICache Prefetches"
+ ::= { pmuTableEntry 11 }
+
+pmuL1ICachePrefetchMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "L1 ICache Prefetch Misses"
+ ::= { pmuTableEntry 12 }
+
+pmuLLCLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Loads"
+ ::= { pmuTableEntry 13 }
+
+pmuLLCLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Load Misses"
+ ::= { pmuTableEntry 14 }
+
+pmuLLCStores OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Stores"
+ ::= { pmuTableEntry 15 }
+
+pmuLLCStoreMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Store Misses"
+ ::= { pmuTableEntry 16 }
+
+pmuLLCPrefetches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Prefetches"
+ ::= { pmuTableEntry 17 }
+
+pmuLLCPrefetchMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "LLC Prefetch Misses"
+ ::= { pmuTableEntry 18 }
+
+pmuDTLBLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Loads"
+ ::= { pmuTableEntry 19 }
+
+pmuDTLBLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Load Misses"
+ ::= { pmuTableEntry 20 }
+
+pmuDTLBStores OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Stores"
+ ::= { pmuTableEntry 21 }
+
+pmuDTLBStoreMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Store Misses"
+ ::= { pmuTableEntry 22 }
+
+pmuDTLBPrefetches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Prefetches"
+ ::= { pmuTableEntry 23 }
+
+pmuDTLBPrefetchMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "DTLB Prefetch Misses"
+ ::= { pmuTableEntry 24 }
+
+pmuITLBLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "ITLB Loads"
+ ::= { pmuTableEntry 25 }
+
+pmuITLBLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "ITLB Load Misses"
+ ::= { pmuTableEntry 26 }
+
+pmuBranchLoads OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Branch Loads"
+ ::= { pmuTableEntry 27 }
+
+pmuBranchLoadMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Branch Load Misses"
+ ::= { pmuTableEntry 28 }
+
+pmuCpuCycles OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "CPU Cycles"
+ ::= { pmuTableEntry 29 }
+
+pmuInstructions OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Instructions"
+ ::= { pmuTableEntry 30 }
+
+pmuCacheReferences OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Cache References"
+ ::= { pmuTableEntry 31 }
+
+pmuCacheMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Cache Misses"
+ ::= { pmuTableEntry 32 }
+
+pmuBranches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Branches"
+ ::= { pmuTableEntry 33 }
+
+pmuBranchMisses OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Branch Misses"
+ ::= { pmuTableEntry 34 }
+
+pmuBusCycles OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Bus Cycles"
+ ::= { pmuTableEntry 35 }
+
+pmuCpuClock OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "CPU Clock"
+ ::= { pmuTableEntry 36 }
+
+pmuTaskClock OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Task Clock"
+ ::= { pmuTableEntry 37 }
+
+pmuContextSwitches OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Context Switches"
+ ::= { pmuTableEntry 38 }
+
+pmuCpuMigrations OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "CPU Migrations"
+ ::= { pmuTableEntry 39 }
+
+pmuPageFaults OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Page Faults"
+ ::= { pmuTableEntry 40 }
+
+pmuMinorFaults OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Minor Faults"
+ ::= { pmuTableEntry 41 }
+
+pmuMajorFaults OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Major Faults"
+ ::= { pmuTableEntry 42 }
+
+pmuAlignmentFaults OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Alignment Faults"
+ ::= { pmuTableEntry 43 }
+
+pmuEmulationFaults OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION "Emulation Faults"
+ ::= { pmuTableEntry 44 }
+
+END
self.heat_parameters = None # generate an uuid to identify yardstick_key # the first 8 digits of the uuid will be used self.key_uuid = uuid.uuid4() self.key_filename = ''.join( [YARDSTICK_ROOT_PATH, 'yardstick/resources/files/yardstick_key-', get_short_key_uuid(self.key_uuid)]) super(HeatContext, self).__init__() def assign_external_network(self, networks): sorted_networks = sorted(networks.items()) external_network = os.environ.get("EXTERNAL_NETWORK", "net04_ext") have_external_network = [(name, net) for name, net in sorted_networks if net.get("external_network")] # no external net defined, assign it to first network usig os.environ if sorted_networks and not have_external_network: sorted_networks[0][1]["external_network"] = external_network def init(self, attrs): # pragma: no cover """initializes itself from the supplied arguments""" self.name = attrs["name"] self._user = attrs.get("user") self.template_file = attrs.get("heat_template") if self.template_file: self.heat_parameters = attrs.get("heat_parameters") return self.keypair_name = self.name + "-key" self.secgroup_name = self.name + "-secgroup" self._image = attrs.get("image") self._flavor = attrs.get("flavor") self.placement_groups = [PlacementGroup(name, self, pgattrs["policy"]) for name, pgattrs in attrs.get( "placement_groups", {}).items()] self.server_groups = [ServerGroup(name, self, sgattrs["policy"]) for name, sgattrs in attrs.get( "server_groups", {}).items()] self.assign_external_network(attrs["networks"]) self.networks = [Network(name, self, netattrs) for name, netattrs in sorted(attrs["networks"].items())] for name, serverattrs in attrs["servers"].items(): server = Server(name, self, serverattrs) self.servers.append(server) self._server_map[server.dn] = server rsa_key = paramiko.RSAKey.generate(bits=2048, progress_func=None) rsa_key.write_private_key_file(self.key_filename) print("Writing %s ..." % self.key_filename) with open(self.key_filename + ".pub", "w") as pubkey_file: pubkey_file.write( "%s %s\n" % (rsa_key.get_name(), rsa_key.get_base64())) del rsa_key @property def image(self): """returns application's default image name""" return self._image @property def flavor(self): """returns application's default flavor name""" return self._flavor @property def user(self): """return login user name corresponding to image""" return self._user def _add_resources_to_template(self, template): """add to the template the resources represented by this context""" if self.flavor: if isinstance(self.flavor, dict): flavor = self.flavor.setdefault("name", self.name + "-flavor") template.add_flavor(**self.flavor) self.flavors.add(flavor) template.add_keypair(self.keypair_name, self.key_uuid) template.add_security_group(self.secgroup_name) for network in self.networks: template.add_network(network.stack_name, network.physical_network, network.provider) template.add_subnet(network.subnet_stack_name, network.stack_name, network.subnet_cidr) if network.router: template.add_router(network.router.stack_name, network.router.external_gateway_info, network.subnet_stack_name) template.add_router_interface(network.router.stack_if_name, network.router.stack_name, network.subnet_stack_name) # create a list of servers sorted by increasing no of placement groups list_of_servers = sorted(self.servers, key=lambda s: len(s.placement_groups)) # # add servers with scheduler hints derived from placement groups # # create list of servers with availability policy availability_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "availability": availability_servers.append(server) break for server in availability_servers: if isinstance(server.flavor, dict): try: self.flavors.add(server.flavor["name"]) except KeyError: self.flavors.add(server.stack_name + "-flavor") # add servers with availability policy added_servers = [] for server in availability_servers: scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) # workround for openstack nova bug, check JIRA: YARDSTICK-200 # for details if len(availability_servers) == 2: if not scheduler_hints["different_host"]: scheduler_hints.pop("different_host", None) server.add_to_template(template, self.networks, scheduler_hints) else: scheduler_hints["different_host"] = \ scheduler_hints["different_host"][0] server.add_to_template(template, self.networks, scheduler_hints) else: server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # create list of servers with affinity policy affinity_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "affinity": affinity_servers.append(server) break # add servers with affinity policy for server in affinity_servers: if server.stack_name in added_servers: continue scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # add server group for sg in self.server_groups: template.add_server_group(sg.name, sg.policy) # add remaining servers with no placement group configured for server in list_of_servers: # TODO placement_group and server_group should combine if not server.placement_groups: scheduler_hints = {} # affinity/anti-aff server group sg = server.server_group if sg: scheduler_hints["group"] = {'get_resource': sg.name} server.add_to_template(template, self.networks, scheduler_hints) def deploy(self): """deploys template into a stack using cloud""" print("Deploying context '%s'" % self.name) heat_template = HeatTemplate(self.name, self.template_file, self.heat_parameters) if self.template_file is None: self._add_resources_to_template(heat_template) try: self.stack = heat_template.create() except KeyboardInterrupt: sys.exit("\nStack create interrupted") except RuntimeError as err: sys.exit("error: failed to deploy stack: '%s'" % err.args) except Exception as err: sys.exit("error: failed to deploy stack: '%s'" % err) # copy some vital stack output into server objects for server in self.servers: if server.ports: # TODO(hafe) can only handle one internal network for now port = next(iter(server.ports.values())) server.private_ip = self.stack.outputs[port["stack_name"]] if server.floating_ip: server.public_ip = \ self.stack.outputs[server.floating_ip["stack_name"]] print("Context '%s' deployed" % self.name) def undeploy(self): """undeploys stack from cloud""" if self.stack: print("Undeploying context '%s'" % self.name) self.stack.delete() self.stack = None print("Context '%s' undeployed" % self.name) if os.path.exists(self.key_filename): try: os.remove(self.key_filename) os.remove(self.key_filename + ".pub") except OSError: LOG.exception("Key filename %s", self.key_filename) super(HeatContext, self).undeploy() def _get_server(self, attr_name): """lookup server info by name from context attr_name: either a name for a server created by yardstick or a dict with attribute name mapping when using external heat templates """ key_filename = pkg_resources.resource_filename( 'yardstick.resources', 'files/yardstick_key-' + get_short_key_uuid(self.key_uuid)) if isinstance(attr_name, collections.Mapping): cname = attr_name["name"].split(".")[1] if cname != self.name: return None public_ip = None private_ip = None if "public_ip_attr" in attr_name: public_ip = self.stack.outputs[attr_name["public_ip_attr"]] if "private_ip_attr" in attr_name: private_ip = self.stack.outputs[ attr_name["private_ip_attr"]] # Create a dummy server instance for holding the *_ip attributes server = Server(attr_name["name"].split(".")[0], self, {}) server.public_ip = public_ip server.private_ip = private_ip else: if attr_name not in self._server_map: return None server = self._server_map[attr_name] if server is None: return None result = { "user": server.context.user, "key_filename": key_filename, "private_ip": server.private_ip } # Target server may only have private_ip if server.public_ip: result["ip"] = server.public_ip return result