from lib.py import ksft_run, ksft_exit from lib.py import ksft_ge, ksft_eq from lib.py import KsftSkipEx from lib.py import ksft_disruptive from lib.py import EthtoolFamily, NetdevFamily from lib.py import NetDrvEnv from lib.py import cmd, ip, defer
def read_affinity(irq) -> str: with open(f'/proc/irq/{irq}/smp_affinity', 'r') as fp: return fp.read().lstrip("0,").strip()
def write_affinity(irq, what) -> str: if what != read_affinity(irq): with open(f'/proc/irq/{irq}/smp_affinity', 'w') as fp:
fp.write(what)
def check_irqs_reported(cfg) -> None: """ Check that device reports IRQs for NAPI instances """
napis = cfg.netnl.napi_get({"ifindex": cfg.ifindex}, dump=True)
irqs = sum(['irq'in x for x in napis])
ksft_ge(irqs, 1)
ksft_eq(irqs, len(napis))
def _check_reconfig(cfg, reconfig_cb) -> None:
napis = cfg.netnl.napi_get({"ifindex": cfg.ifindex}, dump=True) for n in reversed(napis): if'irq'in n: break else: raise KsftSkipEx(f"Device has no NAPI with IRQ attribute (#napis: {len(napis)}")
old = read_affinity(n['irq']) # pick an affinity that's not the current one
new = "3"if old != "3"else"5"
write_affinity(n['irq'], new)
defer(write_affinity, n['irq'], old)
reconfig_cb(cfg)
ksft_eq(read_affinity(n['irq']), new, comment="IRQ affinity changed after reconfig")
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.