Changeset 162


Ignore:
Timestamp:
06/16/12 20:00:37 (12 years ago)
Author:
atzm
Message:
  • improve performance
Location:
etherws/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • etherws/trunk/README.rst

    r160 r162  
    4646  # ifconfig br0 up 
    4747 
    48 If connection through the tunnel is unstable, then you may fix it 
    49 by changing VM's MTU to under 1500, e.g.:: 
     48Additionally, you may improve performance by increasing MTU. 
     49For example, 
    5050 
    51   # ifconfig eth0 mtu 1400 
     51on each hypervisor:: 
     52 
     53 # ifconfig vnet0 mtu 16436 
     54 # ifconfig ethws0 mtu 16436 
     55 
     56on each VM:: 
     57 
     58 # ifconfig eth0 mtu 16436 
    5259 
    5360Using SSL/TLS 
     
    124131History 
    125132======= 
     1330.6 (2012-06-16 JST) 
     134  - improve performance 
     135 
    1261360.5 (2012-05-20 JST) 
    127137  - added passwd option to client mode 
  • etherws/trunk/etherws.py

    r160 r162  
    6767 
    6868class TapHandler(DebugMixIn): 
     69    READ_SIZE = 65535 
     70 
    6971    def __init__(self, dev, debug=False): 
    7072        self._debug = debug 
     
    7274        self._tap = pytun.TunTapDevice(dev, pytun.IFF_TAP | pytun.IFF_NO_PI) 
    7375        self._tap.up() 
    74         self._glock = threading.Lock() 
     76        self._taplock = threading.Lock() 
    7577 
    7678    def fileno(self): 
    77         with self._glock: 
     79        with self._taplock: 
    7880            return self._tap.fileno() 
    7981 
    8082    def register_client(self, client): 
    81         with self._glock: 
    82             self._clients.append(client) 
     83        self._clients.append(client) 
    8384 
    8485    def unregister_client(self, client): 
    85         with self._glock: 
    86             self._clients.remove(client) 
     86        self._clients.remove(client) 
    8787 
    8888    def write(self, caller, message): 
    89         with self._glock: 
    90             clients = self._clients[:] 
    91  
    92             if caller is not self: 
    93                 clients.remove(caller) 
     89        clients = self._clients[:] 
     90 
     91        if caller is not self: 
     92            clients.remove(caller) 
     93 
     94            with self._taplock: 
    9495                self._tap.write(message) 
    9596 
    96             for c in clients: 
    97                 c.write_message(message, True) 
     97        for c in clients: 
     98            c.write_message(message, True) 
    9899 
    99100    def __call__(self, fd, events): 
    100         with self._glock: 
    101             data = self._tap.read(self._tap.mtu) 
    102         self.write(self, data) 
     101        buf = [] 
     102 
     103        while True: 
     104            with self._taplock: 
     105                data = self._tap.read(self.READ_SIZE) 
     106 
     107            if data: 
     108                buf.append(data) 
     109 
     110            if len(data) < self.READ_SIZE: 
     111                break 
     112 
     113        self.write(self, ''.join(buf)) 
    103114 
    104115 
  • etherws/trunk/setup.py

    r160 r162  
    3737setup( 
    3838    name='etherws', 
    39     version='0.5', 
     39    version='0.6', 
    4040    description='Ethernet over WebSocket tunneling server/client', 
    4141    long_description=longdesc, 
Note: See TracChangeset for help on using the changeset viewer.