o
    Ti                     @   s   d Z ddlZddlZdZdZeegZedediZdd Z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krFe  dS dS )zM
Functionality of swapping optimizer tensors to/from (NVMe) storage devices.
    N
read_speedwrite_speedzE2E Read SpeedzE2E Write Speedc                  C   sF   t  } | jdtddd | jdtddd |  }td|  |S )Nz	--log_dirTzFolder of statistics logs)typerequiredhelpz--metricz6Performance metric to report: [read_speed|write_speed]zargs = )argparseArgumentParseradd_argumentstr
parse_argsprint)parserargs r   S/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/nvme/parse_nvme_stats.pyparse_arguments   s   r   c                 C   s   dg}|D ]}|  |r|   S qzP| d dv r!t| dd  W S |  dr_| dr=| dd  d}t|d d W S | d	rV| dd  d	}t|d d d W S t| dd  W S W | S    t| d
|   Y d S )Ndsr   )tdp   bsK   i   Mz: extract_value fails on )
startswithintendswithsplitr   )keyfileINVALID_PREFIXESr   vr   r   r   extract_value$   s*   



r#   c                    s<   t jt j \}}|d} fdd|D }t|S )N_c                    s   g | ]}t | qS r   )r#   ).0kr    r   r   
<listcomp>?   s    z get_file_key.<locals>.<listcomp>)ospathsplitextbasenamer   tuple)r    fr$   fieldsvaluesr   r'   r   get_file_key<   s   
r1   c                 C   sP   t jt j| \}}|d}|D ]}|d dkr%t|dd    S qdS )Nr$   r   r   r   )r)   r*   r+   r,   r   r   )r    r.   r$   r/   r   r   r   r   get_thread_countC   s   
r2   c                 C   s   t | }t| D}| D ]6}|t| rC|ttfv r/| }t|d   W  d    S |d}t|d   W  d    S qW d    d S 1 sOw   Y  d S )N=)	r2   open	readlinesr   METRIC_SEARCH
READ_SPEEDWRITE_SPEEDr   float)r    metricthread_countr.   liner/   r   r   r   
get_metricX   s"   




r?   c                 C   sD   | j tvrt| j  d dS tj| js t| j d dS dS )Nz# is not a valid performance metricsFz folder is not existentT)r<   PERF_METRICSr   r)   r*   isdirlog_dir)r   r   r   r   validate_argsg   s   
rC   c                 C   s,   i }| D ]}t |}t||}|||< q|S )N)r1   r?   )	log_filesr<   resultsr.   file_keyvaluer   r   r   get_resultss   s   

rH   c                    sP    fddt  D } fdd|D }t||}t| }t|}||fS )Nc                    s&   g | ]}t jt j |r|qS r   )r)   r*   isfilejoinr%   r.   rB   r   r   r(   ~   s   & z&get_sorted_results.<locals>.<listcomp>c                    s   g | ]	}t j |qS r   )r)   r*   rJ   rK   rL   r   r   r(      s    )r)   listdirrH   listkeyssorted)rB   r<   rD   log_files_pathrE   result_keyssorted_keysr   rL   r   get_sorted_results}   s   
rT   c                  C   sR   t d t } t| st  t| j| j\}}|D ]}t | d||   qd S )NzParsing aio statisticsz = )r   r   rC   quitrT   rB   r<   )r   rS   rE   r&   r   r   r   main   s   rV   __main__)__doc__r)   r   r9   r:   r@   r8   r   r#   r1   r2   r?   rC   rH   rT   rV   __name__r   r   r   r   <module>   s(   	


