From: David Hunt <david.hunt@intel.com>
To: david.hunt@intel.com
Cc: dev@dpdk.org, Marcin Hajkowski <marcinx.hajkowski@intel.com>
Subject: [dpdk-dev] [PATCH v2 2/4] power: process cpu freq query
Date: Fri, 27 Sep 2019 13:15:59 +0100 [thread overview]
Message-ID: <20190927121601.23661-3-david.hunt@intel.com> (raw)
In-Reply-To: <20190927121601.23661-1-david.hunt@intel.com>
From: Marcin Hajkowski <marcinx.hajkowski@intel.com>
On query received from VM guest send CPUs frequencies.
Signed-off-by: Marcin Hajkowski <marcinx.hajkowski@intel.com>
Tested-by: David Hunt <david.hunt@intel.com>
Acked-by: Lee Daly <lee.daly@intel.com>
---
examples/vm_power_manager/channel_monitor.c | 67 ++++++++++++++++++---
1 file changed, 59 insertions(+), 8 deletions(-)
diff --git a/examples/vm_power_manager/channel_monitor.c b/examples/vm_power_manager/channel_monitor.c
index 0c73fac55..fd7269889 100644
--- a/examples/vm_power_manager/channel_monitor.c
+++ b/examples/vm_power_manager/channel_monitor.c
@@ -672,10 +672,14 @@ apply_policy(struct policy *pol)
}
static int
-write_binary_packet(struct channel_packet *pkt, struct channel_info *chan_info)
+write_binary_packet(void *buffer,
+ size_t buffer_len,
+ struct channel_info *chan_info)
{
- int ret, buffer_len = sizeof(*pkt);
- void *buffer = pkt;
+ int ret;
+
+ if (buffer_len == 0 || buffer == NULL)
+ return -1;
if (chan_info->fd < 0) {
RTE_LOG(ERR, CHANNEL_MONITOR, "Channel is not connected\n");
@@ -697,13 +701,48 @@ write_binary_packet(struct channel_packet *pkt, struct channel_info *chan_info)
return 0;
}
+static int
+send_freq(struct channel_packet *pkt,
+ struct channel_info *chan_info,
+ bool freq_list)
+{
+ unsigned int vcore_id = pkt->resource_id;
+ struct channel_packet_freq_list channel_pkt_freq_list;
+ struct vm_info info;
+
+ if (get_info_vm(pkt->vm_name, &info) != 0)
+ return -1;
+
+ if (!freq_list && vcore_id >= MAX_VCPU_PER_VM)
+ return -1;
+
+ channel_pkt_freq_list.command = CPU_POWER_FREQ_LIST;
+ channel_pkt_freq_list.num_vcpu = info.num_vcpus;
+
+ if (freq_list) {
+ unsigned int i;
+ for (i = 0; i < info.num_vcpus; i++)
+ channel_pkt_freq_list.freq_list[i] =
+ power_manager_get_current_frequency(info.pcpu_map[i]);
+ } else {
+ channel_pkt_freq_list.freq_list[vcore_id] =
+ power_manager_get_current_frequency(info.pcpu_map[vcore_id]);
+ }
+
+ return write_binary_packet(&channel_pkt_freq_list,
+ sizeof(channel_pkt_freq_list),
+ chan_info);
+}
+
static int
send_ack_for_received_cmd(struct channel_packet *pkt,
struct channel_info *chan_info,
uint32_t command)
{
pkt->command = command;
- return write_binary_packet(pkt, chan_info);
+ return write_binary_packet(pkt,
+ sizeof(struct channel_packet),
+ chan_info);
}
static int
@@ -729,8 +768,8 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
RTE_LOG(DEBUG, CHANNEL_MONITOR, "Processing requested cmd for cpu:%d\n",
core_num);
- bool valid_unit = true;
int scale_res;
+ bool valid_unit = true;
switch (pkt->unit) {
case(CPU_POWER_SCALE_MIN):
@@ -763,9 +802,9 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
CPU_POWER_CMD_ACK :
CPU_POWER_CMD_NACK);
if (ret < 0)
- RTE_LOG(DEBUG, CHANNEL_MONITOR, "Error during sending ack command.\n");
+ RTE_LOG(ERR, CHANNEL_MONITOR, "Error during sending ack command.\n");
} else
- RTE_LOG(DEBUG, CHANNEL_MONITOR, "Unexpected unit type.\n");
+ RTE_LOG(ERR, CHANNEL_MONITOR, "Unexpected unit type.\n");
}
@@ -776,7 +815,7 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
chan_info,
CPU_POWER_CMD_ACK);
if (ret < 0)
- RTE_LOG(DEBUG, CHANNEL_MONITOR, "Error during sending ack command.\n");
+ RTE_LOG(ERR, CHANNEL_MONITOR, "Error during sending ack command.\n");
update_policy(pkt);
policy_is_set = 1;
}
@@ -791,6 +830,18 @@ process_request(struct channel_packet *pkt, struct channel_info *chan_info)
"Policy %s does not exist\n", pkt->vm_name);
}
+ if (pkt->command == CPU_POWER_QUERY_FREQ_LIST ||
+ pkt->command == CPU_POWER_QUERY_FREQ) {
+
+ RTE_LOG(INFO, CHANNEL_MONITOR,
+ "Frequency for %s requested.\n", pkt->vm_name);
+ int ret = send_freq(pkt,
+ chan_info,
+ pkt->command == CPU_POWER_QUERY_FREQ_LIST);
+ if (ret < 0)
+ RTE_LOG(ERR, CHANNEL_MONITOR, "Error during frequency sending.\n");
+ }
+
/*
* Return is not checked as channel status may have been set to DISABLED
* from management thread
--
2.17.1
next prev parent reply other threads:[~2019-09-27 12:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-03 17:15 [PATCH 0/4] Frequency list query Hajkowski
2019-04-03 17:15 ` [PATCH 1/4] power: extend guest channel for query freq Hajkowski
2019-09-27 12:15 ` [dpdk-dev] [PATCH v2 0/4] frequency list query from guest David Hunt
2019-09-27 12:15 ` [dpdk-dev] [PATCH v2 1/4] power: extend guest channel for query freq David Hunt
2019-09-30 9:54 ` Hunt, David
2019-09-27 12:15 ` David Hunt [this message]
2019-09-27 12:16 ` [dpdk-dev] [PATCH v2 3/4] power: add mechanism to disable queries David Hunt
2019-09-27 12:16 ` [dpdk-dev] [PATCH v2 4/4] power: add cmd to query CPU freq David Hunt
2019-09-27 12:38 ` Hunt, David
2019-10-27 19:59 ` [dpdk-dev] [PATCH v2 0/4] frequency list query from guest Thomas Monjalon
2019-04-03 17:15 ` [PATCH 2/4] power: process cpu freq. query Hajkowski
2019-04-03 17:15 ` [PATCH 3/4] power: add mechanism to disable queries Hajkowski
2019-04-03 17:16 ` [PATCH 4/4] power: add cmd to query CPU freq Hajkowski
2019-09-27 9:52 ` [dpdk-dev] " Daly, Lee
2019-09-27 10:19 ` Ferruh Yigit
2019-09-27 10:40 ` Hunt, David
2019-07-04 19:57 ` [dpdk-dev] [PATCH 0/4] Frequency list query Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190927121601.23661-3-david.hunt@intel.com \
--to=david.hunt@intel.com \
--cc=dev@dpdk.org \
--cc=marcinx.hajkowski@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.