@@ -76,7 +76,7 @@ const EVENT_TYPES =
7676 (:stalled_cycles_backend , 8 ), # PERF_COUNT_HW_STALLED_CYCLES_BACKEND
7777 (:scaled_cycles , 9 ) # PERF_COUNT_HW_REF_CPU_CYCLES
7878 ]),
79- (:sw , 1 , # PERF_TYPE_SOFTWARE
79+ (:sw , PERF_TYPE_SOFTWARE,
8080 [(:cpu_clock , 0 ), # PERF_COUNT_SW_CPU_CLOCK
8181 (:task_clock , 1 ), # PEF_COUNT_SW_TASK_CLOCK
8282 (:page_faults , 2 ), # PERF_COUNT_SW_PAGE_FAULTS
@@ -414,9 +414,47 @@ const NAME_TO_EVENT = Dict(
414414 " iTLB-load-misses" => EventType (:cache , :TLB_insn , :read , :miss ),
415415 " iTLB-loads" => EventType (:cache , :TLB_insn , :read , :access ),
416416)
417-
418417const EVENT_TO_NAME = Dict (event => name for (name, event) in NAME_TO_EVENT)
419418
419+ function is_supported (event:: EventType )
420+ attr = perf_event_attr ()
421+ attr. typ = event. category
422+ attr. size = sizeof (perf_event_attr)
423+ attr. config = event. event
424+ fd = perf_event_open (attr, 0 , - 1 , - 1 , 0 )
425+ if fd ≥ 0
426+ ret = ccall (:close , Cint, (Cint,), fd)
427+ if ret != 0
428+ @warn " failed to close file descriptor for some reason"
429+ end
430+ return true
431+ end
432+ return false
433+ end
434+
435+ is_supported (name:: AbstractString ) = haskey (NAME_TO_EVENT, name) && is_supported (NAME_TO_EVENT[name])
436+
437+ function list ()
438+ for t in [PERF_TYPE_HARDWARE, PERF_TYPE_SOFTWARE, PERF_TYPE_HW_CACHE]
439+ events = collect (filter (x -> x[2 ]. category == t, NAME_TO_EVENT))
440+ sort! (events, by = x -> x[1 ]) # sort events by name
441+ if t == PERF_TYPE_HARDWARE
442+ println (" hardware:" )
443+ elseif t == PERF_TYPE_SOFTWARE
444+ println (" software:" )
445+ elseif t == PERF_TYPE_HW_CACHE
446+ println (" cache:" )
447+ else
448+ @assert false
449+ end
450+ for (name, event) in events
451+ @printf " %-25s%s" name (is_supported (event) ? " supported" : " not supported" )
452+ println ()
453+ end
454+ t != PERF_TYPE_HW_CACHE && println ()
455+ end
456+ end
457+
420458function parse_pstats_options (opts)
421459 # default events
422460 events = parse_groups ("
0 commit comments