blob: e8307b6ccf6bf098179edc53fee6a2b99fed037e [file] [log] [blame]
-- Maps non-aggregated Blink GC events in timeline to telemetry friendly
-- names.
--
-- This includes the old style or the new naming scheme one which only occur on
-- the main thread.
DROP VIEW IF EXISTS blink_non_aggregated_gc_event_name;
CREATE VIEW blink_non_aggregated_gc_event_name AS
SELECT
'BlinkGC.AtomicPauseMarkEpilogue' AS name,
'blink-gc-atomic-pause-mark-epilogue' AS old_event_name,
'blink:gc:main_thread:cycle:full:atomic:mark:epilogue' AS new_event_name
UNION ALL
SELECT
'BlinkGC.AtomicPauseMarkPrologue',
'blink-gc-atomic-pause-mark-prologue',
'blink:gc:main_thread:cycle:full:atomic:mark:prologue'
UNION ALL
SELECT
'BlinkGC.AtomicPauseMarkRoots',
'blink-gc-atomic-pause-mark-roots',
'blink:gc:main_thread:cycle:full:atomic:mark:roots'
UNION ALL
SELECT
'BlinkGC.IncrementalMarkingStartMarking',
'blink-gc-incremental-start',
'blink:gc:main_thread:cycle:full:incremental:mark:start'
UNION ALL
SELECT
'BlinkGC.IncrementalMarkingStep',
'blink-gc-incremental-step',
'blink:gc:main_thread:cycle:full:incremental:mark:step'
UNION ALL
SELECT
'BlinkGC.UnifiedMarkingStep',
'blink-gc-unified-marking-by-v8',
'unified:gc:main_thread:cycle:full:mark:step'
UNION ALL
SELECT
'BlinkGC.CompleteSweep',
'blink-gc-complete-sweep',
'blink:gc:main_thread:cycle:full:sweep:complete'
UNION ALL
SELECT
'BlinkGC.LazySweepInIdle',
'blink-gc-sweep-task-foreground',
'blink:gc:main_thread:cycle:full:sweep:idle'
UNION ALL
SELECT
'BlinkGC.LazySweepOnAllocation',
'blink-gc-sweep-allocation',
'blink:gc:main_thread:cycle:full:sweep:on_allocation'
UNION ALL
SELECT
'BlinkGC.AtomicPauseSweepAndCompact' AS name,
'blink-gc-atomic-pause-sweep-and-compact' AS old_event_name,
'blink:gc:main_thread:cycle:full:atomic:sweep:compact' AS new_event_name;
-- Get all the slices we care about. These are ones that start with V8.GC or
-- BlinkGC. If you need more you need to modify the where clause for
-- blink_gc_cpu_slice.
DROP TABLE IF EXISTS blink_gc_cpu_slice;
CREATE TABLE blink_gc_cpu_slice AS
SELECT
CASE WHEN dur != 0 THEN cpuDurNs / 1e6 ELSE 0.0 END AS cpuDurMs,
*
FROM (
SELECT
COALESCE(EXTRACT_ARG(arg_set_id, 'debug.forced'), FALSE)
-- This subquery replaces
-- metrics.v8.utils.isForcedGarbageCollectionEvent(event)
OR (
SELECT
id
FROM ANCESTOR_SLICE(slice.id) AS ancestor
WHERE ancestor.name = 'V8.GCLowMemoryNotification' LIMIT 1
) IS NOT NULL AS forced,
-- upid replaces pid, because its more fool proof ensuring uniqueness.
thread.upid || ':' || EXTRACT_ARG(arg_set_id, 'debug.epoch') AS epoch,
slice.thread_dur AS cpuDurNs,
slice.*
FROM slice
JOIN thread_track ON slice.track_id = thread_track.id
JOIN thread ON thread_track.utid = thread.id
WHERE
slice.dur >= 0 AND (
slice.name GLOB "V8.GC*" OR (slice.name GLOB "BlinkGC*" AND NOT forced)
)
);
-- This grabs all the single events for "BlinkGC.*", and restricts to only
-- forced events.
DROP TABLE IF EXISTS blink_slice;
CREATE TABLE blink_slice AS
SELECT
event_name.old_event_name AS blink_non_aggregated_gc_event_name,
event_name.new_event_name AS blink_non_aggregated_gc_events_new_name,
blink_gc_cpu_slice.*
FROM
blink_gc_cpu_slice LEFT JOIN
blink_non_aggregated_gc_event_name AS event_name ON
event_name.name = blink_gc_cpu_slice.name
WHERE
blink_gc_cpu_slice.name GLOB "BlinkGC*" AND NOT forced;
-- This groups all the events by name and epoch for from "blink_slice" for easy
-- access.
DROP TABLE IF EXISTS blink_per_epoch_slice;
CREATE TABLE blink_per_epoch_slice AS
SELECT
name,
epoch,
blink_non_aggregated_gc_event_name,
blink_non_aggregated_gc_events_new_name,
SUM(cpuDurMs) AS cpuDurPerEpochMs
FROM blink_slice
GROUP BY 1, 2, 3, 4;
-- All events that should be summed up to 'blink-gc-mark-roots'.
DROP VIEW IF EXISTS blink_top_gc_roots_marking_event;
CREATE VIEW blink_top_gc_roots_marking_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.VisitRoots'
);
-- All events that should be summed up to
-- 'blink-gc-atomic-pause-mark-transitive-closure'.
DROP VIEW IF EXISTS blink_gc_atomic_pause_transitive_closure_event;
CREATE VIEW blink_gc_atomic_pause_transitive_closure_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.AtomicPauseMarkTransitiveClosure'
);
-- All events that should be summed up to 'blink-gc-mark-transitive-closure'.
DROP VIEW IF EXISTS blink_gc_foreground_marking_transitive_closure_event;
CREATE VIEW
blink_gc_foreground_marking_transitive_closure_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.AtomicPauseMarkTransitiveClosure',
'BlinkGC.IncrementalMarkingStep',
'BlinkGC.UnifiedMarkingStep'
);
-- Names of Blink GC foreground marking events in timeline.
DROP VIEW IF EXISTS blink_top_gc_foreground_marking_event;
CREATE VIEW blink_top_gc_foreground_marking_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.AtomicPauseMarkEpilogue',
'BlinkGC.AtomicPauseMarkPrologue',
'BlinkGC.AtomicPauseMarkRoots',
'BlinkGC.IncrementalMarkingStartMarking'
)
UNION ALL
SELECT * FROM blink_gc_foreground_marking_transitive_closure_event;
-- Names of Blink GC foreground marking events in timeline.
DROP VIEW IF EXISTS blink_gc_forced_foreground_marking_event;
CREATE VIEW blink_gc_forced_foreground_marking_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.AtomicPauseMarkEpilogue',
'BlinkGC.AtomicPauseMarkPrologue',
'BlinkGC.AtomicPauseMarkRoots',
'BlinkGC.IncrementalMarkingStartMarking',
'BlinkGC.MarkBailOutObjects',
'BlinkGC.MarkFlushV8References',
'BlinkGC.MarkFlushEphemeronPairs'
);
-- Names of Blink GC background marking events in timeline.
DROP VIEW IF EXISTS blink_top_gc_background_marking_event;
CREATE VIEW blink_top_gc_background_marking_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.ConcurrentMarkingStep'
);
-- Names of Blink GC foreground sweeping events in timeline.
DROP VIEW IF EXISTS blink_top_gc_foreground_sweeping_event;
CREATE VIEW blink_top_gc_foreground_sweeping_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.CompleteSweep',
'BlinkGC.LazySweepInIdle',
'BlinkGC.LazySweepOnAllocation'
);
-- Names of Blink GC background sweeping events in timeline.
DROP VIEW IF EXISTS blink_top_gc_background_sweeping_event;
CREATE VIEW blink_top_gc_background_sweeping_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.ConcurrentSweepingStep'
);
-- Names of all Blink Unified GC events in timeline.
DROP VIEW IF EXISTS blink_top_gc_event;
CREATE VIEW blink_top_gc_event AS
SELECT * FROM blink_slice WHERE name IN (
SELECT name FROM blink_non_aggregated_gc_event_name
) OR name IN (
SELECT name FROM blink_gc_atomic_pause_transitive_closure_event
);
-- All events that should be summed up to 'blink-gc-atomic-pause'. Note that
-- this events need to have an epoch counter in args.epoch.
DROP VIEW IF EXISTS atomic_pause_event;
CREATE VIEW atomic_pause_event AS
SELECT * FROM blink_slice WHERE name IN (
'BlinkGC.AtomicPauseMarkEpilogue',
'BlinkGC.AtomicPauseMarkPrologue',
'BlinkGC.AtomicPauseMarkRoots',
'BlinkGC.AtomicPauseMarkTransitiveClosure',
'BlinkGC.AtomicPauseSweepAndCompact'
);
-- This is a more complex variable so benefits from additional comments so we
-- pull it out of the proto filling.
DROP VIEW IF EXISTS unified_gc_total;
CREATE VIEW unified_gc_total AS
SELECT
*
FROM blink_gc_cpu_slice
WHERE (
-- This subclause replaces
-- metrics.v8.utils.isNotForcedTopGarbageCollectionEvent()
-- These names are found in isTopGarbageCollectionEvent().
name IN (
'V8.GCCompactor',
'V8.GCFinalizeMC',
'V8.GCFinalizeMCReduceMemory',
'V8.GCIncrementalMarking',
'V8.GCIncrementalMarkingFinalize',
'V8.GCIncrementalMarkingStart',
'V8.GCPhantomHandleProcessingCallback',
'V8.GCScavenger'
) AND (
-- This replaces isForcedGarbageCollectionEvent.
SELECT name FROM ANCESTOR_SLICE(blink_gc_cpu_slice.id) AS ancestor
WHERE ancestor.name = 'V8.GCLowMemoryNotification'
LIMIT 1
) IS NULL
) OR (
-- This subclause replaces isNonNestedNonForcedBlinkGarbageCollectionEvent().
name IN (
-- This subquery replaces isNonForcedBlinkGarbageCollectionEvent().
SELECT name FROM blink_top_gc_event
) AND (
-- This subquery replaces metrics.v8.utils.isGarbageCollectionEvent().
SELECT name FROM ANCESTOR_SLICE(blink_gc_cpu_slice.id) AS ancestor
WHERE
ancestor.name GLOB "V8.GC*"
AND ancestor.name != 'V8.GCLowMemoryNotification'
LIMIT 1
) IS NULL
);
-- This table name is just "file_name" + "_output" used by TBMv3 to know which
-- view to extract the proto BlinkGcMetric out of.
DROP VIEW IF EXISTS blink_gc_metric_output;
CREATE VIEW blink_gc_metric_output AS
SELECT BlinkGcMetric(
'blink_gc_atomic_pause_mark_epilogue',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE
blink_non_aggregated_gc_event_name = 'blink-gc-atomic-pause-mark-epilogue'
),
'blink_gc_main_thread_cycle_full_atomic_mark_epilogue',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:atomic:mark:epilogue'
),
'blink_gc_atomic_pause_mark_prologue',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE
blink_non_aggregated_gc_event_name
= 'blink-gc-atomic-pause-mark-prologue'
),
'blink_gc_main_thread_cycle_full_atomic_mark_prologue',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:atomic:mark:prologue'
),
'blink_gc_atomic_pause_mark_roots',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE
blink_non_aggregated_gc_event_name = 'blink-gc-atomic-pause-mark-roots'
),
'blink_gc_main_thread_cycle_full_atomic_mark_roots',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:atomic:mark:roots'
),
'blink_gc_atomic_pause_sweep_and_compact',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE
blink_non_aggregated_gc_event_name
= 'blink-gc-atomic-pause-sweep-and-compact'
),
'blink_gc_main_thread_cycle_full_atomic_sweep_compact',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:atomic:sweep:compact'
),
'blink_gc_complete_sweep',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-complete-sweep'
),
'blink_gc_main_thread_cycle_full_sweep_complete',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:sweep:complete'
),
'blink_gc_incremental_start',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-incremental-start'
),
'blink_gc_main_thread_cycle_full_incremental_mark_start',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:incremental:mark:start'
),
'blink_gc_incremental_step',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-incremental-step'
),
'blink_gc_main_thread_cycle_full_incremental_mark_step',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:incremental:mark:step'
),
'blink_gc_sweep_allocation',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-sweep-allocation'
),
'blink_gc_main_thread_cycle_full_sweep_on_allocation',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:sweep:on_allocation'
),
'blink_gc_sweep_task_foreground',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-sweep-task-foreground'
),
'blink_gc_main_thread_cycle_full_sweep_idle',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'blink:gc:main_thread:cycle:full:sweep:idle'
),
'blink_gc_unified_marking_by_v8',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_slice
WHERE blink_non_aggregated_gc_event_name = 'blink-gc-unified-marking-by-v8'
),
'unified_gc_main_thread_cycle_full_mark_step',
(
SELECT
RepeatedField(cpuDurPerEpochMs)
FROM blink_per_epoch_slice
WHERE
blink_non_aggregated_gc_events_new_name
= 'unified:gc:main_thread:cycle:full:mark:step'
),
'blink_gc_atomic_pause',
(
SELECT
RepeatedField(cpuDurMs)
FROM atomic_pause_event
),
'blink_gc_main_thread_cycle_full_atomic',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM atomic_pause_event
GROUP BY epoch
)
),
'blink_gc_atomic_pause_mark_transitive_closure',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_gc_atomic_pause_transitive_closure_event
),
'blink_gc_main_thread_cycle_full_atomic_mark_transitive_closure',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_gc_atomic_pause_transitive_closure_event
GROUP BY epoch
)
),
'blink_gc_total',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_event
),
'blink_gc_main_thread_cycle_full',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_event
GROUP BY epoch
)
),
'blink_gc_mark_roots',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_roots_marking_event
),
'blink_gc_main_thread_cycle_full_mark_roots',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_roots_marking_event
GROUP BY epoch
)
),
'blink_gc_mark_transitive_closure',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_gc_foreground_marking_transitive_closure_event
),
'blink_gc_main_thread_cycle_full_mark_transitive_closure',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_gc_foreground_marking_transitive_closure_event
GROUP BY epoch
)
),
'blink_gc_mark_foreground',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_foreground_marking_event
),
'blink_gc_main_thread_cycle_full_mark',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_foreground_marking_event
GROUP BY epoch
)
),
'blink_gc_mark_foreground_forced',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_gc_forced_foreground_marking_event
),
'blink_gc_main_thread_cycle_full_mark_forced',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_gc_forced_foreground_marking_event
GROUP BY epoch
)
),
'blink_gc_mark_background',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_background_marking_event
),
'blink_gc_concurrent_thread_cycle_full_mark',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_background_marking_event
GROUP BY epoch
)
),
'blink_gc_sweep_foreground',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_foreground_sweeping_event
),
'blink_gc_main_thread_cycle_full_sweep',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_foreground_sweeping_event
GROUP BY epoch
)
),
'blink_gc_sweep_background',
(
SELECT
RepeatedField(cpuDurMs)
FROM blink_top_gc_background_sweeping_event
),
'blink_gc_concurrent_thread_cycle_full_sweep',
(
SELECT RepeatedField(val) FROM (
SELECT
SUM(cpuDurMs) AS val
FROM blink_top_gc_background_sweeping_event
GROUP BY epoch
)
),
'unified_gc_total',
(
SELECT
RepeatedField(cpuDurMs)
FROM unified_gc_total
)
);