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

Re: [Xen-devel] [PATCH v4] tools/xenconsoled: Increase file descriptor limit



Andrew Cooper writes ("[PATCH v4] tools/xenconsoled: Increase file descriptor 
limit"):
> XenServer's VM density testing uncovered a regression when moving from
> sysvinit to systemd where the file descriptor limit dropped from 4096 to
> 1024. (XenServer had previously inserted a ulimit statement into its
> initscripts.)
> 
> One solution is to use LimitNOFILE=4096 in xenconsoled.service to match the
> lost ulimit, but that is only a stopgap solution.
> 
> As Xenconsoled genuinely needs a large number of file descriptors if a large
> number of domains are running, attempt to increase the limit.
...

There's still a lot of code here I think we can do without.

Why do we care about the system maximum ?

> +     /*
> +      * Will min_fds fit within our current hard limit?
> +      * (likely on *BSD, unlikely on Linux)
> +      * If so, raise our soft limit.
> +      */
> +     if (min_fds <= lim.rlim_max) {
> +             struct rlimit new = {
> +                     .rlim_cur = min_fds,
> +                     .rlim_max = lim.rlim_max,
> +             };
> +
> +             if (setrlimit(RLIMIT_NOFILE, &new) < 0)
> +                     syslog(LOG_WARNING,
> +                            "Unable to increase fd soft limit: %lu -> %u, "
> +                            "hard %lu (%s) - May run out with lots of 
> domains",
> +                            lim.rlim_cur, min_fds, lim.rlim_max,
> +                            strerror(errno));
> +     } else {
> +             /*
> +              * Lets hope that, as a root process, we have sufficient
> +              * privilege to up the hard limit.
> +              */
> +             struct rlimit new = { .rlim_cur = min_fds, .rlim_max = min_fds 
> };
> +
> +             if (setrlimit(RLIMIT_NOFILE, &new) < 0)
> +                     syslog(LOG_WARNING,
> +                            "Unable to increase fd hard limit: %lu -> %u 
> (%s)"
> +                            " - May run out with lots of domains",
> +                            lim.rlim_max, min_fds, strerror(errno));
> +     }

This is very repetitive.  The only difference between the two branches
is (a) the value of .rlim_max and (b) the log message.  (b) can be
dealt with by making the log message depend only on the contents of
new.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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