Re: [PATCH v4 2/9] lib/librte_power: add extra msg type for policies
From: santosh <hidden>
Date: 2017-10-04 15:36:43
Hi David, On Wednesday 04 October 2017 02:45 PM, David Hunt wrote:
Signed-off-by: Nemanja Marjanovic <redacted> Signed-off-by: Rory Sexton <redacted> Signed-off-by: David Hunt <redacted> ---
my 2cent:
General comment on implementation approach:
IMO, we should avoid PMD details in common lib area.
example: file channel_commons.h has ifdef clutter referencing
i40e pmds all over.
Perhaps we should introduce opaque handle example void * or introduce pmd
specific callback/handle which points to PMD specific metadata in power library.
Example:
struct channel_packet {
void *pmd_specific_metadata;
}
Or someway via callback (I'm not sure at the moment)
so that we could hide PMD details in common area.
Thanks.
quoted hunk ↗ jump to hunk
lib/librte_power/channel_commands.h | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)diff --git a/lib/librte_power/channel_commands.h b/lib/librte_power/channel_commands.h index 484085b..1599706 100644 --- a/lib/librte_power/channel_commands.h +++ b/lib/librte_power/channel_commands.h@@ -46,6 +46,7 @@ extern "C" { /* Valid Commands */ #define CPU_POWER 1 #define CPU_POWER_CONNECT 2 +#define PKT_POLICY 3 /* CPU Power Command Scaling */ #define CPU_POWER_SCALE_UP 1@@ -54,11 +55,62 @@ extern "C" { #define CPU_POWER_SCALE_MIN 4 #define CPU_POWER_ENABLE_TURBO 5 #define CPU_POWER_DISABLE_TURBO 6 +#define HOURS 24 + +#ifdef RTE_LIBRTE_I40E_PMD +#define MAX_VFS 10 +#endif + +#define MAX_VCPU_PER_VM 8 + +typedef enum {false, true} bool; + +struct t_boost_status { + bool tbEnabled; +}; + +struct timer_profile { + int busy_hours[HOURS]; + int quiet_hours[HOURS]; +#ifdef RTE_LIBRTE_I40E_PMD + int hours_to_use_traffic_profile[HOURS]; +#endif +}; + +enum workload {HIGH, MEDIUM, LOW}; +enum policy_to_use { +#ifdef RTE_LIBRTE_I40E_PMD + TRAFFIC, +#endif + TIME, + WORKLOAD +}; + +#ifdef RTE_LIBRTE_I40E_PMD +struct traffic { + uint32_t min_packet_thresh; + uint32_t avg_max_packet_thresh; + uint32_t max_max_packet_thresh; +}; +#endif struct channel_packet { uint64_t resource_id; /**< core_num, device */ uint32_t unit; /**< scale down/up/min/max */ uint32_t command; /**< Power, IO, etc */ + char vm_name[32]; + +#ifdef RTE_LIBRTE_I40E_PMD + uint64_t vfid[MAX_VFS]; + int nb_mac_to_monitor; + struct traffic traffic_policy; +#endif + uint8_t vcpu_to_control[MAX_VCPU_PER_VM]; + uint8_t num_vcpu; + struct timer_profile timer_policy; + enum workload workload; + enum policy_to_use policy_to_use; + struct t_boost_status t_boost_status; };