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

[Xen-changelog] [xen master] oxenstored: add facilities to raise the max open fds uplimit



commit b6afbcf41ddf5f44125eb6c2c3a27231b6af3e79
Author:     Zheng Li <dev@xxxxxxxx>
AuthorDate: Thu Sep 25 18:34:55 2014 +0100
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Wed Oct 8 14:18:46 2014 +0100

    oxenstored: add facilities to raise the max open fds uplimit
    
    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.
    
    Signed-off-by: Zheng Li <dev@xxxxxxxx>
    Reviewed-by: David Scott <dave.scott@xxxxxxxxxx>
---
 tools/ocaml/xenstored/select.ml      |   10 ++++++++++
 tools/ocaml/xenstored/select_stubs.c |   12 ++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/tools/ocaml/xenstored/select.ml b/tools/ocaml/xenstored/select.ml
index 3f4b671..ab8c847 100644
--- a/tools/ocaml/xenstored/select.ml
+++ b/tools/ocaml/xenstored/select.ml
@@ -23,6 +23,16 @@ 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 go above the system level nr_open,
+   which we can read from /proc/sys. *)
+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 33beeb9..4a8edb5 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);
+
+}
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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