|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Request for help: passing network statistics from netback driver to Xen scheduler.
On 01 Aug 2014, at 12:29, Wei Liu <wei.liu2@xxxxxxxxxx> wrote:
>
> It's better to just paste in the diff instead of the whole function.
My apologies for that! Hereâs the diff:
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index fa6ade7..121e793 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -134,7 +134,7 @@ EXPORT_SYMBOL_GPL(xen_have_vector_callback);
* page as soon as fixmap is up and running.
*/
struct shared_info *HYPERVISOR_shared_info = &xen_dummy_shared_info;
-
+EXPORT_SYMBOL(HYPERVISOR_shared_info);
/*
* Flag to determine whether vcpu info placement is available on all
* VCPUs. We assume it is to start with, and then set it to zero on
diff --git a/drivers/net/xen-netback/netback.c
b/drivers/net/xen-netback/netback.c
index b898c6b..4b3e9d8 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -44,9 +44,11 @@
#include <xen/xen.h>
#include <xen/events.h>
#include <xen/interface/memory.h>
+#include <xen/interface/xen.h>
#include <asm/xen/hypercall.h>
#include <asm/xen/page.h>
+#include <asm/xen/hypervisor.h>
/* Provide an option to disable split event channels at load time as
* event channels are limited resource. Split event channels are
@@ -572,6 +574,7 @@ void xenvif_rx_action(struct xenvif *vif)
unsigned long offset;
struct skb_cb_overlay *sco;
int need_to_notify = 0;
+ struct shared_info *shared_info = HYPERVISOR_shared_info;
struct netrx_pending_operations npo = {
.copy = vif->grant_copy_op,
@@ -631,6 +634,9 @@ void xenvif_rx_action(struct xenvif *vif)
vif->dev->stats.tx_bytes += skb->len;
vif->dev->stats.tx_packets++;
+ shared_info->network_intensity[vif->domid]++;
+ printk(KERN_EMERG "RX ACTION: %d %ld\n", vif->domid,
shared_info->network_intensity[vif->domid]);
+
status = xenvif_check_gop(vif, sco->meta_slots_used, &npo);
if (sco->meta_slots_used == 1)
@@ -1628,6 +1634,7 @@ static int xenvif_tx_submit(struct xenvif *vif)
struct gnttab_copy *gop = vif->tx_copy_ops;
struct sk_buff *skb;
int work_done = 0;
+ struct shared_info *shared_info = HYPERVISOR_shared_info;
while ((skb = __skb_dequeue(&vif->tx_queue)) != NULL) {
struct xen_netif_tx_request *txp;
@@ -1687,6 +1694,9 @@ static int xenvif_tx_submit(struct xenvif *vif)
vif->dev->stats.rx_bytes += skb->len;
vif->dev->stats.rx_packets++;
+ shared_info->network_intensity[vif->domid]++;
+ printk(KERN_EMERG "TX ACTION: %d\n", vif->domid);
+
work_done++;
netif_receive_skb(skb);
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h
index 53ec416..11a3ef0 100644
--- a/include/xen/interface/xen.h
+++ b/include/xen/interface/xen.h
@@ -394,7 +394,7 @@ struct shared_info {
struct pvclock_wall_clock wc;
struct arch_shared_info arch;
-
+ unsigned long network_intensity[10];
};
/*
> Also you will need to state clearly what version the diff is based on.
Iâve used ubuntuâs kernel source hosted at:
git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
Last commit: b90e9899aad49b601a744f503edc8e484490b906
The problem is: dmesg shows increasing values of network_intensity counter,
however when I try to access it from xen scheduler
itâs always 0.
Kind regards,
Marcin DÅugajczyk
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |