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

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



On 27/02/15 16:13, Ian Jackson wrote:
> 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 ?

In the case that the system maximum is less than 132008 but greater than
the current hard limit, we want to grab as many FDs as we can.

I can drop it completely if you are happy that noone is really going to
xenconsoled on a Linux system with nr_open less than 1M.

>
>> +    /*
>> +     * 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.

I will see what I can do.

~Andrew


_______________________________________________
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®.