Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752222AbdFNJM3 (ORCPT ); Wed, 14 Jun 2017 05:12:29 -0400 Received: from mail-db5eur01on0121.outbound.protection.outlook.com ([104.47.2.121]:45128 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752170AbdFNJMS (ORCPT ); Wed, 14 Jun 2017 05:12:18 -0400 Authentication-Results: virtuozzo.com; dkim=none (message not signed) header.d=none;virtuozzo.com; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCH] aio: Add command to wait completion of all requests To: Benjamin LaHaise References: <149700173837.15252.8419518498235874341.stgit@localhost.localdomain> <20170613144248.GK7230@kvack.org> <4637a41e-b9af-a685-f4af-f3ca2a287a1e@virtuozzo.com> <20170613152601.GM7230@kvack.org> <02671cea-6518-d87b-61f8-8583cb1ffc90@virtuozzo.com> <20170613232645.GT7230@kvack.org> Cc: avagin@openvz.org, linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk, gorcunov@openvz.org, akpm@linux-foundation.org, xemul@virtuozzo.com From: Kirill Tkhai Message-ID: <8bc01429-0041-523f-8b36-d30c7b84408a@virtuozzo.com> Date: Wed, 14 Jun 2017 12:11:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170613232645.GT7230@kvack.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: SG2PR03CA0052.apcprd03.prod.outlook.com (2a01:111:e400:5bb6::20) To VI1PR0801MB1341.eurprd08.prod.outlook.com (2603:10a6:800:3a::27) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR0801MB1341: X-MS-Office365-Filtering-Correlation-Id: bcc4c6fc-2299-4650-7150-08d4b3056cb1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:VI1PR0801MB1341; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;3:2EcSVkxusQL8+KosSN1gm8CDKfYiZQfVk1WtLZnafIH+BcGaosWmuwKzuL5gEjL2USTFMhaplaizbXNzNX0qLx11xjh+EVQ1LzJIN28OC7mi++SHUCLEnUqgaMvgGQP28DYwsppKKSD8+8vOvQY8QGrqPV0NdIMJpk/yNETbb7sXLpKR+q0gkPdg0CxkgSZAq1VZSFxaMDLBDLP6so6eKQc3U/yxXXtsLvJgJQwdwR+yEvTyP7P/JgN52t+6VWp8hEv1mZ5UiPjjZklMINV/6LM2iC6W89XAE7BbYEYXHJjJpbLWTTKuU/VuRnVDsHf/P3ij8Npd596g8JI8hu1I8Q==;25:h/lyV1vzu5NUXVYu9ZnSCL+GhZdo8StBb0Ec+3pQKh3SdXqpGp2xdRjVXzCuX5cemX8VRidE0PQFBFDZrtAvDpLM+/M/UeH3kBYsh4uQd0N0QRq6dW7ytZwtomDZks6N6tFTlOP0ing9ETEu5TMXXzk4qSlUDBRSWzJ6D3wpv3veaSO4Eg6JM5cRt/Uk/r/52ajNLlMmWU9U94o+tSXZzit7PV8o4sr5IBuaaVjWtkjVmeV8UYJ8b8L6bUCOmFmjnwxpUv8ov+8wG5WsLTWG4zWrZ7ode6DRN6EGnA3x2W9L/faTbHLhQ+ii5lpz+cjDPfp1aKj4GG5rXjPuH6dXDMBFh2Km9aCHDA27kSNkYMy/IGiho1vZye4ljTVX3thj/mCvz0Lv9s/ZzQvLj8bYBIeAawqyksyoqqnlFAH7UHXJiYjjvAjbSUL+k4aZDePC2ySc7KdMgXHf41/Bg7dcnQqNuUs5r/qCYgvGneBNF+E= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;31:T1JOKRnGWjigs+Ug/9BpTLmcnpX23b5MqfMaq+bbRaL/a9su+WBO74HqVE7yyE0Comdncicfz8/zORqcxg5mKQNC6e0DktAOV0Gss0guUjSCsmCQY+abGT5TzrmHslgElr6usOPrLoHEuy8KxQjfhJpmjY/CTuMxj78T4dkW0xYXFsHeKp+mNLg+DI39OOYXVb/bU1plOMNX3znUlkvPzLXTOk0r1mSGaOPP3cqTMvI=;20:itQIrlvyyvtbO3AT/Z4//hp0T7z280/+gDzggXk9xtFTiHEE+43m23SyiMONa0p4xBNGqLfTh0PvQdB48nZwbHi2HtV2nV84+RfiZSQoCqtgAHagc4eSCf0dpFUT6ZJLtlrnI8nVHMN0qBqUdyfe2B5CpmzMyohBvsr7actmfEajgtI+fnPSlcghMWTGFkv4BlN5TsGW1lh1a/RX5hG5hsv50lUKzcJqm/X8cPGZ+DL09KsVXVO0v7C3oA8tdnvXLHgE0LII/+DNG8PUr0VM7oFBmT9q2ud3C3jE5/UsNZj+IM8kLQmmxu6NakvlUbe4ljWhlNRVzHM42nBQZcW0/qMGUxmJCEKJHodshqFqloR2yd5+e+XrEUBSRrYFuyKYREy3DHWVE3RYvA185y+3P7QY0HfYmOsmv3NEHo6gi/w= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123555025)(20161123560025)(20161123564025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0801MB1341;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0801MB1341; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;VI1PR0801MB1341;4:aCfsHgO35eamJmJ9seMzBbR/cfdBxfbdG9tp?= =?Windows-1252?Q?zealTmbAQ0iVd/OQ1MaYaFa0I4XuwZeHz+Myn+eqII6J2uHQfSRiSnPc?= =?Windows-1252?Q?xL+Wc9yDo8lMB4OyeRBVMA617+pV33Pnk/Z+RVJWPfvQ/pVUpgSa0bIs?= =?Windows-1252?Q?4bptU56mICf8IcC1t/ygd3Hzl/piNrnLmGbXOiU10BghlDBPMML1jXBA?= =?Windows-1252?Q?RS/Q4TFBcfjCmdrp/jMDiXpbWLjJ7spCfLQdTQuxobcGCVX9+feeBqZL?= =?Windows-1252?Q?hTezdlvoYBuNRqzn6zVgmPTMiJgiSDow4YRBBAMC+UQM3Q/+0pGwALnv?= =?Windows-1252?Q?1uu9hU80ELvXCtrYqyTVQajG9NX4qo/9Yy1Dt0GymlHQF+SZ7kn4RbmJ?= =?Windows-1252?Q?OGO+8joPhT0/lIA6Xbumgc7GCALohqJjV5FDSKS5law5F0cAZyMzfp91?= =?Windows-1252?Q?ynUoII4q2KhmJ7r2sR9cOMh5dgoEMrDix/SgqkHdD50KQ4fFbgUi2QUe?= =?Windows-1252?Q?Rs9Y2inhQDGhMovKtgJU9DwxayXRHkzwrq4RZ08L7y8/BUdM6HTr/vli?= =?Windows-1252?Q?rCALEHTuVLeXeHfKQ5wr0+YBm4o7zQIyDSKktKr7KM81D/lutoavU9ZR?= =?Windows-1252?Q?h7P6nurUsmSPWCUXsAJW3klGysjp8L45s5OUgT9i9eTPZp6IGv2P2hBU?= =?Windows-1252?Q?Ru/oqixyQn49bIZG/giJG93FuaS2TTyMCJr04WylBGdgqksHrfzv3R4Z?= =?Windows-1252?Q?Od7Rc+7XrV3Fa3UTPBJuUgw3nviyKmuQD8Ta8g/zyeZia7Rl5R0wcRsv?= =?Windows-1252?Q?ISKOOY+Mra+/ClVWy9zW5owUemoQEvV1TVfo9TK+MzMoMNnhsXSmbcde?= =?Windows-1252?Q?BQuEvqc9dS+re9VC2++0Qsk6Qhzg0MAWVr3KjJMooSbjqBlzVN1Em53B?= =?Windows-1252?Q?b8yXRuc6hMdohzrYNjBDLywaBJMGvJxEODezV6izy4dXGHJO5up7YLdg?= =?Windows-1252?Q?zz6M+bGgUb+d/rVjs3Emas7xznt8pMoq/U1782yjCbLqsEUOrfq23QNA?= =?Windows-1252?Q?bFVeyy1kqobzQ0R204rahv3pIzPGTf12z/JucAIaj/iUo4Xtb8u/d4ax?= =?Windows-1252?Q?f/dGQhT7vxtXgA88OD46AuN4ujoEWXw0A1jEG9itSJVlDbKEBLfHVMNe?= =?Windows-1252?Q?HGY9PGxc09sWXqy1BxrPPMGUxP0KGsdBC77qvSdztrqXQ4RzPmeadm9U?= =?Windows-1252?Q?0iHFQH3qxbO+nSXH/MnkijmVZSFU3V9BvxKZwW8=3D?= X-Forefront-PRVS: 033857D0BD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39410400002)(39400400002)(39840400002)(39450400003)(24454002)(478600001)(47776003)(64126003)(6916009)(33646002)(6666003)(81166006)(66066001)(110136004)(65806001)(2950100002)(38730400002)(107886003)(65956001)(6246003)(54356999)(6116002)(76176999)(42186005)(31686004)(50986999)(8676002)(77096006)(6486002)(4326008)(25786009)(189998001)(53936002)(7736002)(53546009)(4001350100001)(65826007)(36756003)(305945005)(50466002)(31696002)(2906002)(83506001)(230700001)(23746002)(229853002)(86362001)(5660300001)(93886004);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1341;H:[172.16.24.149];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;VI1PR0801MB1341;23:Aud4Xcg/tq7e7Q6NLazjpACUgB2WibRVu+8?= =?Windows-1252?Q?ofNvSaCuyOuGhWE765nWTS1n9Y9JBaWVRLx9Df0g0IxU4yMV3EZkpwxA?= =?Windows-1252?Q?q0QqBiqsszv8ctQNvWbPTIVAG1fZQLwyLgLRwubKsV2DQd4hsBy5nWen?= =?Windows-1252?Q?hGtXXfn/xxqomsxoWpBkF3sLRA+e8qP4fesAbvoSDXT2JsatP6gcB8hL?= =?Windows-1252?Q?1c1XUd2GpttPrGxlzJjrCp+8NG6UOzEOz1G3y8OyW7MJF7XtegTk2kav?= =?Windows-1252?Q?wtcQ6lV5fjJc5a7dHFUgS1UKeQ/PCTlfC3eKu+B7S2tKCEmeyMVA9Jof?= =?Windows-1252?Q?UiGmE0OU6S6CwFfVbWyqBf53Pwh/s5MuuAbgB7iON26KIzHVH1D6jSqh?= =?Windows-1252?Q?xsGiHJD55Or66eiSw11s5eh22K+CSddi5txdaGDyTpFn2mPfn2jUT+As?= =?Windows-1252?Q?ZTgJWInDtNsUfNzGF0trGz86DTUpwEWNqzfcBf4E6g0RAVWbWgCHnOMV?= =?Windows-1252?Q?iG/YMtA0qhYtazUuOM/390TCuy+7JCJr1Y3UG1owaVoB+uohJMI1TRtk?= =?Windows-1252?Q?PdvZ7471ATl62QWYwhRpFLFLO+l+xKL6AgKvMKGRwF82dl6tYjSVNP7n?= =?Windows-1252?Q?+Oi+ZBYiDy1+jHOUhGOXRKfeZ1AYgHJ0zAkK3xJgn6JFCU1ythdhWL6D?= =?Windows-1252?Q?BPFLBWn5UqlCyWB/IeM2HD4RkiXofisCvA5X1lFVabjoVmAb44f4vYyv?= =?Windows-1252?Q?SCf08JvKHsByg80lknFZ5NbQdvyRWYyzPv8AhChhhEBqndkV7XwQyvKf?= =?Windows-1252?Q?8j/igbb4GjUzC44ByUD/o/aSafbJ08xOjXCDwc3xCapaDytllL60W6ip?= =?Windows-1252?Q?gdYdLTv3/XfXO2jv2xyrjxvjASOodRtiVu6HJyXWNChtuJI3sjppZWFQ?= =?Windows-1252?Q?fz1+YwcRWbo2Qr22QiS8LHS0XYZ6meslat0+Unkhh9NgBPDC6c0otXIL?= =?Windows-1252?Q?55ccgwANu83XOHKullGvdp/juraOrCpw/c5moNpsKpT5KbWimiEEhEJg?= =?Windows-1252?Q?rFqFJSUFy5qWQehjrhtsLrPOlvLM33jNEjeQSbxLDqrvfWg070yruYCQ?= =?Windows-1252?Q?OEetI83952w1D8ZIyd1zvcT2JW2Y+K/s5OT0xGa7/pO4DNgvPaRHP1Ju?= =?Windows-1252?Q?G2+dMDS2RsHoOaZBBNRfmhVrEZkSrxMB7qMzlczxz0PoJ2ez4TvyCwdg?= =?Windows-1252?Q?64dXY0iy/C4IWRS1PUO/3zx1AXzvrgrdD4y2MgN/4SFDNyWDB1Y8kWbj?= =?Windows-1252?Q?NtqCI+6Gxsj0mUYG5/BVDv2Lwm3a4iQ0SOpFxWjEGkX6kev6KRAGSQ6n?= =?Windows-1252?Q?LSpmlvdGW/uEzc550sb55jykmquq5tEOgsg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;6:zNnklMt/PM64+SNSRv0Lo/pKJcDDTRUOJni8PpYWAzqf4pMXO4dhrJFQaBYLuKgpGQkj7Ud/PT3g7xtreaVSx3GzEXFHRSLxxaNZK6gV4x/807H35UU7SaGvSfCFl6zKicB8t9GZYRMCS2W8oPjyJe8gq1uFatPR7hwQ/vv4deFR+uHMsQTcBYK9f51ASqGIgA33lMqIjvKnzqxQ+cBu0QTiSQAJIZJG/VZS1iIxtYCjE+maMAJemYL207VjG5IlCrnFBX4OILJlVz2XHdDapb/+vKrWILvw6LMDRAJ2VhMEdAZtrG/3Gqx7iCmNyON2n8/Kp0G1NNcgxAd/7LeZqYYTzhfUHt9rUzQZuiHoferHsu+KhdT3OJlg9oaD3TE1Pe80AIcxEWleMxUzUU6FNjNH5a6AdFOwyDnVqLGMykia2PXP82z3Dmcxvq+9bsZLe+Ni7Gpx34WbyM7iSwqXdyh0fUt8kXulIOTpodkuuEtr6l1shVirf7L2QqKknvkqNx1FPAUsFVPA1HW85+IqfQ== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;5:lSCS07+wLx34pvkHaWyCUyslj/IGKvYuoDiHzJoVaepQhzmOoRfen7ORRCh3lEt9k0sXBRHx9csXuTMGYarHoSE6FlKKYkr5/QkHkvFaT+IkOBjdsScB2G0cWJ8b4aO5XeJmXXud8XUXkVBzWDnPmNlXJPwCB/FsmaKC+RxjZfo4rrKO1TZkylfptNmX2bfy8morVbaswtEm8oiC3lowFJI2FRGIBvAaHZuJckgnVzwVcElDKxApS50yEXIh8rK5ckvWgkd6WJerCOW6QAIydE30pJVH9C4U6/jx/fRPjftMNMpxBDfqsbXEria6cOphrJ6AS0SolVCZuP0ILbvQ9VOvDMJbFCKTWKxYzTmujXLmpwFsBHv/VI1A0xJZg8mm8BndCWvCdt447FmKgYND3GtqJ6FVy6gUPF+AHDuLmXWanPCewaxZFBR+8ty2An9iUHzwPvfHimkgcuvYPxR7c7gXU3OigeIS+MVZhWCK3QxLE2k6fQcajhWydFq3kDCo;24:Ev9frpStTsQTO1mYoruKSek9GJyj/dUFbObSUnwEGsBYyX1DnMvNkFOExJRKgt3UOaW22Wxzfy93ajpNpEaa9uWMy9cW9DhVyMXIzBgRIBY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1341;7:QU0JnSoRsvYgsp0unZN/mTGLBQ4UdHxPyJ+WXRzso3slwr4tHzc2NIKMl/V1CrOweNYl1hLrNiH6YZJo0LiPFfWVuG0LIRrfC7pGEEzVAlvLvlC8OQ8RI++AMK3krk+uLb3LvglU5T/ZzR0oSjIQbmnNPhv1V4KXAIvHOgORL5BB6Nz5xZtYuaLLA6h5I+svyXB4vRVBd8jqbQdgHaG5wgEdT/Eiq4ugPSHCWoaN+wFWaCDIg66k3DyR28aZTjF9yzPJvSUrWpyEKmVfmkbIbWWZsQe11Dokakj/wQOPpPeaQv0smAaK7yKJZhUl3zDQWxOKaMP2Rmqhptp6hSB4Sg==;20:VrdJpHS8PZdNaldknohNRNdHXup3bW6tNgfxyfQwocC6Y/Vel82D2m3iTjlZ0inkzAaFBy1SRzC7Jm9OS79N6TtNk5kn8ASRiA4bVZn9i52R6KZpHpuoXPBmoMdF67ddzZfHyvBeaXgYqKLbXGAZFSUNAZPEU0pYagtS1pEjBz8= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jun 2017 09:12:00.4295 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1341 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3830 Lines: 76 On 14.06.2017 02:26, Benjamin LaHaise wrote: > On Tue, Jun 13, 2017 at 07:17:43PM +0300, Kirill Tkhai wrote: >> On 13.06.2017 18:26, Benjamin LaHaise wrote: >>> On Tue, Jun 13, 2017 at 06:11:03PM +0300, Kirill Tkhai wrote: >>> ... >>>> The functionality, I did, grew from real need and experience. We try to >>>> avoid kernel modification, where it's possible, but the in-flight aio >>>> requests is not a case suitable for that. >>> >>> What you've done only works for *your* use-case, but not in general. Like >>> in other subsystems, you need to provide hooks on a per file descriptor >>> basis for quiescing different kinds of file descriptors. >> >> Which hooks do you suggest? It's possible there is no a file descriptor open after >> a request is submitted. Do you suggest an interface to reopen a struct file? > > That's what you have to contend with. AIO keeps the struct file pinned > for the life of the request. This is one of the complex issues you need > to address. > >>> Your current >>> patch set completely ignores things like usb gadget. You need to create >>> infrastructure for restarting i/os after your checkpointing occurs, which >>> you haven't put any thought into in this patchset. If you want to discuss >>> how to do that, fine, but the approach in this patchset simply does not >>> work in general. What happens when an aio doesn't complete or takes hours >>> to complete? >> >> Here is wait_event_interruptible(), but it's possible to convert it >> in wait_event_interruptible_hrtimeout() like it's made in read_events(). >> It's not a deadly issue of patch. The function read_events() simply >> waits for timeout, can't we do the same? > > Nope. An aio may not complete in a timely fashion, in which case your > wait for all aios to complete will simply wait forever. I take it this is > not the desired behaviour of checkpointing. But read_events() does it. What the difference between them? >> Could you please describe how will cancelling aio requests will help to wait >> till their completion? Is there is guarantee, they will be easily queued back? >> I suppose, no, because there are may be a memory limit or some low level >> drivers limitations, dependent on internal conditions. > > This is the problem you're facing. Quiescing aios is complicated! It's too generic words and they may refer to anything. And it's a problem, which is not connected with small aio engine, because it's impossible to guarantee availability of kernel resources from there. Imagine, parallel task eats memory of your just cancelled request: then you just can't queue request back. This argument makes your suggestion not rock-stable suitable for all cases: it will break user applications in such situations. >> Also, it's not seems good to overload aio with the functionality of obtaining >> closed file descriptors of submitted requests. >> >> Do you mean this way, or I misunderstood you? Could you please to concretize your >> idea? > > Yes, this is what I'm talking about. > >> In my vision cancelling requests does not allow to implement the need I described. >> If we can't queue request back, it breaks snapshotting and user application in >> general. > > This is what you have to figure out. This is why your patch is incomplete > and cannot be accepted. You can't punt the complexity your feature > requires onto other maintainers -- your implementation has to be reasonably > complete at time of patch inclusion. Can you see now why your patch can't > be included as-is? The assumption you made that aios complete in a timely > fashion is incorrect. Everything else stems from that. I just can't see why read_events() just waits for requests completion not paying attention of the all above you said. Could you please clarify the difference between two these situations?