o
    Ti                     @   s   d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	m
Z
mZ dd Zdd	 Zd
d Zdd Zdd Zdd ZedkrCe  dS dS )zM
Functionality of swapping optimizer tensors to/from (NVMe) storage devices.
    N   )
READ_SPEEDWRITE_SPEEDget_sorted_results)BENCH_LOG_DIRREAD_LOG_DIRWRITE_LOG_DIRc               	   C   sZ   t  } | jdttdtjdt d | jdddd |  }|j	r+t
d	|  |S )
Nz	--log_dirz-Folder of performance sweep logs. Default is .)typedefaulthelpz	--verbose
store_truezPrint debugging information.)actionr   zargs = )argparseArgumentParseradd_argumentstrr   ospathjoin
parse_argsverboseprint)parserargs r   V/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/nvme/perf_generate_param.pyparse_arguments   s   r   c                 C   sB   t tfD ]}tj| j|}tj|st| d  dS qdS )Nz folder is not existentFT)r   r   r   r   r   log_dirisdirr   )r   dr   r   r   r   validate_args   s   r!   c                 C   sX   t | dksJ | d dkrdnd| d dkrdndt| d t| d	 t| d
 dS )N   r   singletruefalser   overlap         )single_submitoverlap_eventsnum_threadsqueue_depth
block_size)lenint)keyr   r   r   convert_to_param)   s   


r2   c                 C   s  t | t\}}t |t\}}dd | D }| D ]\}}|dd  }||v r2||  |7  < qd||< qd }	d}
| D ]\}}||
krK|}
|}	q?dt|	i}dd | D }dd | D }|||	 d }|||	 d }td	|d
d|d
 ttj	|dd d S )Nc                 S   s   i | ]\}}|d d |qS r   Nr   ).0r1   valuer   r   r   
<dictcomp>7   s    z&generate_aio_param.<locals>.<dictcomp>r   r   g        aioc                 S      i | ]	}|d d |qS r3   r   r4   r1   r   r   r   r6   I       c                 S   r8   r3   r   r9   r   r   r   r6   J   r:   z"Best performance (GB/sec): read = z5.2fz
, write = r(   )indent)
r   r   r   itemsr2   keysgetr   jsondumps)read_log_dirwrite_log_dir_read_resultswrite_resultscombined_perfr1   r5   new_keyoptimal_keyoptimal_perf	aio_paramread_perf_keyswrite_perf_keysoptimal_config_readoptimal_config_writer   r   r   generate_aio_param4   s,   
rO   c                 C   s*   t j| t}t j| t}t|| d S )N)r   r   r   r   r   rO   )r   rA   rB   r   r   r   generate_mainR   s   rP   c                  C   s4   t  } t| s
t  td| j d t| j d S )Nz%Generate DeepNVMe configuration from z logs)r   r!   quitr   r   rP   )r   r   r   r   mainX   s
   rR   __main__)__doc__r   r   r?   parse_nvme_statsr   r   r   perf_sweep_utilsr   r   r   r   r!   r2   rO   rP   rR   __name__r   r   r   r   <module>   s   

