<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
<e                 @   sd   d dl mZ d dlmZ ddlmZ ddlZddlZddlZddl	Z	ej
j ZG dd dejZdS )   )base)command_custom    )constsNc                   s   e Zd ZdZ fddZdd Zdd Zedd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zeddddd Z  ZS )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
	----
	====
	c                s    t t| j|| tj | _d S )N)superr   __init__perfZcpu_map_cpus)selfargskwargs)	__class__ '/usr/lib/python3.6/plugin_irqbalance.pyr       s    zIrqbalancePlugin.__init__c             C   s   d|_ d|_d S )NFT)Z_has_dynamic_tuningZ_has_static_tuning)r   instancer   r   r   _instance_init$   s    zIrqbalancePlugin._instance_initc             C   s   d S )Nr   )r   r   r   r   r   _instance_cleanup(   s    z"IrqbalancePlugin._instance_cleanupc             C   s   dd iS )Nbanned_cpusr   )clsr   r   r   _get_config_options+   s    z$IrqbalancePlugin._get_config_optionsc             C   sl   y t tjd
}|j S Q R X W nF tk
rf } z*|jtjkrJtjd ntj	d|  d S d }~X nX d S )Nrz>irqbalance sysconfig file is missing. Is irqbalance installed?z,Failed to read irqbalance sysconfig file: %s)
openr   IRQBALANCE_SYSCONFIG_FILEreadIOErrorerrnoENOENTlogwarnerror)r   fer   r   r   _read_irqbalance_sysconfig1   s    z+IrqbalancePlugin._read_irqbalance_sysconfigc             C   sZ   y&t tjd}|j| W d Q R X dS  tk
rT } ztjd|  dS d }~X nX d S )NwTz-Failed to write irqbalance sysconfig file: %sF)r   r   r   writer   r   r    )r   contentr!   r"   r   r   r   _write_irqbalance_sysconfig<   s    z,IrqbalancePlugin._write_irqbalance_sysconfigc             C   s   |d|  S )NzIRQBALANCE_BANNED_CPUS=%s
r   )r   	sysconfigbanned_cpumaskr   r   r   _write_banned_cpusE   s    z#IrqbalancePlugin._write_banned_cpusc             C   s8   g }x(|j dD ]}tjd|s|j| qW dj|S )N
z\s*IRQBALANCE_BANNED_CPUS=)splitrematchappendjoin)r   r(   linesliner   r   r   _clear_banned_cpusH   s
    z#IrqbalancePlugin._clear_banned_cpusc             C   s2   | j jdddgdgd\}}|dkr.tjd d S )NZ	systemctlztry-restartZ
irqbalance   )Z	no_errorsr   z.Failed to restart irqbalance. Is it installed?)_cmdZexecuter   r   )r   Zretcodeoutr   r   r   _restart_irqbalanceO   s
    z$IrqbalancePlugin._restart_irqbalancec             C   s@   | j  }|d krd S | j|}| j||}| j|r<| j  d S )N)r#   r3   r*   r'   r7   )r   r)   r&   r   r   r   _set_banned_cpusX   s    

z!IrqbalancePlugin._set_banned_cpusc             C   s4   | j  }|d krd S | j|}| j|r0| j  d S )N)r#   r3   r'   r7   )r   r&   r   r   r   _restore_banned_cpusa   s    

z%IrqbalancePlugin._restore_banned_cpusr   F)Z
per_devicec       	      C   s   d }|d k	rjt | jj|}t | j}|j|rB| jjt|}n(djdd | jD }tj	d||f  |sr|r~|d kr~d S |rd S |r| j
| n| j  d S )N,c             S   s   g | ]}t |qS r   )str).0xr   r   r   
<listcomp>r   s    z1IrqbalancePlugin._banned_cpus.<locals>.<listcomp>zGInvalid banned_cpus specified, '%s' does not match available cores '%s')setr5   Zcpulist_unpackr
   issubsetZcpulist2hexlistr0   r   r    r8   r9   )	r   ZenablingvalueZverifyZignore_missingr)   ZbannedZpresentZstr_cpusr   r   r   _banned_cpusi   s     

zIrqbalancePlugin._banned_cpus)__name__
__module____qualname____doc__r   r   r   classmethodr   r#   r'   r*   r3   r7   r8   r9   r   rC   __classcell__r   r   )r   r   r      s   			r   ) r   Z
decoratorsr   Ztunedr   Z
tuned.logsr   r	   r-   Zlogsgetr   ZPluginr   r   r   r   r   <module>   s   
