Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1673384 > unrolled thread
| Started by | Michal Hocko <mhocko@kernel.org> |
|---|---|
| First post | 2017-06-23 11:00 +0200 |
| Last post | 2017-06-28 06:20 +0200 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL Michal Hocko <mhocko@kernel.org> - 2017-06-23 11:00 +0200
Re: [PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL Michal Hocko <mhocko@kernel.org> - 2017-06-27 11:00 +0200
Re: [PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL Christoph Hellwig <hch@infradead.org> - 2017-06-27 15:50 +0200
Re: [PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL Michal Hocko <mhocko@kernel.org> - 2017-06-27 16:10 +0200
Re: [PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL "Darrick J. Wong" <darrick.wong@oracle.com> - 2017-06-28 06:20 +0200
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-06-23 11:00 +0200 |
| Subject | [PATCH 3/6] xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL |
| Message-ID | <tVsBz-8nM-1@gated-at.bofh.it> |
From: Michal Hocko <mhocko@suse.com> KM_MAYFAIL didn't have any suitable GFP_FOO counterpart until recently so it relied on the default page allocator behavior for the given set of flags. This means that small allocations actually never failed. Now that we have __GFP_RETRY_MAYFAIL flag which works independently on the allocation request size we can map KM_MAYFAIL to it. The allocator will try as hard as it can to fulfill the request but fails eventually if the progress cannot be made. It does so without triggering the OOM killer which can be seen as an improvement because KM_MAYFAIL users should be able to deal with allocation failures. Cc: Darrick J. Wong <darrick.wong@oracle.com> Cc: Christoph Hellwig <hch@infradead.org> Signed-off-by: Michal Hocko <mhocko@suse.com> --- fs/xfs/kmem.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h index d6ea520162b2..4d85992d75b2 100644 --- a/fs/xfs/kmem.h +++ b/fs/xfs/kmem.h @@ -54,6 +54,16 @@ kmem_flags_convert(xfs_km_flags_t flags) lflags &= ~__GFP_FS; } + /* + * Default page/slab allocator behavior is to retry for ever + * for small allocations. We can override this behavior by using + * __GFP_RETRY_MAYFAIL which will tell the allocator to retry as long + * as it is feasible but rather fail than retry forever for all + * request sizes. + */ + if (flags & KM_MAYFAIL) + lflags |= __GFP_RETRY_MAYFAIL; + if (flags & KM_ZERO) lflags |= __GFP_ZERO; -- 2.11.0
[toc] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-06-27 11:00 +0200 |
| Message-ID | <tWUvM-6uH-7@gated-at.bofh.it> |
| In reply to | #1673384 |
Christoph, Darrick could you have a look at this patch please? Andrew has put it into mmotm but I definitely do not want it passes your attention. On Fri 23-06-17 10:53:42, Michal Hocko wrote: > From: Michal Hocko <mhocko@suse.com> > > KM_MAYFAIL didn't have any suitable GFP_FOO counterpart until recently > so it relied on the default page allocator behavior for the given set > of flags. This means that small allocations actually never failed. > > Now that we have __GFP_RETRY_MAYFAIL flag which works independently on the > allocation request size we can map KM_MAYFAIL to it. The allocator will > try as hard as it can to fulfill the request but fails eventually if > the progress cannot be made. It does so without triggering the OOM > killer which can be seen as an improvement because KM_MAYFAIL users > should be able to deal with allocation failures. > > Cc: Darrick J. Wong <darrick.wong@oracle.com> > Cc: Christoph Hellwig <hch@infradead.org> > Signed-off-by: Michal Hocko <mhocko@suse.com> > --- > fs/xfs/kmem.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h > index d6ea520162b2..4d85992d75b2 100644 > --- a/fs/xfs/kmem.h > +++ b/fs/xfs/kmem.h > @@ -54,6 +54,16 @@ kmem_flags_convert(xfs_km_flags_t flags) > lflags &= ~__GFP_FS; > } > > + /* > + * Default page/slab allocator behavior is to retry for ever > + * for small allocations. We can override this behavior by using > + * __GFP_RETRY_MAYFAIL which will tell the allocator to retry as long > + * as it is feasible but rather fail than retry forever for all > + * request sizes. > + */ > + if (flags & KM_MAYFAIL) > + lflags |= __GFP_RETRY_MAYFAIL; > + > if (flags & KM_ZERO) > lflags |= __GFP_ZERO; > > -- > 2.11.0 > -- Michal Hocko SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Christoph Hellwig <hch@infradead.org> |
|---|---|
| Date | 2017-06-27 15:50 +0200 |
| Message-ID | <tWZ2q-1ch-3@gated-at.bofh.it> |
| In reply to | #1675425 |
On Tue, Jun 27, 2017 at 10:49:50AM +0200, Michal Hocko wrote: > Christoph, Darrick > could you have a look at this patch please? Andrew has put it into mmotm > but I definitely do not want it passes your attention. I don't think what we have to gain from it. Callsite for KM_MAYFAIL should handler failures, but the current behavior seems to be doing fine too.
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-06-27 16:10 +0200 |
| Message-ID | <tWZlM-1Bo-21@gated-at.bofh.it> |
| In reply to | #1675710 |
On Tue 27-06-17 06:47:51, Christoph Hellwig wrote: > On Tue, Jun 27, 2017 at 10:49:50AM +0200, Michal Hocko wrote: > > Christoph, Darrick > > could you have a look at this patch please? Andrew has put it into mmotm > > but I definitely do not want it passes your attention. > > I don't think what we have to gain from it. Callsite for KM_MAYFAIL > should handler failures, but the current behavior seems to be doing fine > too. Last time I've asked I didnd't get any reply so let me ask again. Some of those allocations seem to be small (e.g. by a random look xlog_cil_init allocates struct xfs_cil which is 576B and struct xfs_cil_ctx 176B). Those do not fail currently under most conditions and it will retry allocation with the OOM killer if there is no progress. As you know that failing those is acceptable, wouldn't it be better to simply fail them and do not disrupt the system with the oom killer? -- Michal Hocko SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | "Darrick J. Wong" <darrick.wong@oracle.com> |
|---|---|
| Date | 2017-06-28 06:20 +0200 |
| Message-ID | <tXcCl-1Yd-11@gated-at.bofh.it> |
| In reply to | #1675733 |
[add linux-xfs to cc] FYI this is a discussion of the patch "xfs: map KM_MAYFAIL to __GFP_RETRY_MAYFAIL" which was last discussed on the xfs list in March and now is in the -mm tree... https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?h=next-20170627&id=43182d82c48fae80d31a9101b6bb06d75cee32c7 On Tue, Jun 27, 2017 at 04:06:54PM +0200, Michal Hocko wrote: > On Tue 27-06-17 06:47:51, Christoph Hellwig wrote: > > On Tue, Jun 27, 2017 at 10:49:50AM +0200, Michal Hocko wrote: > > > Christoph, Darrick > > > could you have a look at this patch please? Andrew has put it into mmotm > > > but I definitely do not want it passes your attention. > > > > I don't think what we have to gain from it. Callsite for KM_MAYFAIL > > should handler failures, but the current behavior seems to be doing fine > > too. > > Last time I've asked I didnd't get any reply so let me ask again. Some > of those allocations seem to be small (e.g. by a random look > xlog_cil_init allocates struct xfs_cil which is 576B and struct > xfs_cil_ctx 176B). Those do not fail currently under most conditions and > it will retry allocation with the OOM killer if there is no progress. As > you know that failing those is acceptable, wouldn't it be better to > simply fail them and do not disrupt the system with the oom killer? I remember the first time I saw this patch, and didn't have much of an opinion either way -- the current behavior is fine, so why mess around? I'd just as soon XFS not have to deal with errors if it doesn't have to. :) But, you've asked again, so I'll be less glib this time. I took a quick glance at all the MAYFAIL users in XFS. /Nearly/ all them seem to be cases either where we're mounting a filesystem or are collecting memory for some ioctl -- in either case it's not hard to just fail back out to userspace. The upcoming online fsck patches use it heavily, which is fine since we can always fail out to userspace and tell the admin to go run xfs_repair offline. The one user that caught my eye was xfs_iflush_cluster, which seems to want an array of pointers to a cluster's worth of struct xfs_inodes. On a 64k block fs with 256 byte pointers I guess that could be ~2k worth of pointers, but otoh it looks like that's an optimization: If we're going to flush an inode out to disk we opportunistically scan the inode tree to see if the adjacent inodes are also ready to flush; if we can't get the memory for this, then it just backs off to flushing the one inode. All the callers of MAYFAIL that I found actually /do/ check the return value and start bailing out... so, uh, I guess I'm fine with it. At worst it's easily reverted during -rc if it causes problems. Anyone have a stronger objection? Acked-by: Darrick J. Wong <darrick.wong@oracle.com> --D > -- > Michal Hocko > SUSE Labs
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web