
    0Fie"                        d dl mZ d dlZd dlmZ d dlmZ d dlZd dlZ	d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ  G d
 d          ZdS )    )annotationsN)deque)Any)	NoDefault
no_default)parse_timedelta)WINDOWS)nvml)	monotonictimec                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   edddfd*dZd+dZd,d Zd-d"Zd.d$Z	d/d'Z
d0d)ZdS )1SystemMonitorzpsutil.Processprocz
int | Nonemaxlenintcountfloat	last_timezdict[str, deque[float]]
quantitiesboolmonitor_net_iomonitor_disk_iomonitor_host_cpumonitor_gil_contentionr   _last_net_io_counters_last_disk_io_counters_last_host_cpu_counters_last_gil_contention_cumulative_gil_contentionz
str | Nonegpu_namegpu_memory_totalNint | None | NoDefaultbool | Nonec                |   t          j                    | _        d| _        |t          u rt
          j                            d          }t          |t                    rt          d|          }n|t          d|          || _        t                      | _        t          |          t          |          t          |          d| _        	 t          j                    | _        d| _        t          |          | j        d<   t          |          | j        d	<   n# t(          $ r
 d
| _        Y nw xY w|t
          j                            d          }|rc	 t          j                    }|d
}nJ|| _        t          |          | j        d<   t          |          | j        d<   n# t(          $ r d
}Y nw xY w|| _        |t
          j                            d          }|| _        |r?t          j                    x| _        }|j        D ]}t          |          | j        d|z   <   |t
          j                            d          }|| _        | j        r	 ddlm} t          |          | j        d<   d| _        t
          j                            d          }	tA          |	d          dz  }
 |t          |
                    | _!        | j!        "                                 n# tF          $ r
 d
| _        Y nw xY wtH          st          |          | j        d<   tK          j&                    dk    r^tK          j'                    }|d         | _(        |d         | _)        t          |          | j        d<   t          |          | j        d<   nd | _(        d| _)        | *                                 d S )Nr   z+distributed.admin.system-monitor.log-length   z maxlen must be int or None; got )r   cpumemoryr   Thost_net_io.read_bpshost_net_io.write_bpsFz%distributed.admin.system-monitor.diskhost_disk_io.read_bpshost_disk_io.write_bpsz)distributed.admin.system-monitor.host-cpu	host_cpu.z,distributed.admin.system-monitor.gil.enabled)
KnockKnockgil_contentiong        z-distributed.admin.system-monitor.gil.intervalus)default    .A)polling_interval_microsnum_fdsnamezmemory-totalgpu_utilizationgpu_memory_used)+psutilProcessr   r   r   daskconfigget
isinstancer   max	TypeErrorr   r   r   r   r   net_io_countersr   r   	Exceptiondisk_io_countersr   r   r   	cpu_timesr   _fieldsr   
gilknockerr.   r   r   _gilknockerstartImportErrorr	   r
   device_get_countone_timer    r!   update)selfr   r   r   r   disk_ioc	hostcpu_ckr.   raw_intervalinterval	gpu_extras               :lib/python3.11/site-packages/distributed/system_monitor.py__init__zSystemMonitor.__init__'   s    N$$	
Z[__%RSSFfc"" 	KF^^FFIvIIJJJ" '''6***(((
 
	L)/)?)A)AD&
 #'D6;66J6J6JDO237<F7K7K7KDO344  	( 	( 	("'D	( ""koo.UVVO 	UU!244 #&+OO2:D/?DF?S?S?SDO$;<@EV@T@T@TDO$<==  ( ( ( #((  /##{;    !1 	H7=7G7I7IID(9& H H383G3G3Ga00!)%)[__>& &" '=#& 	))111111 5:4H4H4H 0125/#{C    +<FFFL#-:c(mm#T#T#T  &&((((  4 4 4.3+++4  	>).f)=)=)=DOI& ""Q&&I%f-DM$-n$=D!16f1E1E1EDO-.16f1E1E1EDO-.. DM$&D!s6   D" "D65D6F- -F<;F<K/ /LLreturndict[str, float]c                H    d | j                                         D             S )Nc                &    i | ]\  }}||d          S )r8    ).0rP   vs      rT   
<dictcomp>z(SystemMonitor.recent.<locals>.<dictcomp>   s"    ===TQ1R5===    )r   itemsrM   s    rT   recentzSystemMonitor.recent   s$    ==T_%:%:%<%<====r^   c                >    | j                                         j        S )zSample process memory, as reported by the OS.
        This one-liner function exists so that it can be easily mocked in unit tests,
        as the OS allocating and releasing memory is highly volatile and a constant
        source of flakiness.
        )r   memory_inforssr`   s    rT   get_process_memoryz SystemMonitor.get_process_memory   s     y$$&&**r^   dict[str, Any]c                D   t                      }t                      }|| j        z
  pd}|| _        | xj        dz  c_        | j                                        5  | j                                        |                                 |d}d d d            n# 1 swxY w Y   | j        rKt          j
                    }| j        }|j        |j        z
  |z  |d<   |j        |j        z
  |z  |d<   || _        | j        rOt          j                    }|J | j        }|j        |j        z
  |z  |d<   |j        |j        z
  |z  |d<   || _        | j        ret          j                    }	| j        }
|	j        D ]<}t/          |	|          t/          |
|          z
  }t1          ||z  d          |d	|z   <   =|	| _        | j        rI| j        j        | _        | xj        | j        z  c_        | j        |d
<   | j                                         t>          j         dk    r| j        !                                |d<   | j"        r)tG          j$                    }|d         |d<   |d         |d<   |%                                D ]+\  }}|dk    r | j&        |         '                    |           ,|S )NgMbP?r%   r&   r)   r*   r+   r,      r-   r/   win32r4   utilizationr6   zmemory-usedr7   r   )(r   r   r   r   r   oneshotcpu_percentre   r   r9   rA   r   
bytes_recv
bytes_sentr   rC   r   
read_byteswrite_bytesr   rD   r   rE   getattrroundr   rG   contention_metricr   r   reset_contention_metricsysplatformr4   r    r
   	real_timer_   r   append)rM   nownow_monodurationresultnet_ioclastrN   	last_diskhost_cpulast_cpurP   deltagpu_metricsr5   r\   s                   rT   rL   zSystemMonitor.update   s#   ff;;t~-7%!

a

Y   	 	y,,..1133 F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  		1,..G-D"T_4.F)* "T_4/F*+ *1D& 
	3.00H'''3I#i&::/F*+ $y'<<0F+, +3D'  	4'))H3H% E E!,,wx/C/CC*/0@!*D*D{Q''+3D(& 	7(,(8(JD%++t/HH++'+'@F#$44666 <7"" $	 1 1 3 3F9= 	C.**K(3M(BF$%(3M(BF$%||~~ 	0 	0GD!w%,,Q///s   0BBBstrc                    d| j         d         d         | j         d         d         dz  t          rdn| j         d         d         fz  S )Nz.<SystemMonitor: cpu: %d memory: %d MB fds: %s>r'   r8   r(   r2   zN/Ar4   )r   r	   r`   s    rT   __repr__zSystemMonitor.__repr__   sP    ?OE"2&OH%b)C/@EE$/)"<R"@C
 
 	
r^   rH   dict[str, list[float | None]]c           	        || j         k    rd | j        D             S t          dt          t	          | j        d                    || j         z
                      fd| j                                        D             S )Nc                    i | ]}|g S rZ   rZ   )r[   rP   s     rT   r]   z-SystemMonitor.range_query.<locals>.<dictcomp>   s    333aAr333r^   r8   r'   c                R    i | ]"\  }|fd t          d          D             #S )c                L    g | ] }| t                    k    r|         nd !S N)len)r[   ir\   s     rT   
<listcomp>z8SystemMonitor.range_query.<locals>.<dictcomp>.<listcomp>   s1    III1c!ff!$IIIr^   r   )range)r[   rP   r\   istarts     @rT   r]   z-SystemMonitor.range_query.<locals>.<dictcomp>   sO     
 
 
1 IIIIfa8H8HIII
 
 
r^   )r   r   minr?   r   r_   )rM   rH   r   s     @rT   range_queryzSystemMonitor.range_query   s    DJ334?3333Rc$/%"899954:;MNNOO
 
 
 
--//
 
 
 	
r^   Nonec                J    | j         r| j                                         d S d S r   )r   rG   stopr`   s    rT   closezSystemMonitor.close   s2    & 	$!!#####	$ 	$r^   )r   r"   r   r#   r   r#   r   r#   )rV   rW   )rV   r   )rV   rf   )rV   r   )rH   r   rV   r   )rV   r   )__name__
__module____qualname____annotations__r   rU   ra   re   rL   r   r   r   rZ   r^   rT   r   r      s}        JJJ''''        %%%% *4'+(,.2d d d d dL> > > >+ + + +B B B BH
 
 
 
	
 	
 	
 	
$ $ $ $ $ $r^   r   )
__future__r   ru   collectionsr   typingr   r9   dask.configr;   dask.typingr   r   
dask.utilsr   distributed.compatibilityr	   distributed.diagnosticsr
   distributed.metricsr   r   r   rZ   r^   rT   <module>r      s    " " " " " " 



                  - - - - - - - - & & & & & & - - - - - - ( ( ( ( ( ( / / / / / / / /^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$r^   