3 Yd @sdddlmZddlmZddlmZddlZddlZddlZddl Z ej j Z Gdddej ZdS))base)command_custom)constsNcseZdZdZfddZddZddZedd Zd d Z d d Z ddZ ddZ ddZ ddZddZedddddZZS)IrqbalancePlugina `irqbalance`:: Plug-in for irqbalance settings management. The plug-in configures CPUs which should be skipped when rebalancing IRQs in `/etc/sysconfig/irqbalance`. It then restarts irqbalance if and only if it was previously running. + The banned/skipped CPUs are specified as a CPU list via the [option]`banned_cpus` option. + .Skip CPUs 2,4 and 9-13 when rebalancing IRQs ==== ---- [irqbalance] banned_cpus=2,4,9-13 ---- ==== cs tt|j||tj|_dS)N)superr__init__perfZcpu_map_cpus)selfargskwargs) __class__'/usr/lib/python3.6/plugin_irqbalance.pyr szIrqbalancePlugin.__init__cCsd|_d|_dS)NFT)Z_has_dynamic_tuningZ_has_static_tuning)r instancerrr_instance_init$szIrqbalancePlugin._instance_initcCsdS)Nr)r rrrr_instance_cleanup(sz"IrqbalancePlugin._instance_cleanupcCsddiS)N banned_cpusr)clsrrr_get_config_options+sz$IrqbalancePlugin._get_config_optionscCsly ttjd }|jSQRXWnFtk rf}z*|jtjkrJtjdntj d|dSd}~XnXdS)Nrz>irqbalance sysconfig file is missing. Is irqbalance installed?z,Failed to read irqbalance sysconfig file: %s) openrIRQBALANCE_SYSCONFIG_FILEreadIOErrorerrnoENOENTlogwarnerror)r ferrr_read_irqbalance_sysconfig1s  z+IrqbalancePlugin._read_irqbalance_sysconfigcCsZy&ttjd}|j|WdQRXdStk rT}ztjd|dSd}~XnXdS)NwTz-Failed to write irqbalance sysconfig file: %sF)rrrwriterrr )r contentr!r"rrr_write_irqbalance_sysconfig<sz,IrqbalancePlugin._write_irqbalance_sysconfigcCs |d|S)NzIRQBALANCE_BANNED_CPUS=%s r)r sysconfigbanned_cpumaskrrr_write_banned_cpusEsz#IrqbalancePlugin._write_banned_cpuscCs8g}x(|jdD]}tjd|s|j|qWdj|S)N z\s*IRQBALANCE_BANNED_CPUS=)splitrematchappendjoin)r r(lineslinerrr_clear_banned_cpusHs  z#IrqbalancePlugin._clear_banned_cpuscCs2|jjdddgdgd\}}|dkr.tjddS)NZ systemctlz try-restartZ irqbalance)Z no_errorsrz.Failed to restart irqbalance. Is it installed?)_cmdZexecuterr)r Zretcodeoutrrr_restart_irqbalanceOs z$IrqbalancePlugin._restart_irqbalancecCs@|j}|dkrdS|j|}|j||}|j|r<|jdS)N)r#r3r*r'r7)r r)r&rrr_set_banned_cpusXs   z!IrqbalancePlugin._set_banned_cpuscCs4|j}|dkrdS|j|}|j|r0|jdS)N)r#r3r'r7)r r&rrr_restore_banned_cpusas   z%IrqbalancePlugin._restore_banned_cpusrF)Z per_devicec Csd}|dk rjt|jj|}t|j}|j|rB|jjt|}n(djdd|jD}tj d||f|sr|r~|dkr~dS|rdS|r|j |n|j dS)N,cSsg|] }t|qSr)str).0xrrr rsz1IrqbalancePlugin._banned_cpus..zGInvalid banned_cpus specified, '%s' does not match available cores '%s') setr5Zcpulist_unpackr issubsetZ cpulist2hexlistr0rr r8r9) r ZenablingvalueZverifyZignore_missingr)ZbannedZpresentZstr_cpusrrr _banned_cpusis     zIrqbalancePlugin._banned_cpus)__name__ __module__ __qualname____doc__rrr classmethodrr#r'r*r3r7r8r9rrC __classcell__rr)rrr s      r)rZ decoratorsrZtunedrZ tuned.logsrr r-ZlogsgetrZPluginrrrrrs