Re: [PATCH net-next 2/3] tcp: implement coalescing on backlog queue
Thread information
[Search the netdev archive]
richard.purdie [this message] ` Bruno Prémont ` Eric Dumazet ` Bruno Prémont ` Bruno Prémont ` Eric Dumazet ` Bruno Prémont -- strict thread matches above, loose matches on Subject: below -- [PATCH net-next 0/3] tcp: take a bit more care of backlog stress Eric Dumazet ` [PATCH net-next 2/3] tcp: implement coalescing on backlog queue Eric Dumazet ` Yuchung Cheng ` Eric Dumazet ` Yuchung Cheng ` Neal Cardwell ` Eric Dumazet ` Eric Dumazet
From: | richard.purdie-AT-linuxfoundation.org | |
To: | Eric Dumazet <edumazet-AT-google.com> | |
Subject: | Re: [PATCH net-next 2/3] tcp: implement coalescing on backlog queue | |
Date: | Sun, 07 Apr 2019 22:28:30 +0100 | |
Message-ID: | <85aabf9d4f41b6c57629e736993233f80a037e59.camel@linuxfoundation.org> | |
Cc: | Neal Cardwell <ncardwell-AT-google.com>, Yuchung Cheng <ycheng-AT-google.com>, "David S. Miller" <davem-AT-davemloft.net>, netdev-AT-vger.kernel.org, Alexander Kanavin <alex.kanavin-AT-gmail.com>, Bruce Ashfield <bruce.ashfield-AT-gmail.com> |
Hi, I've been chasing down why a python test from the python3 testsuite started failing and it seems to point to this kernel change in the networking stack. In kernels beyond commit 4f693b55c3d2d2239b8a0094b518a1e533cf75d5 the test hangs about 90% of the time (I've reproduced with 5.1-rc3, 5.0.7, 5.0-rc1 but not 4.18, 4.19 or 4.20). The reproducer is: $ python3 -m test test_httplib -v == CPython 3.7.2 (default, Apr 5 2019, 15:17:15) [GCC 8.3.0] == Linux-5.0.0-yocto-standard-x86_64-with-glibc2.2.5 little-endian == cwd: /var/volatile/tmp/test_python_288 == CPU count: 1 == encodings: locale=UTF-8, FS=utf-8 [...] test_response_fileno (test.test_httplib.BasicTest) ... and it hangs in test_response_fileno. The test in question comes from Lib/test/test_httplib.py in the python source tree and the code is: def test_response_fileno(self): # Make sure fd returned by fileno is valid. serv = socket.socket( socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) self.addCleanup(serv.close) serv.bind((HOST, 0)) serv.listen() result = None def run_server(): [conn, address] = serv.accept() with conn, conn.makefile("rb") as reader: # Read the request header until a blank line while True: line = reader.readline() if not line.rstrip(b"\r\n"): break conn.sendall(b"HTTP/1.1 200 Connection established\r\n\r\n") nonlocal result result = reader.read() thread = threading.Thread(target=run_server) thread.start() self.addCleanup(thread.join, float(1)) conn = client.HTTPConnection(*serv.getsockname()) conn.request("CONNECT", "dummy:1234") response = conn.getresponse() try: self.assertEqual(response.status, client.OK) s = socket.socket(fileno=response.fileno()) try: s.sendall(b"proxied data\n") finally: s.detach() finally: response.close() conn.close() thread.join() self.assertEqual(result, b"proxied data\n") I was hoping someone with more understanding of the networking stack could look at this and tell whether its a bug in the python test, the kernel change or otherwise give a pointer to where the problem might be? I'll freely admit this is not an area I know much about. Cheers, Richard