How to send multiple TCP packets from a kernel thread ASAP?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
  I came to a situation that requires to send multiple TCP packets (one
for each connection) from a kernel thread as soon as possible. The
following is the skeleton of my code:

kernel_thread()
{
    foreach sk in (alive connections){
        tp = &(sk->tp_pinfo.af_tcp);

        skb = alloc_skb(xxx, GFP_ATOMIC);
        /* build TCP header */
        tcp_build_and_update_options(.....);
        tp->af_specific->send_check(sk, th, skb->len, skb);

        tp->af_specific->queue_xmit(skb);
        printk("packet send out for sk %p, at %lu\n", sk, jiffies);
    }
}

the output is always like this:
packet send out for sk 1 at 1000
packet send out for sk 2 at 1001
packet send out for sk 3 at 1002
...

It looks like this kernel thread get rescheduled after it has sent out 1
packet. But why? each iteration certainly does not need 10ms, why it get
rescheduled? Is it because af_specific->queue_xmit() is blocking
operation? but I notice that tcp_transmit_skb() also call it, and
tcp_transmit_skb() should not call any blockalbe operation. I try to
increase its priority or change its schedule policy,but has no effect
at all. Any suggestion is appreciated! This is really urgent.


Ronghua
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux