pktgen: NUMA aware
Subsystems (2)
PATCH 1/1 pktgen: NUMA aware
Now my Nehalem dev machine is truly NUMA, time for new patches :)
David, this applies on last pktgen version (after last patches you added in net-2.6).
Thanks
[PATCH net-next-2.6] pktgen: NUMA aware
pktgen threads are bound to given CPU, we can allocate memory for these threads in a NUMA aware way.
After a pktgen session on two threads, we can check flows memory was allocated on right node, instead of a not related one.
# grep pktgen_thread_write /proc/vmallocinfo 0xffffc90007204000-0xffffc90007385000 1576960 pktgen_thread_write+0x3a4/0x6b0 [pktgen] pages=384 vmalloc N0=384 0xffffc90007386000-0xffffc90007507000 1576960 pktgen_thread_write+0x3a4/0x6b0 [pktgen] pages=384 vmalloc N1=384
--- net/core/pktgen.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
net/core/pktgen.c +6 -3
@@ -3622,6 +3622,7 @@ static int pktgen_add_device(struct pktgen_thread *t, const char *ifname) {struct pktgen_dev *pkt_dev;int err; +int node =cpu_to_node (t->cpu);/* We don't allow a device to be on several threads */
@@ -3631,12 +3632,13 @@ static int pktgen_add_device(struct pktgen_thread *t, const char *ifname)return -EBUSY ; } - pkt_dev =kzalloc (sizeof (struct pktgen_dev ),GFP_KERNEL ); + pkt_dev =kzalloc_node (sizeof (struct pktgen_dev ),GFP_KERNEL , node);if (!pkt_dev)return -ENOMEM ;strcpy (pkt_dev->odevname, ifname); - pkt_dev->flows =vmalloc (MAX_CFLOWS *sizeof (struct flow_state )); + pkt_dev->flows =vmalloc_node (MAX_CFLOWS *sizeof (struct flow_state ), + node);if (pkt_dev->flows ==NULL ) {kfree (pkt_dev);return -ENOMEM ;
@@ -3698,7 +3700,8 @@ static int __init pktgen_create_thread(int cpu)struct proc_dir_entry *pe;struct task_struct *p; - t =kzalloc (sizeof (struct pktgen_thread ),GFP_KERNEL ); + t =kzalloc_node (sizeof (struct pktgen_thread ),GFP_KERNEL , +cpu_to_node (cpu));if (!t) {printk (KERN_ERR "pktgen: ERROR: out of memory, can't " "create new thread.\n" );
From: Eric Dumazet <[email protected]>
Date: Wed, 25 Nov 2009 16:01:02 +0100
Quoted 5 lines
[PATCH net-next-2.6] pktgen: NUMA aware
pktgen threads are bound to given CPU, we can allocate memory for these threads in a NUMA aware way.
Quoted 8 lines
After a pktgen session on two threads, we can check flows memory was allocated on right node, instead of a not related one.
# grep pktgen_thread_write /proc/vmallocinfo 0xffffc90007204000-0xffffc90007385000 1576960 pktgen_thread_write+0x3a4/0x6b0 [pktgen] pages=384 vmalloc N0=384 0xffffc90007386000-0xffffc90007507000 1576960 pktgen_thread_write+0x3a4/0x6b0 [pktgen] pages=384 vmalloc N1=384Signed-off-by Eric Dumazet <[email protected]>
Applied, thanks Eric.