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

Re: [Xen-devel] [PATCH 2/8] oxenstored: add facilities to raise the max open fds uplimit



On 15 Sep 2014, at 23:39, Zheng Li <dev@xxxxxxxx> wrote:

> To go beyond 1024 fds, we also need to raise the process limitation on max
> open fds (usually defaults to 1024).
> 
> We need to know the system level max open fds so that we won't go above that.
> Simply setting the limit to RLIM_INFINITY doesn't work on Linux 3.x (EPERM), a
> patch on this went into the 2.x branch but not 3.x for some reason. Also,
> getting the system level nr_open is not very straightfoward on 3.x, which is
> mentioned in the comment inline.
> 
> Signed-off-by: Zheng Li <dev@xxxxxxxx>
> ---
> tools/ocaml/xenstored/select.ml      | 15 +++++++++++++++
> tools/ocaml/xenstored/select_stubs.c | 12 ++++++++++++
> 2 files changed, 27 insertions(+)
> 
> diff --git a/tools/ocaml/xenstored/select.ml b/tools/ocaml/xenstored/select.ml
> index 2c18c70..c19df41 100644
> --- a/tools/ocaml/xenstored/select.ml
> +++ b/tools/ocaml/xenstored/select.ml
> @@ -20,6 +20,21 @@ type event = {
> }
> 
> external select_on_poll: (Unix.file_descr * event) array -> int -> int = 
> "stub_select_on_poll"
> +external set_fd_limit: int -> unit = "stub_set_fd_limit"
> +
> +(* The rlim_max given to setrlimit must not beyond system level nr_open, 
> which
> +   was defined as NR_OPEN in fs.h in Linux 2.x and then sysctl_nr_open 
> variable
> +   since 3.x. Unfortunately sysctl_nr_open was not exposed in either head 
> files

typo “header files”

> +   or sysctl param vector. This function workarounds this by trying to read
> +   from /proc directly and default to the old NR_OPEN value if that fails.
> +   Fortunately, we'll need to call this at most once.
> +*)
> +let get_sys_fs_nr_open () =
> +     try
> +             let ch = open_in "/proc/sys/fs/nr_open" in
> +             let v = int_of_string (input_line ch) in
> +             close_in_noerr ch; v
> +     with _ -> 1024 * 1024
> 
> let init_event () = {read = false; write = false; except = false}
> 
> diff --git a/tools/ocaml/xenstored/select_stubs.c 
> b/tools/ocaml/xenstored/select_stubs.c
> index a50f417..13efbac 100644
> --- a/tools/ocaml/xenstored/select_stubs.c
> +++ b/tools/ocaml/xenstored/select_stubs.c
> @@ -66,3 +66,15 @@ CAMLprim value stub_select_on_poll(value fd_events, value 
> timeo) {
> 
>       CAMLreturn(Val_int(rc));
> }
> +
> +
> +CAMLprim value stub_set_fd_limit(value limit) {
> +
> +     CAMLparam1(limit);
> +     struct rlimit rl;
> +
> +     rl.rlim_cur = rl.rlim_max = Int_val(limit);
> +     if (setrlimit(RLIMIT_NOFILE, &rl) != 0) uerror("setrlimit", Nothing);
> +     CAMLreturn(Val_unit);
> +
> +}
> -- 
> 2.1.0
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel


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