Currently in tc batch mode, only one command is read from the batch file and sent to kernel to process. With this patchset, at most 128 commands can be accumulated before sending to kernel.
We introduced two new functions in patch 1 to support for sending multiple messages. In patch 2, we add this support for filter and actions add/delete/change/replace commands. But please note that kernel still processes the requests one by one. To process the requests in parallel in kernel is another effort. The time we're saving in this patchset is the user mode and kernel mode context switch. So this patchset works on top of the current kernel. Using the following script in kernel, we can generate 1,000,000 rules. tools/testing/selftests/tc-testing/tdc_batch.py Without this patchset, 'tc -b $file' exection time is: real 0m15.555s user 0m7.211s sys 0m8.284s With this patchset, 'tc -b $file' exection time is: real 0m13.562s user 0m6.463s sys 0m7.031s The insertion rate is improved more than 10%. v3 == 1. Instead of hacking function rtnl_talk directly, add a new function rtnl_talk_msg. 2. remove most of global variables to use parameter passing 3. divide the previous patch into 4 patches. v4 == 1. Remove function setcmdlinetotal. Now in function batch, we read one more line to determine if we are reaching the end of file. 2. Remove function __rtnl_check_ack. Now __rtnl_talk calls __rtnl_talk_msg directly. 3. if (batch_size < 1) batch_size = 1; v5 == 1. Fix a bug that can't deal with batch file with blank line. 2. Describe the limitation in man page. v6 == 1. Add support for mixed commands. 2. Fix a bug that not all messages are acked if batch size > 1. v7 == 1. We can tell exactly which command fails. 2. Add a new function rtnl_talk_iov 3. Allocate the memory in function batch() instead of each client. 4. Remove option -bs. Chris Mi (2): lib/libnetlink: Add functions rtnl_talk_msg and rtnl_talk_iov tc: Add batchsize feature to batch mode include/libnetlink.h | 6 +++ lib/libnetlink.c | 84 ++++++++++++++++++++++++++-------- tc/m_action.c | 60 +++++++++++++++--------- tc/tc.c | 127 +++++++++++++++++++++++++++++++++++++++++++++------ tc/tc_common.h | 5 +- tc/tc_filter.c | 97 +++++++++++++++++++++++---------------- 6 files changed, 281 insertions(+), 98 deletions(-) -- 2.14.3