Document POSIX MQ /proc/sys/fs/mqueue files

From: Michael Kerrisk (man-pages)
Date: Mon Sep 29 2014 - 05:10:16 EST


Hello Doug, David,

I think you two were the last ones to make significant
changes to the semantics of the files in /proc/sys/fs/mqueue,
so I wonder if you (or anyone else who is willing) might
take a look at the man page text below that I've written
(for the mq_overview(7) page) to describe past and current
reality, and let me know of improvements of corrections.

By the way, Doug, your commit ce2d52cc1364 appears to have
changed/broken the semantics of the files in the /dev/mqueue
filesystem. Formerly, the QSIZE field in these files showed
the number of bytes of real user data in all of the queued
messages. After that commit, QSIZE now includes kernel
overhead bytes, which does not seem very useful for user
space. Was that change intentional? I see no mention of the
change in the commit message, so it sounds like it was not
intended.

Cheers,

Michael

>From mq_overview(7) draft:

/proc interfaces
The following interfaces can be used to limit the amount of kerâ
nel memory consumed by POSIX message queues and to set the
default attributes for new message queues:

/proc/sys/fs/mqueue/msg_default (since Linux 3.5)
This file defines the value used for a new queue's
mq_maxmsg setting when the queue is created with a call to
mq_open(3) where attr is specified as NULL. The default
value for this file is 10. The minimum and maximum are as
for /proc/sys/fs/mqueue/msg_max. If msg_default exceeds
msg_max, a new queue's default mq_maxmsg value is capped
to the msg_max limit. Up until Linux 2.6.28, the default
mq_maxmsg was 10; from Linux 2.6.28 to Linux 3.4, the
default was the value defined for the msg_max limit.

/proc/sys/fs/mqueue/msg_max
This file can be used to view and change the ceiling value
for the maximum number of messages in a queue. This value
acts as a ceiling on the attr->mq_maxmsg argument given to
mq_open(3). The default value for msg_max is 10. The
minimum value is 1 (10 in kernels before 2.6.28). The
upper limit is HARD_MSGMAX. The msg_max limit is ignored
for privileged processes (CAP_SYS_RESOURCE), but the
HARD_MSGMAX ceiling is nevertheless imposed.

The definition of HARD_MSGMAX has changed across kernel
versions:

* Up to Linux 2.6.32: 131072 / sizeof(void *)

* Linux 2.6.33 to 3.4: (32768 * sizeof(void *) / 4)

* Since Linux 3.5: 65,536

/proc/sys/fs/mqueue/msgsize_default (since Linux 3.5)
This file defines the value used for a new queue's mq_msgâ
size setting when the queue is created with a call to
mq_open(3) where attr is specified as NULL. The default
value for this file is 8192. The minimum and maximum are
as for /proc/sys/fs/mqueue/msgsize_max. If msgâ
size_default exceeds msgsize_max, a new queue's default
mq_msgsize value is capped to the msgsize_max limit. Up
until Linux 2.6.28, the default mq_msgsize was 8192; from
Linux 2.6.28 to Linux 3.4, the default was the value
defined for the msgsize_max limit.

/proc/sys/fs/mqueue/msgsize_max
This file can be used to view and change the ceiling on
the maximum message size. This value acts as a ceiling on
the attr->mq_msgsize argument given to mq_open(3). The
default value for msgsize_max is 8192 bytes. The minimum
value is 128 (8192 in kernels before 2.6.28). The upper
limit for msgsize_max has varied across kernel versions:

* Before Linux 2.6.28, the upper limit is INT_MAX.

* From Linux 2.6.28 to 3.4, the limit is 1,048,576.

* Since Linux 3.5, the limit is 16,777,216 (HARD_MSGSIZEâ
MAX).

The msgsize_max limit is ignored for privileged process
(CAP_SYS_RESOURCE), but, since Linux 3.5, the HARD_MSGâ
SIZEMAX ceiling is enforced for privileged processes.

/proc/sys/fs/mqueue/queues_max
This file can be used to view and change the system-wide
limit on the number of message queues that can be created.
The default value for queues_max is 256. The semantics of
this limit have changed across kernel versions as follows:

* Before Linux 3.5, this limit could be changed to any
value in the range 0 to INT_MAX, but privileged proâ
cesses (CAP_SYS_RESOURCE) can exceed the limit.

* Since Linux 3.5, there is a ceiling for this limit of
1024 (HARD_QUEUESMAX). Privileged processes
(CAP_SYS_RESOURCE) can exceed the queues_max limit, but
the HARD_QUEUESMAX limit is enforced even for priviâ
leged processes.

* Starting with Linux 3.14, the HARD_QUEUESMAX ceiling is
removed: no ceiling is imposed on the queues_max limit,
and privileged processes (CAP_SYS_RESOURCE) can exceed
the limit.

--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/