
    bi                        d dl Z d dlmZ d dlZd dlZ	  ej
                           ej                         Z ee      D  cg c]  }  ej                  |        c} Z
	  ej                  e
d    d       Z eej                        D  cg c]  }  eed|        r eed|  d       c} Ze
D cg c]  } ej"                  |e       c}Z ed eD              dz  Z	  ej.                  e
d          Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Zyc c} w c c} w c c}w # eej,                  f$ r dZg ZY tw xY w# eej,                  f$ r dZY ww xY w# ej2                  $ r d Zg Z
Y w xY w)    N)CustomWebSocketHandlerNVML_FI_DEV_NVLINK_SPEED_MBPS_L c              #   F   K   | ]  }t        d  |D              dz    yw)c              3   H   K   | ]  }|j                   j                    y w)N)valueullVal).0is     Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyterlab_nvdashboard/apps/gpu.py	<genexpr>z<genexpr>.<genexpr>   s     /qAGGNN/s    "   N)sum)r
   bws     r   r   r      s      Nb/B//'9Ns   !   c                       e Zd Zd Zy)GPUUtilizationWebSocketHandlerc                     t        t              D cg c](  }t        j                  t        |         j
                  * }}| j                  t        j                  d|i             y c c}w )Ngpu_utilization)	rangengpuspynvmlnvmlDeviceGetUtilizationRatesgpu_handlesgpuwrite_messagejsondumps)selfr   r   s      r   	send_dataz(GPUUtilizationWebSocketHandler.send_data*   s^     5\
 00Q@DD
 
 	4::'8/&JKL	
s   -A(N__name__
__module____qualname__r         r   r   r   )   s    Mr&   r   c                       e Zd Zd Zy)GPUUsageWebSocketHandlerc                 &   t         D cg c]!  }t        j                  |      j                  # }}t         D cg c]!  }t        j                  |      j                  # }}| j                  t        j                  ||d             y c c}w c c}w )N)memory_usagetotal_memory)r   r   nvmlDeviceGetMemoryInfousedtotalr   r   r   )r   handler*   r+   s       r   r    z"GPUUsageWebSocketHandler.send_data3   s     &
 **6277
 
 &
 **6288
 

 	JJ!-|L	



s
   &B	&BNr!   r%   r&   r   r(   r(   2   s    
r&   r(   c                       e Zd Zd Zy)GPUResourceWebSocketHandlerc                    t        j                          }|dz  ddddg g d}t        D cg c]$  }t        j                  |      j                  dz  & }}t        |      }t        t              D ]  }t        j                  t        |         j                  }t        j                  t        |         j                  }|dxx   |z  cc<   |dxx   |dz  z  cc<   t        vt        j                  t        |   t        j                        dz  }	t        j                  t        |   t        j                        dz  }
|dxx   |
z  cc<   |d	xx   |	z  cc<   |d
   j                  |       |d   j                  |        |dxx   t        z  cc<   t!        |d   |z  dz  d      |d<   | j#                  t%        j&                  |             y c c}w )Ni  r   )timegpu_utilization_totalgpu_memory_totalrx_totaltx_totalgpu_memory_individualgpu_utilization_individualr   r4   r5      r6   r7   r9   r8   d   r   )r3   r   r   r,   r.   r   r   r   r   r   r-   pci_gennvmlDeviceGetPcieThroughputNVML_PCIE_UTIL_TX_BYTESNVML_PCIE_UTIL_RX_BYTESappendroundr   r   r   )r   nowstatsr/   memory_listgpu_mem_sumr   r   memtxrxs              r   r    z%GPUResourceWebSocketHandler.send_dataF   s   iik$J%& !%'*,
 &
 **6288KH
 
 +&u 	7A66{1~FJJC00Q@EEC)*c1*$%)<<%"66#A(F(F   66#A(F(F   j!R'!j!R'!./66s;)*11#6-	70 	%&%/&$)%&4;Q%
 ! 	4::e,-E
s   )GNr!   r%   r&   r   r1   r1   E   s    -.r&   r1   c                       e Zd ZdZd Zy) NVLinkThroughputWebSocketHandlerNc                 t   t         D cg c]  }t        j                  |t        t        j                        D cg c]  }t        j
                  |f c}t        t        j                        D cg c]  }t        j                  |f c}z          }}}| j                  t        t        |            D cg c]h  }t        t        ||               D cg c]E  }||   |   j                  j                  | j                  |   |   j                  j                  z
  G c}j }}}n1t        t        |            D cg c]  }dgt        ||         z   }}|| _        | j                  t        j                  t        t        |            D cg c]$  }t        ||   d t        j                         dz  & c}t        t        |            D cg c]$  }t        ||   t        j                  d        dz  & c}t        d             y c c}w c c}w c c}}w c c}w c c}}w c c}w c c}w c c}w )Nr   r:   )	nvlink_rx	nvlink_txmax_rxtx_bw)r   r   nvmlDeviceGetFieldValuesr   NVML_NVLINK_MAX_LINKS%NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX%NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TXprev_throughputlenr   r	   r   r   r   r   max_bw)r   r/   scope_id
throughputr   jthroughput_changes          r   r    z*NVLinkThroughputWebSocketHandler.send_datay   sO    &
  ++ %*&*F*F$G  AA8L %*&*F*F$G  AA8L	


 
  + s:/!  #3z!}#56  qM!$**11**1-a066==>! ! 38J2H!-.c*Q-((! !
  * 	JJ "'s+<'=!>"  -a0 >&">">
 "  "'s+<'=!>"  -a0 & < < >
 " $*'	
C
&!!""sM   0HHH0H	H:H%A
H "H%H+)H0)H5
H H%)r"   r#   r$   rS   r    r%   r&   r   rJ   rJ   v   s    O=
r&   rJ   c                       e Zd Zd Zy)PCIStatsWebSocketHandlerc                    t        j                  t        d         }ddddddd}||t           z  }t	        t
              D cg c]0  }t        j                  t        |   t         j                        d	z  2 }}t	        t
              D cg c]0  }t        j                  t        |   t         j                        d	z  2 }}|||d
}| j                  t        j                  |             y c c}w c c}w )Nr   g     @Ag     @Ag     Ag     Ag     Ag     A)   r               r:   )pci_txpci_rxmax_rxtx_tp)r   nvmlDeviceGetMaxPcieLinkWidthr   r<   r   r   r=   r>   r?   r   r   r   )r   	pci_widthpci_bwrd   r   rb   rc   rC   s           r   r    z"PCIStatsWebSocketHandler.send_data   s   88QH	 $##$$$	
  &/1 5\

 	 ..A > > 
 
 5\

 	 ..A > > 
 
 &
 	4::e,--

s   5C-5C2Nr!   r%   r&   r   r[   r[      s    &.r&   r[   )r   !jupyterlab_nvdashboard.apps.utilsr   r   r3   nvmlInitnvmlDeviceGetCountr   r   nvmlDeviceGetHandleByIndexr   nvmlDeviceGetNvLinkVersion
nvlink_verrP   hasattrgetattrlinksrO   	bandwidthmaxrU   
IndexErrorNVMLError_NotSupported"nvmlDeviceGetMaxPcieLinkGenerationr<   NVMLError_LibraryNotFoundr   r(   r1   rJ   r[   )r   r/   s   00r   <module>rw      s    D   FOO
 &F%%'EAFuNA4644Q7NK6V66{1~qI
 6778
v!@DE F=aSA2F
 &
 ,F++FE:
	 NINN 	;&;;KNK
M%; M
5 
&.."8 ..b@
'= @
F'.5 '.Y O

 556 

 556 ; '' EKsY   E.  D+*D:  D0'D: .D5D: E 0
D: :EEE+*E+.FF