eaiovnaovbqoebvqoeavibavo defirqaffinity.py000075500000007006147633152250010140 0ustar00#!/usr/bin/python2 # Helper script for realtime profiles provided by RT import os import sys irqpath = "/proc/irq/" def bitmasklist(line): fields = line.strip().split(",") bitmasklist = [] entry = 0 for i in range(len(fields) - 1, -1, -1): mask = int(fields[i], 16) while mask != 0: if mask & 1: bitmasklist.append(entry) mask >>= 1 entry += 1 return bitmasklist def get_cpumask(mask): groups = [] comma = 0 while mask: cpumaskstr = '' m = mask & 0xffffffff cpumaskstr += ('%x' % m) if comma: cpumaskstr += ',' comma = 1 mask >>= 32 groups.append(cpumaskstr) string = '' for i in reversed(groups): string += i return string def parse_def_affinity(fname): if os.getuid() != 0: return try: with open(fname, 'r') as f: line = f.readline() return bitmasklist(line) except IOError: return [ 0 ] def verify(shouldbemask): inplacemask = 0 fname = irqpath + "default_smp_affinity"; cpulist = parse_def_affinity(fname) for i in cpulist: inplacemask = inplacemask | 1 << i; if (inplacemask & ~shouldbemask): sys.stderr.write("verify: failed: irqaffinity (%s) inplacemask=%x shouldbemask=%x\n" % (fname, inplacemask, shouldbemask)) sys.exit(1) # now verify each /proc/irq/$num/smp_affinity interruptdirs = [ f for f in os.listdir(irqpath) if os.path.isdir(os.path.join(irqpath,f)) ] # IRQ 2 - cascaded signals from IRQs 8-15 (any devices configured to use IRQ 2 will actually be using IRQ 9) try: interruptdirs.remove("2") except ValueError: pass # IRQ 0 - system timer (cannot be changed) try: interruptdirs.remove("0") except ValueError: pass for i in interruptdirs: inplacemask = 0 fname = irqpath + i + "/smp_affinity" cpulist = parse_def_affinity(fname) for i in cpulist: inplacemask = inplacemask | 1 << i; if (inplacemask & ~shouldbemask): sys.stderr.write("verify: failed: irqaffinity (%s) inplacemask=%x shouldbemask=%x\n" % (fname, inplacemask, shouldbemask)) sys.exit(1) sys.exit(0) # adjust default_smp_affinity cpulist = parse_def_affinity(irqpath + "default_smp_affinity") mask = 0 for i in cpulist: mask = mask | 1 << i; if len(sys.argv) < 3 or len(str(sys.argv[2])) == 0: sys.stderr.write("%s: invalid arguments\n" % os.path.basename(sys.argv[0])) sys.exit(1) line = sys.argv[2] fields = line.strip().split(",") for i in fields: if sys.argv[1] == "add": mask = mask | 1 << int(i); elif sys.argv[1] == "remove" or sys.argv[1] == "verify": mask = mask & ~(1 << int(i)); if sys.argv[1] == "verify": verify(mask) string = get_cpumask(mask) fo = open(irqpath + "default_smp_affinity", "wb") fo.write(string) fo.close() # now adjust each /proc/irq/$num/smp_affinity interruptdirs = [ f for f in os.listdir(irqpath) if os.path.isdir(os.path.join(irqpath,f)) ] # IRQ 2 - cascaded signals from IRQs 8-15 (any devices configured to use IRQ 2 will actually be using IRQ 9) try: interruptdirs.remove("2") except ValueError: pass # IRQ 0 - system timer (cannot be changed) try: interruptdirs.remove("0") except ValueError: pass ret = 0 for i in interruptdirs: fname = irqpath + i + "/smp_affinity" cpulist = parse_def_affinity(fname) mask = 0 for j in cpulist: mask = mask | 1 << j; for j in fields: if sys.argv[1] == "add": mask = mask | 1 << int(j); elif sys.argv[1] == "remove": mask = mask & ~(1 << int(j)); string = get_cpumask(mask) try: fo = open(fname, "wb") fo.write(string) fo.close() except IOError as e: sys.stderr.write('Failed to set smp_affinity for IRQ %s: %s\n' % (str(i), str(e))) ret = 1 sys.exit(ret) defirqaffinity.pyc000064400000007070147633152260010302 0ustar00 \c@sddlZddlZdZdZdZdZdZeedZdZxeD]Z ed e >BZq_We ej d kse e ej d dkrej jd ejjej dejd nej d Zejjd ZxveD]nZ ej d dkr;ed ee >BZq ej d dksaej d dkr ed ee >@Zq q Wej d dkreeneeZeeddZejeejgejeD]-Zejjejjeere^qZyej dWne!k r:nXyej dWne!k r_nXdZ"x+eD]#Z ee dZ#ee#ZdZxeD]Z$ed e$>BZqWxceD][Z$ej d dkred ee$>BZqej d dkred ee$>@ZqqWeeZy*ee#dZejeejWqme%k rZ&ej jde e e e&fd Z"qmXqmWeje"dS(iNs /proc/irq/cCs|jjd}g}d}xxtt|dddD]Z}t||d}x>|dkr|d@r|j|n|dL}|d7}qZWq>W|S(Nt,iiii(tstriptsplittrangetlentinttappend(tlinetfieldst bitmasklisttentrytitmask((s$/usr/libexec/tuned/defirqaffinity.pyR s#  cCsg}d}xX|rfd}|d@}|d|7}|rF|d7}nd}|dL}|j|qWd}xt|D]}||7}qzW|S(NitIs%xRii (Rtreversed(R tgroupstcommat cpumaskstrtmtstringR ((s$/usr/libexec/tuned/defirqaffinity.pyt get_cpumasks    cCsdtjdkrdSy2t|d}|j}WdQXt|SWntk r_dgSXdS(Nitr(tostgetuidtopentreadlineR tIOError(tfnametfR((s$/usr/libexec/tuned/defirqaffinity.pytparse_def_affinity(s cCsd}td}t|}x|D]}|d|>B}q#W||@rstjjd|||ftjdngtjtD]-}tjj tjj t|r|^q}y|j dWnt k rnXy|j dWnt k rnXx|D]}}d}t|d}t|}x|D]}|d|>B}q4W||@rtjjd|||ftjdqqWtjddS(Nitdefault_smp_affinityis@verify: failed: irqaffinity (%s) inplacemask=%x shouldbemask=%x t2t0s /smp_affinity( tirqpathRtsyststderrtwritetexitRtlistdirtpathtisdirtjointremovet ValueError(t shouldbemaskt inplacemaskRtcpulistR Rt interruptdirs((s$/usr/libexec/tuned/defirqaffinity.pytverify2s6    C      Riiiis%s: invalid arguments RtaddR*R0twbRR s /smp_affinitys*Failed to set smp_affinity for IRQ %s: %s ('RR"R!R RRR0R.R R RtargvtstrR#R$R'tbasenameR%RRRRRRRtfotcloseR&RR(R)R/R*R+tretRtjRte(((s$/usr/libexec/tuned/defirqaffinity.pytsp    % 4'  &    C        &defirqaffinity.pyo000064400000007070147633152260010316 0ustar00 \c@sddlZddlZdZdZdZdZdZeedZdZxeD]Z ed e >BZq_We ej d kse e ej d dkrej jd ejjej dejd nej d Zejjd ZxveD]nZ ej d dkr;ed ee >BZq ej d dksaej d dkr ed ee >@Zq q Wej d dkreeneeZeeddZejeejgejeD]-Zejjejjeere^qZyej dWne!k r:nXyej dWne!k r_nXdZ"x+eD]#Z ee dZ#ee#ZdZxeD]Z$ed e$>BZqWxceD][Z$ej d dkred ee$>BZqej d dkred ee$>@ZqqWeeZy*ee#dZejeejWqme%k rZ&ej jde e e e&fd Z"qmXqmWeje"dS(iNs /proc/irq/cCs|jjd}g}d}xxtt|dddD]Z}t||d}x>|dkr|d@r|j|n|dL}|d7}qZWq>W|S(Nt,iiii(tstriptsplittrangetlentinttappend(tlinetfieldst bitmasklisttentrytitmask((s$/usr/libexec/tuned/defirqaffinity.pyR s#  cCsg}d}xX|rfd}|d@}|d|7}|rF|d7}nd}|dL}|j|qWd}xt|D]}||7}qzW|S(NitIs%xRii (Rtreversed(R tgroupstcommat cpumaskstrtmtstringR ((s$/usr/libexec/tuned/defirqaffinity.pyt get_cpumasks    cCsdtjdkrdSy2t|d}|j}WdQXt|SWntk r_dgSXdS(Nitr(tostgetuidtopentreadlineR tIOError(tfnametfR((s$/usr/libexec/tuned/defirqaffinity.pytparse_def_affinity(s cCsd}td}t|}x|D]}|d|>B}q#W||@rstjjd|||ftjdngtjtD]-}tjj tjj t|r|^q}y|j dWnt k rnXy|j dWnt k rnXx|D]}}d}t|d}t|}x|D]}|d|>B}q4W||@rtjjd|||ftjdqqWtjddS(Nitdefault_smp_affinityis@verify: failed: irqaffinity (%s) inplacemask=%x shouldbemask=%x t2t0s /smp_affinity( tirqpathRtsyststderrtwritetexitRtlistdirtpathtisdirtjointremovet ValueError(t shouldbemaskt inplacemaskRtcpulistR Rt interruptdirs((s$/usr/libexec/tuned/defirqaffinity.pytverify2s6    C      Riiiis%s: invalid arguments RtaddR*R0twbRR s /smp_affinitys*Failed to set smp_affinity for IRQ %s: %s ('RR"R!R RRR0R.R R RtargvtstrR#R$R'tbasenameR%RRRRRRRtfotcloseR&RR(R)R/R*R+tretRtjRte(((s$/usr/libexec/tuned/defirqaffinity.pytsp    % 4'  &    C        &