Currently, pktgen will create one thread for each online CPU in the system. That behaivor may be annoying if you're using pktgen in a large SMP system.
This patch adds a new module parameter called 'pg_max_threads', which can be set to the maximum number of threads pktgen should create. For example, if you're playing with pktgen in SMP system with 8 CPUs, but want only two pktgen's threads, you can do: modprobe pktgen pg_max_threads=2 Signed-off-by: Luiz Capitulino <[EMAIL PROTECTED]> --- net/core/pktgen.c | 23 +++++++++++++++++------ 1 files changed, 17 insertions(+), 6 deletions(-) e210ad47d0db52496fdaabdd50bfe6ee0bcc53cd diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 37b25a6..994aef1 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -154,7 +154,7 @@ #include <asm/div64.h> /* do_div */ #include <asm/timex.h> -#define VERSION "pktgen v2.66: Packet Generator for packet performance testing.\n" +#define VERSION "pktgen v2.67: Packet Generator for packet performance testing.\n" /* #define PG_DEBUG(a) a */ #define PG_DEBUG(a) @@ -488,6 +488,7 @@ static unsigned int fmt_ip6(char *s, con static int pg_count_d = 1000; /* 1000 pkts by default */ static int pg_delay_d; static int pg_clone_skb_d; +static int pg_max_threads; static int debug; static DEFINE_MUTEX(pktgen_thread_lock); @@ -3184,7 +3185,7 @@ static int pktgen_remove_device(struct p static int __init pg_init(void) { - int cpu; + int i, threads; struct proc_dir_entry *pe; printk(version); @@ -3208,15 +3209,24 @@ static int __init pg_init(void) /* Register us to receive netdevice events */ register_netdevice_notifier(&pktgen_notifier_block); - for_each_online_cpu(cpu) { + threads = num_online_cpus(); + + /* + * Check if we should have less threads than the number + * of online CPUs + */ + if ((pg_max_threads > 0) && (pg_max_threads < threads)) + threads = pg_max_threads; + + for (i = 0; i < threads; i++) { int err; char buf[30]; - sprintf(buf, "kpktgend_%i", cpu); - err = pktgen_create_thread(buf, cpu); + sprintf(buf, "kpktgend_%i", i); + err = pktgen_create_thread(buf, i); if (err) printk("pktgen: WARNING: Cannot create thread for cpu %d (%d)\n", - cpu, err); + i, err); } if (list_empty(&pktgen_threads)) { @@ -3263,4 +3273,5 @@ MODULE_LICENSE("GPL"); module_param(pg_count_d, int, 0); module_param(pg_delay_d, int, 0); module_param(pg_clone_skb_d, int, 0); +module_param(pg_max_threads, int, 0); module_param(debug, int, 0); -- 1.2.4.gbe76 -- Luiz Fernando N. Capitulino - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html