Each BmapEntry instance stores a pointer to the same CephContext.
As we expect to have thousands of instances the overhead might
be too high. For instance, serving 1 TiB SSD disk on x86-64,
while using the default settings, results in 32 MiB of extra
memory consumption:
# assuming sizeof(unsigned long) * CHAR_BIT == 64
>>> 1024 * 1024 * 1024 * 1024 / 4096 / 64
4194304
>>> 4194304 * 8 / 1024
32768
Although memory is cheap, CPU's caches are not.
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
Before the patch BitMapZone::is_exhausted() required from its
callers to acquire appropriate lock. However, fulfilling this
condition is not really necessary to use the method correctly
while it can significantly hurt performance.
The change allows BitMapAreaLeaf::child_check_n_lock() to not
acquire the lock while examining zones for being exhausted.
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
This is difficult to break into pieces, so one big fat commit it is.
A few trivial bits
- include epoch in PGQueueable.
- PGQueuable operator<<
- remove op_wq ref from OSDService; use simple set of queue methods instead
The big stuff:
- Fast dispatch now passes messages directly to the queue based on an
spg_t. The exception is MOSDOp's from legacy clients. We add a
waiting_for_map mechanism on the front-side that is similar to but simpler
than the previous one so that we can map those legacy requests to an
accurate spg_t.
- The dequeue path now has a waiting_for_pg mechanism. It also uses a
much simpler set of data structures that should make it much faster than
the previous incarnation.
- Shutdown works a bit differently; we drain the queue instead of trying
to remove work for individual PGs. This lets us remove the dequeue_pg
machinery.
Signed-off-by: Sage Weil <sage@redhat.com>
The objecter actually always needs to get a response in order to
be able to not continually resend ops (even if the caller didn't
provide a callback). Thus, it makes no sense for an MOSDOp to
ever not have FLAG_ONDISK set. Therefore, we'll just remove the
helper and assume it's always there (it's safe to send a response
the client didn't ask for, the error paths already do that). On
the Objecter side, we'll just unconditionally fill in ONDISK for
the benefit of pre-luminous OSDs.
Fixes: http://tracker.ceph.com/issues/18961
Signed-off-by: Samuel Just <sjust@redhat.com>
I think that whole thing was a misguided attempt to avoid deleting head
if it exists in the base tier (in reality it doesn't matter since head
would have to be logically dirty and anything we actually care about
would be preserved by sending a new enough seq to cause a clone).
Introduced in 4843fd510b, but the real
logical error happened in f3df50188b.
I suggest never backporting this patch. If you want to try, keep in
mind that the last version didn't turn up as busted for 2 years.
Fixes: f3df50188b
Signed-off-by: Samuel Just <sjust@redhat.com>
qa/tasks/workunit: use the suite repo for cloning workunit
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Jason Dillaman <dillaman@redhat.com>
- This was there because cython did not know about ENOATTR
But since cython 0.25.2 tus is fixed.
And we don't need to edit /usr/include/errno.h
Signed-off-by: Willem Jan Withagen <wjw@digiware.nl>
as "workunits" reside in ceph/qa/workunits, it's more intuitive to
respect suite-repo option when cloning workunits.
Signed-off-by: Kefu Chai <kchai@redhat.com>
* sometimes, the coredump comes from python, so we should get the sha1 and
release in a different and more fragile way.
* also, the distro of Centos7 comes from python is "Centos Linux", so we
should normalize its distro name and distro version.
* add "-v" option to be more chatty.
* normalize the $prog if $prog is */python*
* fix the pkg_path if the distro is centos7
Signed-off-by: Kefu Chai <kchai@redhat.com>
With skip_partial_discard on, there may be no object request send calls,
because they are skipped.
Signed-off-by: Gui Hecheng <guihecheng@cmss.chinamobile.com>
The logic in RGWLibFS::mkdir() validated bucket names, but not
object names (though RGWLibFS::create() did so).
The negative side effect of this was not creating illegal objects
(we won't), but in a) failing with -EIO and b) more importantly,
not removing up the proposed object from FHCache, which produced a
boost assert when recycled.
Fixes: http://tracker.ceph.com/issues/19066
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>