[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] tools/xenstore: set open file descriptor limit for xenstored



commit 9cfeb83cbe23a873de512211d7ecd989348b9df0
Author:     Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Tue Oct 12 15:41:48 2021 +0200
Commit:     Ian Jackson <iwj@xxxxxxxxxxxxxx>
CommitDate: Mon Oct 18 14:17:28 2021 +0100

    tools/xenstore: set open file descriptor limit for xenstored
    
    Add a configuration item for the maximum number of open file
    descriptors xenstored should be allowed to have.
    
    The default should be "unlimited" in order not to restrict xenstored
    in the number of domains it can support, but unfortunately the kernel
    is normally limiting the maximum value via /proc/sys/fs/nr_open [1],
    [2]. So check that file to exist and if it does, limit the maximum
    value to the one specified by /proc/sys/fs/nr_open.
    
    As an aid for the admin configuring the value add a comment specifying
    the common needs of xenstored for the different domain types.
    
    [1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=60fd760fb9ff7034360bab7137c917c0330628c2
    [2]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0c2d64fb6cae9aae480f6a46cfe79f8d7d48b59f
    
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Reviewed-by: Ian Jackson <iwj@xxxxxxxxxxxxxx>
    Release-Acked-by: Ian Jackson <iwj@xxxxxxxxxxxxxx>
---
 tools/hotplug/Linux/init.d/sysconfig.xencommons.in | 13 +++++++++++++
 tools/hotplug/Linux/launch-xenstore.in             | 21 ++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in 
b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
index b83101ab7e..433e4849af 100644
--- a/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
+++ b/tools/hotplug/Linux/init.d/sysconfig.xencommons.in
@@ -32,6 +32,19 @@
 # Changing this requires a reboot to take effect.
 #XENSTORED=@XENSTORED@
 
+## Type: string
+## Default: unlimited
+#
+# Select maximum number of file descriptors xenstored is allowed to have
+# opened at one time.
+# For each HVM domain xenstored might need up to 5 open file descriptors,
+# PVH and PV domains will require up to 3 open file descriptors. Additionally
+# 20-30 file descriptors will be opened for internal uses.
+# The specified value (including "unlimited") will be capped by the contents
+# of /proc/sys/fs/nr_open if existing.
+# Only evaluated if XENSTORETYPE is "daemon".
+#XENSTORED_MAX_OPEN_FDS=unlimited
+
 ## Type: string
 ## Default: ""
 #
diff --git a/tools/hotplug/Linux/launch-xenstore.in 
b/tools/hotplug/Linux/launch-xenstore.in
index 1747c96065..8438af9977 100644
--- a/tools/hotplug/Linux/launch-xenstore.in
+++ b/tools/hotplug/Linux/launch-xenstore.in
@@ -54,6 +54,7 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . 
@CONFIG_DIR@/@CONFIG_LEAF
 
 [ "$XENSTORETYPE" = "daemon" ] && {
        [ -z "$XENSTORED_TRACE" ] || XENSTORED_ARGS="$XENSTORED_ARGS -T 
@XEN_LOG_DIR@/xenstored-trace.log"
+       [ -z "$XENSTORED_MAX_OPEN_FDS" ] && XENSTORED_MAX_OPEN_FDS=unlimited
        [ -z "$XENSTORED" ] && XENSTORED=@XENSTORED@
        [ -x "$XENSTORED" ] || {
                echo "No xenstored found"
@@ -62,10 +63,28 @@ test -f @CONFIG_DIR@/@CONFIG_LEAF_DIR@/xencommons && . 
@CONFIG_DIR@/@CONFIG_LEAF
        [ -z "$XENSTORED_OOM_MEM_THRESHOLD" ] || XENSTORED_OOM_MEM_THRESHOLD=50
        XS_OOM_SCORE=-$(($XENSTORED_OOM_MEM_THRESHOLD * 10))
 
+       [ "$XENSTORED_MAX_OPEN_FDS" = "unlimited" ] || {
+               [ -z "${XENSTORED_MAX_OPEN_FDS//[0-9]}" ] &&
+               [ -n "$XENSTORED_MAX_OPEN_FDS" ] || {
+                       echo "XENSTORED_MAX_OPEN_FDS=$XENSTORED_MAX_OPEN_FDS 
invalid"
+                       echo "Setting to default \"unlimited\"."
+                       XENSTORED_MAX_OPEN_FDS=unlimited
+               }
+       }
+       [ -r /proc/sys/fs/nr_open ] && {
+               MAX_FDS=`cat /proc/sys/fs/nr_open`
+               [ "$XENSTORED_MAX_OPEN_FDS" = "unlimited" ] && 
XENSTORED_MAX_OPEN_FDS=$MAX_FDS
+               [ $XENSTORED_MAX_OPEN_FDS -gt $MAX_FDS ] && {
+                       echo "XENSTORED_MAX_OPEN_FDS exceeds system limit."
+                       echo "Setting to \"$MAX_FDS\"."
+                       XENSTORED_MAX_OPEN_FDS=$MAX_FDS
+               }
+       }
+
        rm -f @XEN_RUN_DIR@/xenstored.pid
 
        echo -n Starting $XENSTORED...
-       $XENSTORED --pid-file @XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
+       prlimit --nofile=$XENSTORED_MAX_OPEN_FDS $XENSTORED --pid-file 
@XEN_RUN_DIR@/xenstored.pid $XENSTORED_ARGS
 
        systemd-notify --booted 2>/dev/null || timeout_xenstore $XENSTORED || 
exit 1
        XS_PID=`cat @XEN_RUN_DIR@/xenstored.pid`
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.