o
    پiQ                     @   s   	dddZ d S )N0%100%objectc           "      C   s  dd l }dd l}|d u rdd l}|| d}|| }|j|ddd}	|dkr.|	d |	d |d	D ]2}
z"|	d
|
d dt	|
d  f  |	d|
d |
d d f  W q8 t
yj   |	d Y q8w |dD ]8}
z(|	d|
d |
d dt	|
d  f  |	d|
d |
d |
d d f  W qp t
y   |	d Y qpw zB|dD ]:}
z*|	d|
d |
d dt	|
d  f  |	d|
d |
d |
d d d f  W q t
y   |	d Y qw W n   Y d}d}d}|d d d }|d d d }|d krtdtd td|d  d td|d  d td|| d   d! |d }|d }|rld"|v r\|| t|d"dd#  | d }nt|}d$| }d%| }d&| }|rd"|v r|| t|d"dd#  | d }nt|}|d kr|d'|  nd(| }|d kr|d)|  nd*| }|d kr|d+|  nd,| }td-|  td.|| d  d! |d/| D ]=}
z+t|
d dkr|
d n|
d }|	d0|
d |
d1 ||
d2 |
d3 |
d f  W q t
y   |	d Y qw z;|d4| D ]1}
z|	d5|
d |
d d6|
d  |
d1 |
d2 |
d3 f  W q t
yH   |	d Y qw W n   Y |d7| D ]}
zs|
d d8kr|
d9 dkr|	d:|
d |
d1 |
d d;d|
d2 |
d d;df  nC|	d0|
d |
d1 |
d d;d|
d2 |
d3 |
d d;df  n!|	d0|
d |
d1 |
d |
d2 |
d3 |
d d;dd<df  W qV t
y   |	d Y qVw |d=| D ]J}
z8|
d3 |
d9 k r|
d3 n|
d9 }|	d>|
d |
d ||
d f  |	d?|
d1 |
d2 |
d9 |
d f  W q t
y-   |	d Y qw z>|d@| D ]4}
z"|	d0|
d |
d1 d |
d |
d2 |
d3 |
d d;df  W q6 t
yj   |	d Y q6w W n   Y d}|dAD ]	}
t|
d }qx|r|}g }|dBD ]
}
||
d  q|D ]}d}d}|dC||||f D ]_}
zM|rt|
d dkrd}|	dD||
d |f  |dkrt|
d dk rd}|	dD||
d |f  |t|
d  }|	dE||
d |f  W q t
y   |	d Y qw |dkr%|	dD|||f  |	dE|||f  qzD|dF| D ]}
|	dG|
d |
d |
d |
d |
d1 f  q/|dH| D ]}
|	dG|
d |
d |
d |
d |
d1 f  qPW n   tdI Y 	 i }i }G dJdK dK}|dL|||f D ]X}
zE|
d |
d1 f}|
d dMkr||vrg ||< || |
d |
d2 f}n|
d dNkr||  }n|
d dOkr||v rt|| dkr|| dP }d } ||vr| } |d | _|d | _|
dQ | _|
dR | _| j|
d3 |
d9 f d| _n|| } | j|d krs| j|d krst|
dQ | j dSk s:t| j|
dR  dSk rs|
dQ | jk rG|
dQ | _|
dR | jkrT|
dR | _|
d3 |
d9 f| jvrl| j|
d3 |
d9 f | jd | _nZ|| } | jD ]'}!|	d0|!d |!d | jd;d| jd | j| j d dT| j dUf  qz|| | } |d | _|d | _|
dQ | _|
dR | _| j|
d3 |
d9 f d| _| ||< W q t
y   |	d Y qw |	dV |dkr|	dW |	  |  d S )XN    z.trace.json.gzwtzutf-8)encodingr   z{"traceEvents": z[ {}
z#select distinct gpuId from rocpd_opzF,{"name": "process_name", "ph": "M", "pid":"%s","args":{"name":"%s"}}
GPUzR,{"name": "process_sort_index", "ph": "M", "pid":"%s","args":{"sort_index":"%s"}}
i@B  z'select distinct pid, tid from rocpd_apizL,{"name":"thread_name","ph":"M","pid":"%s","tid":"%s","args":{"name":"%s"}}
   zHip zX,{"name":"thread_sort_index","ph":"M","pid":"%s","tid":"%s","args":{"sort_index":"%s"}}
   z*select distinct pid, tid from rocpd_hsaApizHSA z!select MIN(start) from rocpd_api;zselect MAX(end) from rocpd_api;zTrace file is empty.zTimestamps:z	    first: 	i  z usz	     last: 	z	 duration: 	i ʚ;z seconds%d   z where rocpd_api.start/1000 >= %szwhere rocpd_op.start/1000 >= %szwhere start/1000 >= %sz and rocpd_api.start/1000 <= %sz where rocpd_api.start/1000 <= %sz and rocpd_op.start/1000 <= %szwhere rocpd_op.start/1000 <= %sz and start/1000 <= %szwhere start/1000 <= %sz
Filter: %szOutput duration: a  select A.string as optype, B.string as description, gpuId, queueId, rocpd_op.start/1000.0, (rocpd_op.end-rocpd_op.start) / 1000.0 from rocpd_op INNER JOIN rocpd_string A on A.id = rocpd_op.opType_id INNER Join rocpd_string B on B.id = rocpd_op.description_id %szX,{"pid":"%s","tid":"%s","name":"%s","ts":"%s","dur":"%s","ph":"X","args":{"desc":"%s"}}
         zselect graphExec, gpuId, queueId, min(start)/1000.0, (max(end)-min(start))/1000.0, count(*) from rocpd_graphLaunchapi A join rocpd_api_ops B on B.api_id = A.api_ptr_id join rocpd_op C on C.id = B.op_id %s group by api_ptr_idz[,{"pid":"%s","tid":"%s","name":"%s","ts":"%s","dur":"%s","ph":"X","args":{"kernels":"%s"}}
zGraph aC  select A.string as apiName, B.string as args, pid, tid, rocpd_api.start/1000.0, (rocpd_api.end-rocpd_api.start) / 1000.0, (rocpd_api.end != rocpd_api.start) as has_duration from rocpd_api INNER JOIN rocpd_string A on A.id = rocpd_api.apiName_id INNER Join rocpd_string B on B.id = rocpd_api.args_id %s order by rocpd_api.id
UserMarker   zU,{"pid":"%s","tid":"%s","name":"%s","ts":"%s","ph":"i","s":"p","args":{"desc":"%s"}}
"	zselect rocpd_api_ops.id, pid, tid, gpuId, queueId, rocpd_api.end/1000.0 - 2, rocpd_op.start/1000.0 from rocpd_api_ops INNER JOIN rocpd_api on rocpd_api_ops.api_id = rocpd_api.id INNER JOIN rocpd_op on rocpd_api_ops.op_id = rocpd_op.id %szU,{"pid":"%s","tid":"%s","cat":"api_op","name":"api_op","ts":"%s","id":"%s","ph":"s"}
z_,{"pid":"%s","tid":"%s","cat":"api_op","name":"api_op","ts":"%s","id":"%s","ph":"f", "bp":"e"}
a$  select A.string as apiName, B.string as args, pid, tid, rocpd_hsaApi.start/1000.0, (rocpd_hsaApi.end-rocpd_hsaApi.start) / 1000.0 from rocpd_hsaApi INNER JOIN rocpd_string A on A.id = rocpd_hsaApi.apiName_id INNER Join rocpd_string B on B.id = rocpd_hsaApi.args_id %s order by rocpd_hsaApi.idzXSELECT max(end)/1000 from (SELECT end from rocpd_api UNION ALL SELECT end from rocpd_op)z#SELECT DISTINCT gpuId FROM rocpd_opa  select * from (select rocpd_api.start/1000.0 as ts, "1" from rocpd_api_ops INNER JOIN rocpd_api on rocpd_api_ops.api_id = rocpd_api.id INNER JOIN rocpd_op on rocpd_api_ops.op_id = rocpd_op.id AND rocpd_op.gpuId = %s %s UNION ALL select rocpd_op.end/1000.0, "-1" from rocpd_api_ops INNER JOIN rocpd_api on rocpd_api_ops.api_id = rocpd_api.id INNER JOIN rocpd_op on rocpd_api_ops.op_id = rocpd_op.id AND rocpd_op.gpuId = %s %s) order by tsz@,{"pid":"%s","name":"Idle","ph":"C","ts":%s,"args":{"idle":%s}}
zG,{"pid":"%s","name":"QueueDepth","ph":"C","ts":%s,"args":{"depth":%s}}
zGselect deviceId, monitorType, start/1000.0, value from rocpd_monitor %sz<,{"pid":"%s","name":"%s","ph":"C","ts":%s,"args":{"%s":%s}}
zrselect distinct deviceId, monitorType, max(end)/1000.0, value from rocpd_monitor %s group by deviceId, monitorTypezDid not find SMI datac                   @   s   e Zd Zdd ZdS )z%rpd_to_chrome_trace.<locals>.GpuFramec                 S   s(   d| _ d| _d| _d| _g | _d| _d S )Nr   r   )idnamestartendgpustotalOps)self r   N/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/rpd_utils.py__init__a  s   
z.rpd_to_chrome_trace.<locals>.GpuFrame.__init__N)__name__
__module____qualname__r   r   r   r   r   GpuFrame`  s    r!   aT  SELECT '0', start/1000.0, pid, tid, B.string as label, '','','', '' from rocpd_api INNER JOIN rocpd_string A on A.id = rocpd_api.apiName_id AND A.string = 'UserMarker' INNER JOIN rocpd_string B on B.id = rocpd_api.args_id AND rocpd_api.start/1000.0 != rocpd_api.end/1000.0 %s UNION ALL SELECT '1', end/1000.0, pid, tid, B.string as label, '','','', '' from rocpd_api INNER JOIN rocpd_string A on A.id = rocpd_api.apiName_id AND A.string = 'UserMarker' INNER JOIN rocpd_string B on B.id = rocpd_api.args_id AND rocpd_api.start/1000.0 != rocpd_api.end/1000.0 %s UNION ALL SELECT '2', rocpd_api.start/1000.0, pid, tid, '' as label, gpuId, queueId, rocpd_op.start/1000.0, rocpd_op.end/1000.0 from rocpd_api_ops INNER JOIN rocpd_api ON rocpd_api_ops.api_id = rocpd_api.id INNER JOIN rocpd_op ON rocpd_api_ops.op_id = rocpd_op.id %s ORDER BY start/1000.0 asc012         zUserMarker frame: z opsz]
z} 
)gzipsqlite3pathlibPurePathwith_suffixconnectopenwriteexecutestr
ValueErrorfetchall	Exceptionprintintreplacelenappendpopr   r   r   r   r   r   absclose)"	input_rpdoutput_jsonr   r   formatr)   r*   r+   
connectionoutfilerowrangeStringApirangeStringOprangeStringMonitormin_timemax_time
start_timeend_timer   fromtimeT_endgpuIdsPresentgpuIddepthidlestackscurrentFramer!   keystack	completedframegpuFramedestr   r   r   rpd_to_chrome_trace   s  








""
,
"


	


  



















rY   )Nr   r   r   )rY   r   r   r   r   <module>   s   