3954cedd25
* adding summary.py to generate tmp <category_region>_summary views * migrating CSV summary to SDK method of writing CSVs - Add domain_view to summary.py - omit the C++ code of writing CSV because it gets revered later anyway * Add summary subparser and write_sql_view_to_csv function * adding all <>_summary views generation to summary.py * add summary_per_rank feature * add --summary-per-rank * reconstruct generate_summary_view and create_domain_view -introduce by_rank * remove sqr and variance in summary views * use RocpdImportData instead of connection * two fixes on summary.py --modify the generate_summary_view function to return a tuple with view name and sql code add if_not_exits parameter to generete_summary_view * Refactor summary.py to allow output path and filename args, and apply time_window - clean up summary table column headers - only generate by-rank views if that param is specified * Add ProcessID to Hostname output and csv, so users can identify the system in the by-rank summaries * Summary.py, just add hostname to by-rank summaries, instead of creating mapping table * Summary - migrate csv writer to pandas, for more future flexibility * Adding a few simple tests for summary.py * Linting fixes * add region_categories to summary options - Automatically retrieve region categories from the database if argument is None * add backticks for view_names * fix tests after rebase * Made code review changes - fixed whitespace in CMakelists.txt - adding query.py module & subparser in __main__.py - refactor summary function to return query - used query.py to output csv - used query.py to also output summary to console - provided new command line options to select summary output to csv or console * Made fix to jinja template in query.py, as suggested by copilot * Consolidated output calls to query in export_view function based on feedback - refactored: helpers, query functions, create view functions - extended formats to include what query supports (md, html, pdf, json) - added json format to query, and changed orient=records - adding jinja2 and reportlab to requirements.txt * Add version_info for rocpd and roctx * Add rocpd commandline tool * Add executable permissions to source/bin/rocpd.py * Removed rocpd2query, and cleaned up --help examples --------- Co-authored-by: acanadas <acanadas@amd.com> Co-authored-by: Jin Tao <jintao12@amd.com> Co-authored-by: a-canadasruiz <Araceli.CanadasRuiz@amd.com> Co-authored-by: Jonathan R. Madsen <Jonathan.Madsen@amd.com>
154 lines
3.7 KiB
SQL
154 lines
3.7 KiB
SQL
--
|
|
-- Useful summary views
|
|
--
|
|
--
|
|
-- Sorted list of kernels which consume the most overall time
|
|
CREATE VIEW IF NOT EXISTS
|
|
`top_kernels` AS
|
|
SELECT
|
|
S.display_name AS name,
|
|
COUNT(K.kernel_id) AS total_calls,
|
|
SUM(K.end - K.start) / 1000.0 AS total_duration,
|
|
(SUM(K.end - K.start) / COUNT(K.kernel_id)) / 1000.0 AS average,
|
|
SUM(K.end - K.start) * 100.0 / (
|
|
SELECT
|
|
SUM(A.end - A.start)
|
|
FROM
|
|
`rocpd_kernel_dispatch` A
|
|
) AS percentage
|
|
FROM
|
|
`rocpd_kernel_dispatch` K
|
|
INNER JOIN `rocpd_info_kernel_symbol` S ON S.id = K.kernel_id
|
|
AND S.guid = K.guid
|
|
GROUP BY
|
|
name
|
|
ORDER BY
|
|
total_duration DESC;
|
|
|
|
--
|
|
-- GPU utilization metrics including kernels and memory copy operations
|
|
CREATE VIEW IF NOT EXISTS
|
|
`busy` AS
|
|
SELECT
|
|
A.agent_id,
|
|
AG.type,
|
|
GpuTime,
|
|
WallTime,
|
|
GpuTime * 1.0 / WallTime AS Busy
|
|
FROM
|
|
(
|
|
SELECT
|
|
agent_id,
|
|
guid,
|
|
SUM(END - start) AS GpuTime
|
|
FROM
|
|
(
|
|
SELECT
|
|
agent_id,
|
|
guid,
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_kernel_dispatch`
|
|
UNION ALL
|
|
SELECT
|
|
dst_agent_id AS agent_id,
|
|
guid,
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_memory_copy`
|
|
)
|
|
GROUP BY
|
|
agent_id,
|
|
guid
|
|
) A
|
|
INNER JOIN (
|
|
SELECT
|
|
MAX(END) - MIN(start) AS WallTime
|
|
FROM
|
|
(
|
|
SELECT
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_kernel_dispatch`
|
|
UNION ALL
|
|
SELECT
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_memory_copy`
|
|
)
|
|
) W ON 1 = 1
|
|
INNER JOIN `rocpd_info_agent` AG ON AG.id = A.agent_id
|
|
AND AG.guid = A.guid;
|
|
|
|
--
|
|
-- Overall performance summary including kernels and memory copy operations
|
|
CREATE VIEW
|
|
`top` AS
|
|
SELECT
|
|
name,
|
|
COUNT(*) AS total_calls,
|
|
SUM(duration) / 1000.0 AS total_duration,
|
|
(SUM(duration) / COUNT(*)) / 1000.0 AS average,
|
|
SUM(duration) * 100.0 / total_time AS percentage
|
|
FROM
|
|
(
|
|
-- Kernel operations
|
|
SELECT
|
|
ks.display_name AS name,
|
|
(kd.end - kd.start) AS duration
|
|
FROM
|
|
`rocpd_kernel_dispatch` kd
|
|
INNER JOIN `rocpd_info_kernel_symbol` ks ON kd.kernel_id = ks.id
|
|
AND kd.guid = ks.guid
|
|
UNION ALL
|
|
-- Memory operations
|
|
SELECT
|
|
rs.string AS name,
|
|
(END - start) AS duration
|
|
FROM
|
|
`rocpd_memory_copy` mc
|
|
INNER JOIN `rocpd_string` rs ON rs.id = mc.name_id
|
|
AND rs.guid = mc.guid
|
|
UNION ALL
|
|
-- Regions
|
|
SELECT
|
|
rs.string AS name,
|
|
(END - start) AS duration
|
|
FROM
|
|
`rocpd_region` rr
|
|
INNER JOIN `rocpd_string` rs ON rs.id = rr.name_id
|
|
AND rs.guid = rr.guid
|
|
) operations
|
|
CROSS JOIN (
|
|
SELECT
|
|
SUM(END - start) AS total_time
|
|
FROM
|
|
(
|
|
SELECT
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_kernel_dispatch`
|
|
UNION ALL
|
|
SELECT
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_memory_copy`
|
|
UNION ALL
|
|
SELECT
|
|
END,
|
|
start
|
|
FROM
|
|
`rocpd_region`
|
|
)
|
|
) TOTAL
|
|
GROUP BY
|
|
name
|
|
ORDER BY
|
|
total_duration DESC;
|