8378a11d11
The contextmanager eventlet.timeout.Timeout is scheduling a call to throw an exception every time is is entered. The swift-proxy uses Chunk(Read|Write)Timeout for every chunk read/written from the client or object-server. For a single upload/download of a big object, it means tens of thousands of scheduling in eventlet, which is very costly. This patch replace the usage of these context managers by a watchdog greenthread that will schedule itself by sleeping until the next timeout expiration. Then, only if a timeout expired, it will schedule a call to throw the appropriate exception. The gain on bandwidth and CPU usage is significant. On a benchmark environment, it gave this result for an upload of 6 Gbpson a replica policy (average of 3 runs): master: 5.66 Gbps / 849 jiffies consumed by the proxy-server this patch: 7.56 Gbps / 618 jiffies consumed by the proxy-server Change-Id: I19fd42908be5a6ac5905ba193967cd860cb27a0b