[Docs] Instance process consumes more file descriptors than default ulimit allows

Bug #1642941 reported by Denis Klepikov
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fuel for OpenStack
Won't Fix
High
Evgeny Konstantinov
Mitaka
Fix Released
High
Alexey Stupnikov

Bug Description

Instance process consumes more file descriptors than ulimit allows.

When instance operate with any data into ceph cluster it asks ceph monitors for crushmap for necessary object and starting to write/read specified objects into it's placement groups.
In case of connecting 10 volumes to instance that are booted from volume and actively using 10 of it your instance process can consume OSD_NUMBERS*(VOLUME_NUMBERS+1) file descriptors. Due to this some volume parts can be stored on all OSDs across the ceph cluster.

If you want to actively use 10 volumes attached to the 1 instance (ceph cluster contains 200 OSDs) you can calculate the necessary file descriptors numbers to place it into /etc/default/libvirt-bin or /etc/default/libvirtd file (related to MOS version)

numbers_of_osds*(numbers_of_volumes_attached_to_instance+1) and round it to close thousand (200*(10+1)= 2200 ~3000) and make 10 times more soft limit.
ulimit -Sn 30000

Huge limits are not recommended to avoid overload compute node by one instance.

summary: - [Docs] Instance process consumes more file descriptors than ulimit
- allows
+ [Docs] Instance process consumes more file descriptors than default
+ ulimit allows
Changed in fuel:
status: New → Confirmed
importance: Undecided → High
milestone: none → 9.2
assignee: Fuel Documentation Team (fuel-docs) → Evgeny Konstantinov (evkonstantinov)
Roman Vyalov (r0mikiam)
Changed in fuel:
status: Confirmed → Won't Fix
Revision history for this message
Alexey Stupnikov (astupnikov) wrote :

Fuel uses libvirt_mof_limit parameter to configure a limit for
number of open files. This parameter defaults to 102400. A
/etc/init/libvirtd.conf file is used to set this limit on
compute nodes.

Each connection from RBD image to OSD needs 1 file descriptor (FD)
and 2 threads. An extreme case requeres connection to all OSDs in the
cluster for every OSD. For example, if you have 50 OSDs and 4096 RBDs,
than default limit will not work for you.

On the other hand, it doesn't look like a common problem: one
shouldn't use ceph to host 4096 RBDs, an RBD wouldn't necessary
require a connection to all OSDs, an OSD cluster wouldn't necessary
have such amount of OSDs.

IMO this should be considered as a known issue.

Revision history for this message
Fuel Devops McRobotson (fuel-devops-robot) wrote : Fix proposed to mos/mos-docs (stable/9.2)

Fix proposed to branch: stable/9.2
Change author: Alexey Stupnikov <email address hidden>
Review: https://review.fuel-infra.org/36877

Revision history for this message
Fuel Devops McRobotson (fuel-devops-robot) wrote : Fix merged to mos/mos-docs (stable/9.2)

Reviewed: https://review.fuel-infra.org/36877
Submitter: Olena Logvinova <email address hidden>
Branch: stable/9.2

Commit: 02a5b2d684bcf4bd195c83414b5660b128431693
Author: Alexey Stupnikov <email address hidden>
Date: Tue Oct 17 10:33:19 2017

Added a note about libvirt limits configuration

There are a special cases where default limits will not
work well. I have described an issue with ceph RBD storage
and possible fix.

Change-Id: I829ac2cae4aa4cec419335fddbe8bb7201605193
Closes-bug: #1642941

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.