7afedc63be
* [rocprofv3] rocpd SQLite3 database output support
* Move counters xml and yaml to source/share/rocprofiler-sdk
- more representative of install hierarchy
* Add share/rocprofiler-sdk/rocpd SQL files
* Experimental rocprofiler-sdk SQL API
* rocprofv3 default output format is rocpd
* Fix rocpd event ids for counter collection w/o kernel dispatch
* Remove fktable entries from rocpd_tables.sql
* Fix rocpd schema path
* Fix install component for roctx python bindings
* rocprofiler-sdk-rocpd
- create include/rocprofiler-sdk-rocpd
- create rocprofiler-sdk-rocpd library, package, etc.
- default all "guid" fields to "{{guid}}" in tables
- remove "{{view_uuid}}" support (always unused)
* Migrate rocprofv3 to use rocprofiler-sdk-rocpd
* Fix missing foreign key reference
* Revert change
* Fix cmake comment
* Fix maybe-uninitialized compiler warning
* Fix maybe-uninitialized compiler warning
* Add logging to rocpd_sql_load_schema
* Improve string sanitization when inserting json strings
* Initialize rocpd logging on rocprofiler-sdk-rocpd library load
* Revert lib/output/generatePerfetto.cpp changes
* [temporary] Tweak rocprofv3-test-list-avail-trace-execute test log level
* Update get_install_path for lib/rocprofiler-sdk-rocpd/sql.cpp
- try to resolve issues on RHEL/SLES for dladdr
* Update lib/common/logging.cpp
- enable environ overrides
* dlsym for rocpd_sql_load_schema
* Make dl_info.dli_fname lexically normal
* Implement node_info alternatives if /etc/machine-id does not exist
* Misc include fixes
* SHA256 and UUIDv7 support
* Implement UUIDv7 in generateRocpd.cpp
* Support push/pop environment variables
* Minor tweak
* Fix glog segfaults when unsetting glog env
* Updated CHANGELOG
* Updates tests/pytest-packages
- rocpd_reader.py: RocpdReader
* Update tests / marker_views.sql
- add test_rocpd_data
* Update rocpd_tables.sql
- Use AUTOINCREMENT
- insert "uuid" and "guid" into rocpd_metadata
* Minor updates to generateRocpd.cpp
- don't quote GUID
- use sqlite3_open_v2
- use sqlite3_close_v2
* Update execute_raw_sql_statements_impl
- uses sqlite3_last_insert_rowid for autoincrement
* Update SQL deferred_transaction
- CI check for nullptr to connection
* Apply suggestions from code review
Co-authored-by: Welton, Benjamin <Benjamin.Welton@amd.com>
* Code review updates
- formatting
- replace if with switch
- remove loop for {{uuid}}
* Fix pmc_groups handling in rocprofv3
* Address code review feedback
- Include rocm_version in rocprofv3 version info
- Note `--version` option for `rocprofv3` in CHANGELOG.md
- remove commented out code
* Fix packaging dependencies
* Fix install package step of CI workflow
* Fix install package step of CI workflow
---------
Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
Co-authored-by: Welton, Benjamin <Benjamin.Welton@amd.com>
219 rader
4.9 KiB
SQL
219 rader
4.9 KiB
SQL
--
|
|
-- Views related to markers
|
|
--
|
|
--
|
|
--
|
|
CREATE VIEW
|
|
`range_markers` AS
|
|
SELECT
|
|
E.id,
|
|
E.guid,
|
|
ST.string AS category,
|
|
JSON_EXTRACT(E.extdata, '$.message') AS name,
|
|
R.start,
|
|
R.end,
|
|
(R.end - R.start) AS duration,
|
|
E.stack_id,
|
|
E.parent_stack_id,
|
|
E.correlation_id,
|
|
E.call_stack,
|
|
E.line_info,
|
|
R.pid,
|
|
R.tid,
|
|
R.nid,
|
|
ST2.string AS operation
|
|
FROM
|
|
`rocpd_event` E
|
|
INNER JOIN `rocpd_string` ST ON ST.id = E.category_id
|
|
AND ST.guid = E.guid
|
|
INNER JOIN `rocpd_region` R ON R.event_id = E.id
|
|
AND R.guid = E.guid
|
|
INNER JOIN `rocpd_string` ST2 ON ST2.id = R.name_id
|
|
AND ST2.guid = R.guid
|
|
WHERE
|
|
ST.string LIKE '%MARKER%'
|
|
AND JSON_VALID(E.extdata);
|
|
|
|
--
|
|
--
|
|
CREATE VIEW
|
|
`single_markers` AS
|
|
SELECT
|
|
E.id,
|
|
E.guid,
|
|
ST.string AS category,
|
|
JSON_EXTRACT(E.extdata, '$.message') AS name,
|
|
S.timestamp AS timestamp,
|
|
E.stack_id,
|
|
E.parent_stack_id,
|
|
E.correlation_id,
|
|
E.call_stack,
|
|
E.line_info,
|
|
T.pid AS pid,
|
|
T.tid AS tid,
|
|
T.nid
|
|
FROM
|
|
`rocpd_event` E
|
|
INNER JOIN `rocpd_string` ST ON ST.id = E.category_id
|
|
AND ST.guid = E.guid
|
|
INNER JOIN `rocpd_sample` S ON S.event_id = E.id
|
|
AND S.guid = E.guid
|
|
INNER JOIN `rocpd_track` T ON T.id = S.track_id
|
|
AND S.guid = T.guid
|
|
WHERE
|
|
ST.string LIKE '%MARKER%';
|
|
|
|
--
|
|
--
|
|
CREATE VIEW
|
|
`markers` AS
|
|
SELECT
|
|
*
|
|
FROM
|
|
`range_markers`
|
|
UNION
|
|
SELECT
|
|
SM.id,
|
|
SM.guid,
|
|
SM.category,
|
|
SM.name,
|
|
SM.timestamp AS start,
|
|
SM.timestamp AS end,
|
|
0 AS duration,
|
|
SM.stack_id,
|
|
SM.parent_stack_id,
|
|
SM.correlation_id,
|
|
SM.call_stack,
|
|
SM.line_info,
|
|
SM.pid,
|
|
SM.tid,
|
|
SM.nid,
|
|
'roctxMarkA' AS operation
|
|
FROM
|
|
`single_markers` SM;
|
|
|
|
--
|
|
--
|
|
CREATE VIEW
|
|
`range_marker_summary` AS
|
|
WITH
|
|
avg_data AS (
|
|
SELECT
|
|
name,
|
|
AVG(duration) AS avg_duration
|
|
FROM
|
|
`range_markers`
|
|
GROUP BY
|
|
name
|
|
),
|
|
aggregated_data AS (
|
|
SELECT
|
|
RM.name,
|
|
COUNT(*) AS calls,
|
|
SUM(RM.duration) AS total_duration,
|
|
A.avg_duration AS average_duration,
|
|
MIN(RM.duration) AS min_duration,
|
|
MAX(RM.duration) AS max_duration,
|
|
SQRT(AVG((RM.duration - A.avg_duration) * (RM.duration - A.avg_duration))) AS std_dev_duration
|
|
FROM
|
|
`range_markers` RM
|
|
JOIN avg_data A ON RM.name = A.name
|
|
GROUP BY
|
|
RM.name
|
|
),
|
|
total_duration AS (
|
|
SELECT
|
|
SUM(total_duration) AS grand_total_duration
|
|
FROM
|
|
aggregated_data
|
|
)
|
|
SELECT
|
|
AD.name AS name,
|
|
AD.calls,
|
|
AD.total_duration AS `DURATION (nsec)`,
|
|
AD.average_duration AS `AVERAGE (nsec)`,
|
|
(CAST(AD.total_duration AS REAL) / TD.grand_total_duration) * 100 AS `PERCENT (INC)`,
|
|
AD.min_duration AS `MIN (nsec)`,
|
|
AD.max_duration AS `MAX (nsec)`,
|
|
AD.std_dev_duration AS `STD_DEV`
|
|
FROM
|
|
aggregated_data AD
|
|
CROSS JOIN total_duration TD;
|
|
|
|
--
|
|
--
|
|
CREATE VIEW
|
|
`single_marker_summary` AS
|
|
SELECT
|
|
SM.name,
|
|
COUNT(*) AS calls
|
|
FROM
|
|
`single_markers` SM
|
|
GROUP BY
|
|
SM.name;
|
|
|
|
--
|
|
-- Markers summary
|
|
CREATE VIEW
|
|
`marker_summary` AS
|
|
WITH
|
|
all_markers AS (
|
|
SELECT
|
|
name,
|
|
duration
|
|
FROM
|
|
`range_markers`
|
|
UNION ALL
|
|
SELECT
|
|
name,
|
|
0 AS duration
|
|
FROM
|
|
`single_markers`
|
|
),
|
|
avg_data AS (
|
|
SELECT
|
|
name,
|
|
AVG(duration) AS avg_duration
|
|
FROM
|
|
all_markers
|
|
GROUP BY
|
|
name
|
|
),
|
|
aggregated_data AS (
|
|
SELECT
|
|
M.name,
|
|
COUNT(*) AS calls,
|
|
SUM(M.duration) AS total_duration,
|
|
CAST(SUM(M.duration * M.duration) AS REAL) AS sqr_duration,
|
|
A.avg_duration AS average_duration,
|
|
MIN(M.duration) AS min_duration,
|
|
MAX(M.duration) AS max_duration,
|
|
AVG((M.duration - A.avg_duration) * (M.duration - A.avg_duration)) AS variance_duration,
|
|
SQRT(AVG((M.duration - A.avg_duration) * (M.duration - A.avg_duration))) AS std_dev_duration
|
|
FROM
|
|
all_markers M
|
|
JOIN avg_data A ON M.name = A.name
|
|
GROUP BY
|
|
M.name
|
|
),
|
|
total_duration AS (
|
|
SELECT
|
|
SUM(total_duration) AS grand_total_duration
|
|
FROM
|
|
aggregated_data
|
|
)
|
|
SELECT
|
|
AD.name AS name,
|
|
AD.calls,
|
|
AD.total_duration AS `DURATION (nsec)`,
|
|
AD.sqr_duration AS `SQR (nsec)`,
|
|
AD.average_duration AS `AVERAGE (nsec)`,
|
|
(CAST(AD.total_duration AS REAL) / NULLIF(TD.grand_total_duration, 0)) * 100 AS `PERCENT (INC)`,
|
|
AD.min_duration AS `MIN (nsec)`,
|
|
AD.max_duration AS `MAX (nsec)`,
|
|
AD.variance_duration AS `VARIANCE`,
|
|
AD.std_dev_duration AS `STD_DEV`
|
|
FROM
|
|
aggregated_data AD
|
|
CROSS JOIN total_duration TD;
|