From: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
Davidlohr Bueso <dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>
Cc: Marcus Gelderie <redmnic-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
lkml <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
David Howells <dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Alexander Viro
<viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org>,
John Duffy <jb_duffy-FhtRXb7CoQBt1OO0OYaSVA@public.gmane.org>,
Arto Bendiken <arto-TQ6thHYR8Svk1uMJSBkQmQ@public.gmane.org>,
Linux API <linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
Subject: Re: [PATCH v3] ipc: Modify message queue accounting to not take kernel data structures into account
Date: Wed, 08 Jul 2015 15:17:52 -0400 [thread overview]
Message-ID: <559D7760.1020909@redhat.com> (raw)
In-Reply-To: <CAKgNAkjy-+2TkN=0Fe11bVea4q6uLcUx=++Mf1eFxhmPmZoc9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 4999 bytes --]
On 07/07/2015 09:01 AM, Michael Kerrisk (man-pages) wrote:
> Hi David,
>
> On 7 July 2015 at 07:16, Davidlohr Bueso <dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org> wrote:
>> On Mon, 2015-07-06 at 17:49 +0200, Marcus Gelderie wrote:
>>> A while back, the message queue implementation in the kernel was
>>> improved to use btrees to speed up retrieval of messages (commit
>>> d6629859b36). The patch introducing the improved kernel handling of
>>> message queues (using btrees) has, as a by-product, changed the
>>> meaning of the QSIZE field in the pseudo-file created for the queue.
>>> Before, this field reflected the size of the user-data in the queue.
>>> Since, it also takes kernel data structures into account. For
>>> example, if 13 bytes of user data are in the queue, on my machine the
>>> file reports a size of 61 bytes.
>>>
>>> There was some discussion on this topic before (for example
>>> https://lkml.org/lkml/2014/10/1/115). Commenting on a th lkml, Michael
>>> Kerrisk gave the following background (https://lkml.org/lkml/2015/6/16/74):
>>>
>>> The pseudofiles in the mqueue filesystem (usually mounted at
>>> /dev/mqueue) expose fields with metadata describing a message
>>> queue. One of these fields, QSIZE, as originally implemented,
>>> showed the total number of bytes of user data in all messages in
>>> the message queue, and this feature was documented from the
>>> beginning in the mq_overview(7) page. In 3.5, some other (useful)
>>> work happened to break the user-space API in a couple of places,
>>> including the value exposed via QSIZE, which now includes a measure
>>> of kernel overhead bytes for the queue, a figure that renders QSIZE
>>> useless for its original purpose, since there's no way to deduce
>>> the number of overhead bytes consumed by the implementation.
>>> (The other user-space breakage was subsequently fixed.)
>>
>> Michael, this breakage was never finally documented in the manpage,
>> right?
>
> Right.
>
>> I took a look and there is no mention, but it was a quick look.
>> It's just that if this patch goes in, I'd hate ending up with something
>> like this in the manpage:
>>
>> as of 3.5
>> <accounts for kernel overhead>
>>
>> as of 4.3
>> <behavior reverted back to not include kernel overhead... *sigh*>
>>
>> If there are changes to be made to the manpage, it should probably be
>> posted with this patch, methinks.
>
> I think something like the above will have to end up in the man page.
> The only thing I'd add is that the fix also has gone to -stable
> kernels. At least: I think this patch should also be marked for
> -stable. I'll take care of the man page updates as the patch goes
> through.
>
>>> This patch removes the accounting of kernel data structures in the
>>> queue. Reporting the size of these data-structures in the QSIZE field
>>> was a breaking change (see Michael's comment above). Without the QSIZE
>>> field reporting the total size of user-data in the queue, there is no
>>> way to deduce this number.
>>>
>>> It should be noted that the resource limit RLIMIT_MSGQUEUE is counted
>>> against the worst-case size of the queue (in both the old and the new
>>> implementation). Therefore, the kernel overhead accounting in QSIZE is
>>> not necessary to help the user understand the limitations RLIMIT imposes
>>> on the processes.
>>
>> Also, I would suggest adding some comment in struct mqueue_inode_info
>> for future reference, ie:
>>
>> - unsigned long qsize; /* size of queue in memory (sum of all msgs) */
>> + /*
>> + * Size of queue in memory (sum of all msgs). Accounts for
>> + * only userspace overhead; ignoring any in-kernel rbtree nodes.
>> + */
>> + unsigned long qsize;
>>
>> But no big deal in any case.
>>
>> I think this is the right approach,
>
> Me too.
>
>> but would still like to know if Doug
>> has any concerns about it.
>
> Looking on gmane, Doug does not appear to have been active on any
> lists since late May! Not sure why.
I responded yesterday in the v2 patch thread I believe. In any case, I
think this patch is fine, and can go to stable. This patch doesn't
actually change the math related to the rlimit checks (which is the main
thing I wanted to correct in my original patches), instead it corrects a
mistake I made. At the time, I mistakenly thought that the qsize
included the current message data total + the struct msg_msg size total.
It didn't, it was just the current user data total. I added the rbtree
nodes in order to keep the total accurate but I shouldn't have added the
rbtree nodes to this total because none of the other kernel usage was
previously included.
Acked-by: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG KeyID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Doug Ledford <dledford@redhat.com>
To: mtk.manpages@gmail.com, Davidlohr Bueso <dave@stgolabs.net>
Cc: Marcus Gelderie <redmnic@gmail.com>,
lkml <linux-kernel@vger.kernel.org>,
David Howells <dhowells@redhat.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
John Duffy <jb_duffy@btinternet.com>,
Arto Bendiken <arto@bendiken.net>,
Linux API <linux-api@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v3] ipc: Modify message queue accounting to not take kernel data structures into account
Date: Wed, 08 Jul 2015 15:17:52 -0400 [thread overview]
Message-ID: <559D7760.1020909@redhat.com> (raw)
In-Reply-To: <CAKgNAkjy-+2TkN=0Fe11bVea4q6uLcUx=++Mf1eFxhmPmZoc9w@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4914 bytes --]
On 07/07/2015 09:01 AM, Michael Kerrisk (man-pages) wrote:
> Hi David,
>
> On 7 July 2015 at 07:16, Davidlohr Bueso <dave@stgolabs.net> wrote:
>> On Mon, 2015-07-06 at 17:49 +0200, Marcus Gelderie wrote:
>>> A while back, the message queue implementation in the kernel was
>>> improved to use btrees to speed up retrieval of messages (commit
>>> d6629859b36). The patch introducing the improved kernel handling of
>>> message queues (using btrees) has, as a by-product, changed the
>>> meaning of the QSIZE field in the pseudo-file created for the queue.
>>> Before, this field reflected the size of the user-data in the queue.
>>> Since, it also takes kernel data structures into account. For
>>> example, if 13 bytes of user data are in the queue, on my machine the
>>> file reports a size of 61 bytes.
>>>
>>> There was some discussion on this topic before (for example
>>> https://lkml.org/lkml/2014/10/1/115). Commenting on a th lkml, Michael
>>> Kerrisk gave the following background (https://lkml.org/lkml/2015/6/16/74):
>>>
>>> The pseudofiles in the mqueue filesystem (usually mounted at
>>> /dev/mqueue) expose fields with metadata describing a message
>>> queue. One of these fields, QSIZE, as originally implemented,
>>> showed the total number of bytes of user data in all messages in
>>> the message queue, and this feature was documented from the
>>> beginning in the mq_overview(7) page. In 3.5, some other (useful)
>>> work happened to break the user-space API in a couple of places,
>>> including the value exposed via QSIZE, which now includes a measure
>>> of kernel overhead bytes for the queue, a figure that renders QSIZE
>>> useless for its original purpose, since there's no way to deduce
>>> the number of overhead bytes consumed by the implementation.
>>> (The other user-space breakage was subsequently fixed.)
>>
>> Michael, this breakage was never finally documented in the manpage,
>> right?
>
> Right.
>
>> I took a look and there is no mention, but it was a quick look.
>> It's just that if this patch goes in, I'd hate ending up with something
>> like this in the manpage:
>>
>> as of 3.5
>> <accounts for kernel overhead>
>>
>> as of 4.3
>> <behavior reverted back to not include kernel overhead... *sigh*>
>>
>> If there are changes to be made to the manpage, it should probably be
>> posted with this patch, methinks.
>
> I think something like the above will have to end up in the man page.
> The only thing I'd add is that the fix also has gone to -stable
> kernels. At least: I think this patch should also be marked for
> -stable. I'll take care of the man page updates as the patch goes
> through.
>
>>> This patch removes the accounting of kernel data structures in the
>>> queue. Reporting the size of these data-structures in the QSIZE field
>>> was a breaking change (see Michael's comment above). Without the QSIZE
>>> field reporting the total size of user-data in the queue, there is no
>>> way to deduce this number.
>>>
>>> It should be noted that the resource limit RLIMIT_MSGQUEUE is counted
>>> against the worst-case size of the queue (in both the old and the new
>>> implementation). Therefore, the kernel overhead accounting in QSIZE is
>>> not necessary to help the user understand the limitations RLIMIT imposes
>>> on the processes.
>>
>> Also, I would suggest adding some comment in struct mqueue_inode_info
>> for future reference, ie:
>>
>> - unsigned long qsize; /* size of queue in memory (sum of all msgs) */
>> + /*
>> + * Size of queue in memory (sum of all msgs). Accounts for
>> + * only userspace overhead; ignoring any in-kernel rbtree nodes.
>> + */
>> + unsigned long qsize;
>>
>> But no big deal in any case.
>>
>> I think this is the right approach,
>
> Me too.
>
>> but would still like to know if Doug
>> has any concerns about it.
>
> Looking on gmane, Doug does not appear to have been active on any
> lists since late May! Not sure why.
I responded yesterday in the v2 patch thread I believe. In any case, I
think this patch is fine, and can go to stable. This patch doesn't
actually change the math related to the rlimit checks (which is the main
thing I wanted to correct in my original patches), instead it corrects a
mistake I made. At the time, I mistakenly thought that the qsize
included the current message data total + the struct msg_msg size total.
It didn't, it was just the current user data total. I added the rbtree
nodes in order to keep the total accurate but I shouldn't have added the
rbtree nodes to this total because none of the other kernel usage was
previously included.
Acked-by: Doug Ledford <dledford@redhat.com>
--
Doug Ledford <dledford@redhat.com>
GPG KeyID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
next prev parent reply other threads:[~2015-07-08 19:17 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-22 22:25 [PATCH v2] ipc: Modify message queue accounting to reflect both total user data and auxiliary kernel data Marcus Gelderie
2015-06-22 22:25 ` Marcus Gelderie
[not found] ` <20150622222546.GA32432-W7fNxlbxG8VSq9BJjBFyUp/QNRX+jHPU@public.gmane.org>
2015-06-25 5:47 ` Davidlohr Bueso
2015-06-25 5:47 ` Davidlohr Bueso
[not found] ` <1435211229.11852.23.camel-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>
2015-06-25 7:23 ` Michael Kerrisk (man-pages)
2015-06-25 7:23 ` Michael Kerrisk (man-pages)
[not found] ` <CAKgNAkieR5zdpKm=P2dcTDJ_3X4HMRoeOQ2D8yghYVKOjDsYAg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-06-25 18:21 ` Davidlohr Bueso
2015-06-25 18:21 ` Davidlohr Bueso
2015-07-06 15:49 ` [PATCH v3] ipc: Modify message queue accounting to not take kernel data structures into account Marcus Gelderie
[not found] ` <20150706154928.GA19828-W7fNxlbxG8VSq9BJjBFyUp/QNRX+jHPU@public.gmane.org>
2015-07-07 5:16 ` Davidlohr Bueso
2015-07-07 5:16 ` Davidlohr Bueso
[not found] ` <1436246210.12255.71.camel-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>
2015-07-07 13:01 ` Michael Kerrisk (man-pages)
2015-07-07 13:01 ` Michael Kerrisk (man-pages)
[not found] ` <CAKgNAkjy-+2TkN=0Fe11bVea4q6uLcUx=++Mf1eFxhmPmZoc9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-07-08 19:17 ` Doug Ledford [this message]
2015-07-08 19:17 ` Doug Ledford
[not found] ` <559D7760.1020909-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-07-08 19:53 ` Michael Kerrisk (man-pages)
2015-07-08 19:53 ` Michael Kerrisk (man-pages)
2015-07-08 21:49 ` Davidlohr Bueso
2015-07-08 21:49 ` Davidlohr Bueso
2015-07-10 0:00 ` Davidlohr Bueso
2015-07-10 0:00 ` Davidlohr Bueso
2015-07-11 0:48 ` [PATCH 2/1] ipc,mqueue: Delete bogus overflow check Davidlohr Bueso
2015-07-11 0:48 ` Davidlohr Bueso
[not found] ` <1436575691.27924.53.camel-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>
2015-07-11 2:03 ` Al Viro
2015-07-11 2:03 ` Al Viro
[not found] ` <20150711020300.GH17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-11 2:59 ` Doug Ledford
2015-07-11 2:59 ` Doug Ledford
[not found] ` <55A0867A.1060202-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-07-14 16:11 ` Marcus Gelderie
2015-07-14 16:11 ` Marcus Gelderie
2015-06-25 18:50 ` [PATCH v2] ipc: Modify message queue accounting to reflect both total user data and auxiliary kernel data Marcus Gelderie
[not found] ` <20150625185019.GA17933-dYYy/5+rgCadFe0WYshgmA@public.gmane.org_W_724V_09011603_00_009>
2015-07-07 18:49 ` Doug Ledford
2015-07-07 18:49 ` Doug Ledford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=559D7760.1020909@redhat.com \
--to=dledford-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=arto-TQ6thHYR8Svk1uMJSBkQmQ@public.gmane.org \
--cc=dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org \
--cc=dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=jb_duffy-FhtRXb7CoQBt1OO0OYaSVA@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=redmnic-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.