2015-01-30 13:46:01 -08:00
# include "req-gen/_begin.h"
/*
* Based on the document " getPerfCountInfo v1.07 "
*/
/*
* # define REQUEST_NAME counter_request_name
* # define REQUEST_NUM r_num
* # define REQUEST_IDX_KIND starting_index_kind
* # include I ( REQUEST_BEGIN )
* REQUEST (
* __field ( . . . )
* __field ( . . . )
* __array ( . . . )
* __count ( . . . )
* )
* # include I ( REQUEST_END )
*
* - starting_index_kind is one of the following , depending on the event :
*
2015-01-30 13:46:02 -08:00
* hw_chip_id : hardware chip id or - 1 for current hw chip
* partition_id
* sibling_part_id ,
2015-01-30 13:46:01 -08:00
* phys_processor_idx :
* 0xffffffffffffffff : or - 1 , which means it is irrelavant for the event
*
* __count ( offset , bytes , name ) :
* a counter that should be exposed via perf
* __field ( offset , bytes , name )
* a normal field
* __array ( offset , bytes , name )
* an array of bytes
*
*
* @ bytes for __count , and __field _must_ be a numeral token
* in decimal , not an expression and not in hex .
*
*
* TODO :
* - expose secondary index ( if any counter ever uses it , only 0xA0
* appears to use it right now , and it doesn ' t have any counters )
* - embed versioning info
* - include counter descriptions
*/
# define REQUEST_NAME dispatch_timebase_by_processor
# define REQUEST_NUM 0x10
# define REQUEST_IDX_KIND "phys_processor_idx=?"
# include I(REQUEST_BEGIN)
REQUEST ( __count ( 0 , 8 , processor_time_in_timebase_cycles )
__field ( 0x8 , 4 , hw_processor_id )
__field ( 0xC , 2 , owning_part_id )
__field ( 0xE , 1 , processor_state )
__field ( 0xF , 1 , version )
__field ( 0x10 , 4 , hw_chip_id )
__field ( 0x14 , 4 , phys_module_id )
__field ( 0x18 , 4 , primary_affinity_domain_idx )
__field ( 0x1C , 4 , secondary_affinity_domain_idx )
__field ( 0x20 , 4 , processor_version )
__field ( 0x24 , 2 , logical_processor_idx )
__field ( 0x26 , 2 , reserved )
__field ( 0x28 , 4 , processor_id_register )
__field ( 0x2C , 4 , phys_processor_idx )
)
# include I(REQUEST_END)
2015-01-30 13:46:02 -08:00
# define REQUEST_NAME entitled_capped_uncapped_donated_idle_timebase_by_partition
# define REQUEST_NUM 0x20
# define REQUEST_IDX_KIND "sibling_part_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 8 , partition_id )
__count ( 0x8 , 8 , entitled_cycles )
__count ( 0x10 , 8 , consumed_capped_cycles )
__count ( 0x18 , 8 , consumed_uncapped_cycles )
__count ( 0x20 , 8 , cycles_donated )
__count ( 0x28 , 8 , purr_idle_cycles )
)
# include I(REQUEST_END)
/*
* Not available for counter_info_version > = 0x8 , use
* run_instruction_cycles_by_partition ( 0x100 ) instead .
*/
# define REQUEST_NAME run_instructions_run_cycles_by_partition
# define REQUEST_NUM 0x30
# define REQUEST_IDX_KIND "sibling_part_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 8 , partition_id )
__count ( 0x8 , 8 , instructions_completed )
__count ( 0x10 , 8 , cycles )
)
# include I(REQUEST_END)
2015-01-30 13:46:01 -08:00
# define REQUEST_NAME system_performance_capabilities
# define REQUEST_NUM 0x40
# define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 1 , perf_collect_privileged )
__field ( 0x1 , 1 , capability_mask )
__array ( 0x2 , 0xE , reserved )
)
# include I(REQUEST_END)
2015-01-30 13:46:02 -08:00
# define REQUEST_NAME processor_bus_utilization_abc_links
# define REQUEST_NUM 0x50
# define REQUEST_IDX_KIND "hw_chip_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 4 , hw_chip_id )
__array ( 0x4 , 0xC , reserved1 )
__count ( 0x10 , 8 , total_link_cycles )
__count ( 0x18 , 8 , idle_cycles_for_a_link )
__count ( 0x20 , 8 , idle_cycles_for_b_link )
__count ( 0x28 , 8 , idle_cycles_for_c_link )
__array ( 0x30 , 0x20 , reserved2 )
)
# include I(REQUEST_END)
# define REQUEST_NAME processor_bus_utilization_wxyz_links
# define REQUEST_NUM 0x60
# define REQUEST_IDX_KIND "hw_chip_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 4 , hw_chip_id )
__array ( 0x4 , 0xC , reserved1 )
__count ( 0x10 , 8 , total_link_cycles )
__count ( 0x18 , 8 , idle_cycles_for_w_link )
__count ( 0x20 , 8 , idle_cycles_for_x_link )
__count ( 0x28 , 8 , idle_cycles_for_y_link )
__count ( 0x30 , 8 , idle_cycles_for_z_link )
__array ( 0x38 , 0x28 , reserved2 )
)
# include I(REQUEST_END)
# define REQUEST_NAME processor_bus_utilization_gx_links
# define REQUEST_NUM 0x70
# define REQUEST_IDX_KIND "hw_chip_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 4 , hw_chip_id )
__array ( 0x4 , 0xC , reserved1 )
__count ( 0x10 , 8 , gx0_in_address_cycles )
__count ( 0x18 , 8 , gx0_in_data_cycles )
__count ( 0x20 , 8 , gx0_in_retries )
__count ( 0x28 , 8 , gx0_in_bus_cycles )
__count ( 0x30 , 8 , gx0_in_cycles_total )
__count ( 0x38 , 8 , gx0_out_address_cycles )
__count ( 0x40 , 8 , gx0_out_data_cycles )
__count ( 0x48 , 8 , gx0_out_retries )
__count ( 0x50 , 8 , gx0_out_bus_cycles )
__count ( 0x58 , 8 , gx0_out_cycles_total )
__count ( 0x60 , 8 , gx1_in_address_cycles )
__count ( 0x68 , 8 , gx1_in_data_cycles )
__count ( 0x70 , 8 , gx1_in_retries )
__count ( 0x78 , 8 , gx1_in_bus_cycles )
__count ( 0x80 , 8 , gx1_in_cycles_total )
__count ( 0x88 , 8 , gx1_out_address_cycles )
__count ( 0x90 , 8 , gx1_out_data_cycles )
__count ( 0x98 , 8 , gx1_out_retries )
__count ( 0xA0 , 8 , gx1_out_bus_cycles )
__count ( 0xA8 , 8 , gx1_out_cycles_total )
)
# include I(REQUEST_END)
# define REQUEST_NAME processor_bus_utilization_mc_links
# define REQUEST_NUM 0x80
# define REQUEST_IDX_KIND "hw_chip_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 4 , hw_chip_id )
__array ( 0x4 , 0xC , reserved1 )
__count ( 0x10 , 8 , mc0_frames )
__count ( 0x18 , 8 , mc0_reads )
__count ( 0x20 , 8 , mc0_write )
__count ( 0x28 , 8 , mc0_total_cycles )
__count ( 0x30 , 8 , mc1_frames )
__count ( 0x38 , 8 , mc1_reads )
__count ( 0x40 , 8 , mc1_writes )
__count ( 0x48 , 8 , mc1_total_cycles )
)
# include I(REQUEST_END)
/* Processor_config (0x90) skipped, no counters */
/* Current_processor_frequency (0x91) skipped, no counters */
# define REQUEST_NAME processor_core_utilization
# define REQUEST_NUM 0x94
# define REQUEST_IDX_KIND "phys_processor_idx=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 4 , phys_processor_idx )
__field ( 0x4 , 4 , hw_processor_id )
__count ( 0x8 , 8 , cycles_across_any_thread )
__count ( 0x10 , 8 , timebase_at_collection )
__count ( 0x18 , 8 , purr_cycles )
__count ( 0x20 , 8 , sum_of_cycles_across_all_threads )
__count ( 0x28 , 8 , instructions_completed )
)
# include I(REQUEST_END)
/* Processor_core_power_mode (0x95) skipped, no counters */
/* Affinity_domain_information_by_virtual_processor (0xA0) skipped,
* no counters */
/* Affinity_domain_information_by_domain (0xB0) skipped, no counters */
/* Affinity_domain_information_by_partition (0xB1) skipped, no counters */
/* Physical_memory_info (0xC0) skipped, no counters */
/* Processor_bus_topology (0xD0) skipped, no counters */
# define REQUEST_NAME partition_hypervisor_queuing_times
# define REQUEST_NUM 0xE0
# define REQUEST_IDX_KIND "partition_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 2 , partition_id )
__array ( 0x2 , 6 , reserved1 )
__count ( 0x8 , 8 , time_waiting_for_entitlement )
__count ( 0x10 , 8 , times_waited_for_entitlement )
__count ( 0x18 , 8 , time_waiting_for_phys_processor )
__count ( 0x20 , 8 , times_waited_for_phys_processor )
__count ( 0x28 , 8 , dispatches_on_home_core )
__count ( 0x30 , 8 , dispatches_on_home_primary_affinity_domain )
__count ( 0x38 , 8 , dispatches_on_home_secondary_affinity_domain )
__count ( 0x40 , 8 , dispatches_off_home_secondary_affinity_domain )
__count ( 0x48 , 8 , dispatches_on_dedicated_processor_donating_cycles )
)
# include I(REQUEST_END)
# define REQUEST_NAME system_hypervisor_times
# define REQUEST_NUM 0xF0
# define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
# include I(REQUEST_BEGIN)
REQUEST ( __count ( 0 , 8 , time_spent_to_dispatch_virtual_processors )
__count ( 0x8 , 8 , time_spent_processing_virtual_processor_timers )
__count ( 0x10 , 8 , time_spent_managing_partitions_over_entitlement )
__count ( 0x18 , 8 , time_spent_on_system_management )
)
# include I(REQUEST_END)
# define REQUEST_NAME system_tlbie_count_and_time
# define REQUEST_NUM 0xF4
# define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
# include I(REQUEST_BEGIN)
REQUEST ( __count ( 0 , 8 , tlbie_instructions_issued )
/*
* FIXME : The spec says the offset here is 0x10 , which I suspect
* is wrong .
*/
__count ( 0x8 , 8 , time_spent_issuing_tlbies )
)
# include I(REQUEST_END)
# define REQUEST_NAME partition_instruction_count_and_time
# define REQUEST_NUM 0x100
# define REQUEST_IDX_KIND "partition_id=?"
# include I(REQUEST_BEGIN)
REQUEST ( __field ( 0 , 2 , partition_id )
__array ( 0x2 , 0x6 , reserved1 )
__count ( 0x8 , 8 , instructions_performed )
__count ( 0x10 , 8 , time_collected )
)
# include I(REQUEST_END)
/* set_mmcrh (0x80001000) skipped, no counters */
/* retrieve_hpmcx (0x80002000) skipped, no counters */
2015-01-30 13:46:01 -08:00
# include "req-gen/_end.h"