lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Mon, 11 Apr 2011 13:42:15 +0200
From:	Indrek Peri <Indrek.Peri@...csson.com>
To:	<alexey.orishko@...ricsson.com>,
	"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: NCM driver improvments

Hi all

I have some ideas what could improve NCM driver. This is just for
open discussion. 

* Timer

Current NCM driver introduces timer for sending collected packets.
Driver keeps track of actual point of sending with member tx_timer_pending
which is a counter. This counter is decreased in timeout function and
timer is restarted if counter is bigger than 0. So, currently timeouts
are static.

One idea would be to reduce of amount of timeouts in system to replace
tx_timer_pending counter with varing timer divider. For example, divider
can be from 100 to 1000 (in scales).

 ctx->tx_timer.expires = jiffies + ((HZ + 999) / tmr_divider);

Scale can be calculated form packets and their data sizes collected.
For example, if there is only one TCP download session then TX collects
many small ACKs into buffer. In this case, for example, tmr_divider is 
100 and when timer expires packets will be send out. This avoids system
timeouts.

Another idea is to try to remove timer at all if traffic is low. Every
packet will be send over in one NCM frame. This reduces RTT time for
packet.


* Locks in timeout
        
        spin_lock(&ctx->mtx);
        if (ctx->tx_timer_pending != 0) {
                ctx->tx_timer_pending--;
                restart = 1;
        } else {
                restart = 0;
        }
        spin_unlock(&ctx->mtx);

        if (restart) {
                spin_lock(&ctx->mtx);
                cdc_ncm_tx_timeout_start(ctx);
                spin_unlock(&ctx->mtx);
        } else if (ctx->netdev != NULL) {
                usbnet_start_xmit(NULL, ctx->netdev);
        }

Timer divider would reduce locking because cdc_ncm_fill_tx_frame
function keeps the lock until to the end of function.
Timeout would mean then call to send.

* reset_resume

In cdc_ncm_driver struct is function:

        .reset_resume = usbnet_resume,

I think that this is good to add.

* usbnet_tx_timeout

I have seen slow path warnings in kernel and call to usbnet_tx_timeout 
with NCM driver. There is FIXME in usbnet and may be there is a need for 
reset function inside NCM because NCM driver collects data? 

BR, Indrek Peri
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ