mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
bitkeeper revision 1.379 (3f27c63d0n0AK0DFCerOSUf9Wi3atA)
dev.c, perfc_defn.h, perfc.h, perfc.c: Added perfctrs to net rx path.
This commit is contained in:
1 parent
cb54926344
commit
51c714da7d
4 files changed
+40
-24
No files matched your search
+10
-7
@@ -27,7 +27,7 @@ void perfc_printall(u_char key, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
int i, j;
|
||||
s_time_t now = NOW();
|
||||
unsigned long *counters = (unsigned long *)&perfcounters;
|
||||
atomic_t *counters = (atomic_t *)&perfcounters;
|
||||
|
||||
printk("Xen performance counters SHOW (now = 0x%08X:%08X)\n",
|
||||
(u32)(now>>32), (u32)now);
|
||||
@@ -37,20 +37,23 @@ void perfc_printall(u_char key, void *dev_id, struct pt_regs *regs)
|
||||
switch ( perfc_info[i].type )
|
||||
{
|
||||
case TYPE_SINGLE:
|
||||
printk("%10ld 0x%08lx %s\n",
|
||||
counters[0], counters[0], perfc_info[i].name);
|
||||
printk("%10d 0x%08x %s\n",
|
||||
atomic_read(&counters[0]), atomic_read(&counters[0]),
|
||||
perfc_info[i].name);
|
||||
counters += 1;
|
||||
break;
|
||||
case TYPE_CPU:
|
||||
for ( j = 0; j < smp_num_cpus; j++ )
|
||||
printk("%10ld 0x%08lx %s[CPU %02d]\n",
|
||||
counters[j], counters[j], perfc_info[i].name, j);
|
||||
printk("%10d 0x%08x %s[CPU %02d]\n",
|
||||
atomic_read(&counters[j]), atomic_read(&counters[j]),
|
||||
perfc_info[i].name, j);
|
||||
counters += j;
|
||||
break;
|
||||
case TYPE_ARRAY:
|
||||
for ( j = 0; j < perfc_info[i].nr_elements; j++ )
|
||||
printk("%10ld 0x%08lx %s[ARR %02d]\n",
|
||||
counters[j], counters[j], perfc_info[i].name, j);
|
||||
printk("%10d 0x%08x %s[ARR %02d]\n",
|
||||
atomic_read(&counters[j]), atomic_read(&counters[j]),
|
||||
perfc_info[i].name, j);
|
||||
counters += j;
|
||||
break;
|
||||
}
|
||||
|
||||
+17
-15
@@ -2,6 +2,8 @@
|
||||
* xen performance counters
|
||||
*/
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* NOTE: new counters must be defined in perfc_defn.h
|
||||
*
|
||||
@@ -25,11 +27,11 @@
|
||||
*/
|
||||
|
||||
#define PERFCOUNTER( var, name ) \
|
||||
unsigned long var[1];
|
||||
atomic_t var[1];
|
||||
#define PERFCOUNTER_CPU( var, name ) \
|
||||
unsigned long var[NR_CPUS];
|
||||
atomic_t var[NR_CPUS];
|
||||
#define PERFCOUNTER_ARRAY( var, name, size ) \
|
||||
unsigned long var[size];
|
||||
atomic_t var[size];
|
||||
|
||||
struct perfcounter_t
|
||||
{
|
||||
@@ -38,16 +40,16 @@ struct perfcounter_t
|
||||
|
||||
extern struct perfcounter_t perfcounters;
|
||||
|
||||
#define perfc_value(x) perfcounters.x[0]
|
||||
#define perfc_valuec(x) perfcounters.x[smp_processor_id()]
|
||||
#define perfc_valuea(x,y) perfcounters.x[y]
|
||||
#define perfc_set(x,v) perfcounters.x[0] = v
|
||||
#define perfc_setc(x,v) perfcounters.x[smp_processor_id()] = v
|
||||
#define perfc_seta(x,y,v) perfcounters.x[y] = v
|
||||
#define perfc_incr(x) perfcounters.x[0]++
|
||||
#define perfc_incrc(x) perfcounters.x[smp_processor_id()]++
|
||||
#define perfc_incra(x,y) perfcounters.x[y]++
|
||||
#define perfc_add(x,y) perfcounters.x[0]+=(y)
|
||||
#define perfc_addc(x,y) perfcounters.x[smp_processor_id()]+=(y)
|
||||
#define perfc_adda(x,y,z) perfcounters.x[y]+=(z)
|
||||
#define perfc_value(x) atomic_read(&perfcounters.x[0])
|
||||
#define perfc_valuec(x) atomic_read(&perfcounters.x[smp_processor_id()])
|
||||
#define perfc_valuea(x,y) atomic_read(&perfcounters.x[y])
|
||||
#define perfc_set(x,v) atomic_set(&perfcounters.x[0], v)
|
||||
#define perfc_setc(x,v) atomic_set(&perfcounters.x[smp_processor_id()], v)
|
||||
#define perfc_seta(x,y,v) atomic_set(&perfcounters.x[y], v)
|
||||
#define perfc_incr(x) atomic_inc(&perfcounters.x[0])
|
||||
#define perfc_incrc(x) atomic_inc(&perfcounters.x[smp_processor_id()])
|
||||
#define perfc_incra(x,y) atomic_inc(&perfcounters.x[y])
|
||||
#define perfc_add(x,y) atomic_add((y), &perfcounters.x[0])
|
||||
#define perfc_addc(x,y) atomic_add((y), &perfcounters.x[smp_processor_id()])
|
||||
#define perfc_adda(x,y,z) atomic_add((z), &perfcounters.x[y])
|
||||
|
||||
@@ -9,3 +9,6 @@ PERFCOUNTER_CPU( sched_run1, "sched: calls to schedule" )
|
||||
PERFCOUNTER_CPU( sched_run2, "sched: runs through scheduler" )
|
||||
PERFCOUNTER_CPU( sched_ctx, "sched: context switches" )
|
||||
|
||||
PERFCOUNTER( net_rx_capacity_drop, "net rx capacity drop" )
|
||||
PERFCOUNTER( net_rx_delivered, "net rx delivered" )
|
||||
PERFCOUNTER( net_rx_tlbflush, "net rx tlb flushes" )
|
||||
+10
-2
@@ -32,6 +32,8 @@
|
||||
#include <asm/domain_page.h>
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
#include <xeno/perfc.h>
|
||||
|
||||
#define BUG_TRAP ASSERT
|
||||
#define notifier_call_chain(_a,_b,_c) ((void)0)
|
||||
#define rtmsg_ifinfo(_a,_b,_c) ((void)0)
|
||||
@@ -514,6 +516,7 @@ void deliver_packet(struct sk_buff *skb, net_vif_t *vif)
|
||||
if ( (i = vif->rx_cons) == vif->rx_prod )
|
||||
{
|
||||
spin_unlock(&vif->domain->page_lock);
|
||||
perfc_incr(net_rx_capacity_drop);
|
||||
return;
|
||||
}
|
||||
rx = vif->rx_shadow_ring + i;
|
||||
@@ -570,14 +573,19 @@ void deliver_packet(struct sk_buff *skb, net_vif_t *vif)
|
||||
*/
|
||||
if ( rx->flush_count == (unsigned short)
|
||||
atomic_read(&tlb_flush_count[vif->domain->processor]) )
|
||||
{
|
||||
perfc_incr(net_rx_tlbflush);
|
||||
flush_tlb_cpu(vif->domain->processor);
|
||||
}
|
||||
|
||||
out:
|
||||
make_rx_response(vif, rx->id, size, status, offset);
|
||||
perfc_incr(net_rx_delivered);
|
||||
|
||||
/* record this so they can be billed */
|
||||
vif->total_packets_received++;
|
||||
vif->total_bytes_received += size;
|
||||
|
||||
out:
|
||||
make_rx_response(vif, rx->id, size, status, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||