mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
![Drew DeVault](/assets/img/avatar_default.png)
This limit has not been updated since 2008, when it was increased to 64 KiB at the request of GnuPG. Until recently, the main use-cases for this feature were (1) preventing sensitive memory from being swapped, as in GnuPG's use-case; and (2) real-time use-cases. In the first case, little memory is called for, and in the second case, the user is generally in a position to increase it if they need more. The introduction of IOURING_REGISTER_BUFFERS adds a third use-case: preparing fixed buffers for high-performance I/O. This use-case will take as much of this memory as it can get, but is still limited to 64 KiB by default, which is very little. This increases the limit to 8 MB, which was chosen fairly arbitrarily as a more generous, but still conservative, default value. It is also possible to raise this limit in userspace. This is easily done, for example, in the use-case of a network daemon: systemd, for instance, provides for this via LimitMEMLOCK in the service file; OpenRC via the rc_ulimit variables. However, there is no established userspace facility for configuring this outside of daemons: end-user applications do not presently have access to a convenient means of raising their limits. The buck, as it were, stops with the kernel. It's much easier to address it here than it is to bring it to hundreds of distributions, and it can only realistically be relied upon to be high-enough by end-user software if it is more-or-less ubiquitous. Most distros don't change this particular rlimit from the kernel-supplied default value, so a change here will easily provide that ubiquity. Link: https://lkml.kernel.org/r/20211028080813.15966-1-sir@cmpwn.com Signed-off-by: Drew DeVault <sir@cmpwn.com> Acked-by: Jens Axboe <axboe@kernel.dk> Acked-by: Cyril Hrubis <chrubis@suse.cz> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Pavel Begunkov <asml.silence@gmail.com> Cc: David Hildenbrand <david@redhat.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Andrew Dona-Couch <andrew@donacou.ch> Cc: Ammar Faizi <ammarfaizi2@gnuweeb.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
88 lines
2.5 KiB
C
88 lines
2.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef _UAPI_LINUX_RESOURCE_H
|
|
#define _UAPI_LINUX_RESOURCE_H
|
|
|
|
#include <linux/time.h>
|
|
#include <linux/types.h>
|
|
|
|
/*
|
|
* Resource control/accounting header file for linux
|
|
*/
|
|
|
|
/*
|
|
* Definition of struct rusage taken from BSD 4.3 Reno
|
|
*
|
|
* We don't support all of these yet, but we might as well have them....
|
|
* Otherwise, each time we add new items, programs which depend on this
|
|
* structure will lose. This reduces the chances of that happening.
|
|
*/
|
|
#define RUSAGE_SELF 0
|
|
#define RUSAGE_CHILDREN (-1)
|
|
#define RUSAGE_BOTH (-2) /* sys_wait4() uses this */
|
|
#define RUSAGE_THREAD 1 /* only the calling thread */
|
|
|
|
struct rusage {
|
|
struct __kernel_old_timeval ru_utime; /* user time used */
|
|
struct __kernel_old_timeval ru_stime; /* system time used */
|
|
__kernel_long_t ru_maxrss; /* maximum resident set size */
|
|
__kernel_long_t ru_ixrss; /* integral shared memory size */
|
|
__kernel_long_t ru_idrss; /* integral unshared data size */
|
|
__kernel_long_t ru_isrss; /* integral unshared stack size */
|
|
__kernel_long_t ru_minflt; /* page reclaims */
|
|
__kernel_long_t ru_majflt; /* page faults */
|
|
__kernel_long_t ru_nswap; /* swaps */
|
|
__kernel_long_t ru_inblock; /* block input operations */
|
|
__kernel_long_t ru_oublock; /* block output operations */
|
|
__kernel_long_t ru_msgsnd; /* messages sent */
|
|
__kernel_long_t ru_msgrcv; /* messages received */
|
|
__kernel_long_t ru_nsignals; /* signals received */
|
|
__kernel_long_t ru_nvcsw; /* voluntary context switches */
|
|
__kernel_long_t ru_nivcsw; /* involuntary " */
|
|
};
|
|
|
|
struct rlimit {
|
|
__kernel_ulong_t rlim_cur;
|
|
__kernel_ulong_t rlim_max;
|
|
};
|
|
|
|
#define RLIM64_INFINITY (~0ULL)
|
|
|
|
struct rlimit64 {
|
|
__u64 rlim_cur;
|
|
__u64 rlim_max;
|
|
};
|
|
|
|
#define PRIO_MIN (-20)
|
|
#define PRIO_MAX 20
|
|
|
|
#define PRIO_PROCESS 0
|
|
#define PRIO_PGRP 1
|
|
#define PRIO_USER 2
|
|
|
|
/*
|
|
* Limit the stack by to some sane default: root can always
|
|
* increase this limit if needed.. 8MB seems reasonable.
|
|
*/
|
|
#define _STK_LIM (8*1024*1024)
|
|
|
|
/*
|
|
* Limit the amount of locked memory by some sane default:
|
|
* root can always increase this limit if needed.
|
|
*
|
|
* The main use-cases are (1) preventing sensitive memory
|
|
* from being swapped; (2) real-time operations; (3) via
|
|
* IOURING_REGISTER_BUFFERS.
|
|
*
|
|
* The first two don't need much. The latter will take as
|
|
* much as it can get. 8MB is a reasonably sane default.
|
|
*/
|
|
#define MLOCK_LIMIT (8*1024*1024)
|
|
|
|
/*
|
|
* Due to binary compatibility, the actual resource numbers
|
|
* may be different for different linux versions..
|
|
*/
|
|
#include <asm/resource.h>
|
|
|
|
|
|
#endif /* _UAPI_LINUX_RESOURCE_H */
|