def perf_check(): bytes_size = [ 128, 256, 512, 1024, 2048, 4096 ] dl = PCIDevices() print for vendor in [FUSION_VENDOR, MELLANOX_VENDOR]: check_devs = dl.get(vendor=vendor) for check_dev in check_devs: # XXX Need to be safer with max payload, check all possible branches. worst_supported_maxpayload=0xffff dev_index = 0 for dev in dl.walk_from_root(check_dev): try: maxpayload_s = dev.config.read("pcie_device_capabilities_max_payload_size_supported") except: print "WARNING: Could not get maxpayload supported for %s" % (dev.addr) continue try: maxpayload_c = dev.config.read("pcie_device_control_max_payload_size") except: print "WARNING: Could not get maxpayload setting for %s" % (dev.addr) continue try: maxreadreq = dev.config.read("pcie_device_control_max_read_request_size") except: print "WARNING: Could not get max readreq setting for %s" % (dev.addr) continue if maxpayload_s < worst_supported_maxpayload: worst_supported_maxpayload = maxpayload_s # indent = " " * dev_index msg = "%s%s " % (indent, dev.addr) if dev.vendor == FUSION_VENDOR: msg += "-- Fusion Device " if dev.vendor == MELLANOX_VENDOR: msg += "-- Mellanox Device " if dev.vendor == PLX_VENDOR: msg += "-- PLX Device " if dev.is_root: msg += "-- Root Device" print msg print "%s MaxPayload supported %d" % (indent, bytes_size[maxpayload_s]) print "%s MaxPayload configured %d" % (indent, bytes_size[maxpayload_c]) print "%s MaxReadReq %d" % (indent, bytes_size[maxreadreq]) if worst_supported_maxpayload == 0: print "%s Warning: MaxPayload can go no higher than 128b, performance may suffer!" % (indent) if maxpayload_c < worst_supported_maxpayload: print "%s Warning: MaxPayload was not configured optimally for this device, bumping up to %d" % (indent, bytes_size[worst_supported_maxpayload]) dev.config.write("pcie_device_control_max_payload_size", worst_supported_maxpayload) if maxreadreq < 3: print "%s Warning: MaxReadReq is less than 1024, bumping up" % (indent) dev.config.write("pcie_device_control_max_read_request_size", 3) dev_index += 1 print print
def select_devices(): dl = PCIDevices() for vendor in [FUSION_VENDOR, MELLANOX_VENDOR]: check_devs = dl.get(vendor=vendor) for check_dev in check_devs: print "### Checking device %s" % (check_dev.addr) check_power(check_dev) check_maxpayload(check_dev, dl) check_maxreadreq(check_dev, dl) check_errors(check_dev) check_phantom(check_dev) check_tag(check_dev)
def kill_dev(): bytes_size = [ 128, 256, 512, 1024, 2048, 4096 ] dl = PCIDevices() fusion_devs = dl.get(device=FUSION_IODIMM_GEN1) # Try to get fioa to kill fusion_devs.sort(key=lambda m: str(m.addr)) kill_dimm = fusion_devs[0] print "" print "Killing device '%s' using link control at parent '%s'" % (kill_dimm.addr, kill_dimm.parent.addr) kill_dimm.parent.config.write("pcie_link_control_link_disable", 1)
def kill_dev(): bytes_size = [128, 256, 512, 1024, 2048, 4096] dl = PCIDevices() fusion_devs = dl.get(device=FUSION_IODIMM_GEN1) # Try to get fioa to kill fusion_devs.sort(key=lambda m: str(m.addr)) kill_dimm = fusion_devs[0] print "" print "Killing device '%s' using link control at parent '%s'" % ( kill_dimm.addr, kill_dimm.parent.addr) kill_dimm.parent.config.write("pcie_link_control_link_disable", 1)
def main(): dl = PCIDevices() #fusion_devs = dl.get(device=FUSION_IODIMM_GEN1) fusion_devs = dl.get(vendor=FUSION_VENDOR) for fdev in fusion_devs: print "" print "" for dev in list(dl.walk_to_root(fdev))[:-1]: # [:-1], don't want to futs with 00:00.0 print "" disable_pcie_error_prop(dev) disable_pcie_serr(dev) disable_legacy_pci_error(dev) disable_legacy_pci_serr(dev)
def walk_all_devices(): dl = PCIDevices() for pci_dev in dl.devices: aspm_current = None try: pci_dev.config.enumerate() aspm_current = pci_dev.config.read("pcie_link_control_aspm_control") except Exception, e: #print "Error reading ASPM state for device %s: %s" % (pci_dev.addr, e) continue print "ASPM for %s is 0x%x" % (pci_dev.addr, aspm_current) if aspm_current != 0: print " disabeling ASPM" pci_dev.config.write("pcie_link_control_aspm_control", 0)
def perf_check(): bytes_size = [128, 256, 512, 1024, 2048, 4096] dl = PCIDevices() print for vendor in [FUSION_VENDOR, MELLANOX_VENDOR]: check_devs = dl.get(vendor=vendor) for check_dev in check_devs: # XXX Need to be safer with max payload, check all possible branches. worst_supported_maxpayload = 0xffff dev_index = 0 for dev in dl.walk_from_root(check_dev): try: maxpayload_s = dev.config.read( "pcie_device_capabilities_max_payload_size_supported") except: print "WARNING: Could not get maxpayload supported for %s" % ( dev.addr) continue try: maxpayload_c = dev.config.read( "pcie_device_control_max_payload_size") except: print "WARNING: Could not get maxpayload setting for %s" % ( dev.addr) continue try: maxreadreq = dev.config.read( "pcie_device_control_max_read_request_size") except: print "WARNING: Could not get max readreq setting for %s" % ( dev.addr) continue if maxpayload_s < worst_supported_maxpayload: worst_supported_maxpayload = maxpayload_s # indent = " " * dev_index msg = "%s%s " % (indent, dev.addr) if dev.vendor == FUSION_VENDOR: msg += "-- Fusion Device " if dev.vendor == MELLANOX_VENDOR: msg += "-- Mellanox Device " if dev.vendor == PLX_VENDOR: msg += "-- PLX Device " if dev.is_root: msg += "-- Root Device" print msg print "%s MaxPayload supported %d" % ( indent, bytes_size[maxpayload_s]) print "%s MaxPayload configured %d" % ( indent, bytes_size[maxpayload_c]) print "%s MaxReadReq %d" % (indent, bytes_size[maxreadreq]) if worst_supported_maxpayload == 0: print "%s Warning: MaxPayload can go no higher than 128b, performance may suffer!" % ( indent) if maxpayload_c < worst_supported_maxpayload: print "%s Warning: MaxPayload was not configured optimally for this device, bumping up to %d" % ( indent, bytes_size[worst_supported_maxpayload]) dev.config.write("pcie_device_control_max_payload_size", worst_supported_maxpayload) if maxreadreq < 3: print "%s Warning: MaxReadReq is less than 1024, bumping up" % ( indent) dev.config.write( "pcie_device_control_max_read_request_size", 3) dev_index += 1 print print