summaryrefslogtreecommitdiff
path: root/cpus.h
blob: d672daa48f0ffe1e60e3d59d26ecfeb388bbbbff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef CPUS_H
#define CPUS_H

#include <unistd.h>

static inline int get_number_cpus(void)
{
	return sysconf(_SC_NPROCESSORS_CONF);
}

static inline int get_number_cpus_online(void)
{
	return sysconf(_SC_NPROCESSORS_ONLN);
}

#endif /* CPUS_H */
ary='commit info' class='commit-info'> authorJosef Bacik <jbacik@fb.com>2016-05-17 13:30:55 -0400 committerDavid Sterba <dsterba@suse.com>2016-07-07 18:45:53 +0200 commit957780eb2788d8c218d539e19a85653f51a96dc1 (patch) tree92f45d1ab2a22012808a10371fe7c5019bed76fe parentc83f8effefa46c15f2fd43de598d9839d0056096 (diff)
Btrfs: introduce ticketed enospc infrastructure
Our enospc flushing sucks. It is born from a time where we were early enospc'ing constantly because multiple threads would race in for the same reservation and randomly starve other ones out. So I came up with this solution to block any other reservations from happening while one guy tried to flush stuff to satisfy his reservation. This gives us pretty good correctness, but completely crap latency. The solution I've come up with is ticketed reservations. Basically we try to make our reservation, and if we can't we put a ticket on a list in order and kick off an async flusher thread. This async flusher thread does the same old flushing we always did, just asynchronously. As space is freed and added back to the space_info it checks and sees if we have any tickets that need satisfying, and adds space to the tickets and wakes up anything we've satisfied. Once the flusher thread stops making progress it wakes up all the current tickets and tells them to take a hike. There is a priority list for things that can't flush, since the async flusher could do anything we need to avoid deadlocks. These guys get priority for having their reservation made, and will still do manual flushing themselves in case the async flusher isn't running. This patch gives us significantly better latencies. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat