Skip to content

I/O Request Scheduling

struct bio_rqueue {
struct list_head list;
uint64_t request_count;
bool dirty;
};

struct bio_rqueue referenced types:

struct bio_scheduler {
struct block_device *disk;
struct mutex lock;
uint64_t total_requests;
struct bio_rqueue queues[BIO_SCHED_LEVELS];
bool defer_pending;
};

struct bio_scheduler referenced types:

struct bio_scheduler_ops {
bool (*should_coalesce)(struct block_device *dev, const struct bio_request *a, const struct bio_request *b);
void (*do_coalesce)(struct block_device *dev, struct bio_request *into, struct bio_request *from);
void (*reorder)(struct block_device *dev);
uint32_t max_wait_time[BIO_SCHED_LEVELS];
uint32_t dispatch_threshold;
uint64_t boost_occupance_limit[BIO_SCHED_LEVELS];
uint64_t tick_ms;
uint64_t min_wait_ms;
};
bool noop_should_coalesce(struct block_device *disk, struct bio_request *a, struct bio_request *b);

noop_should_coalesce referenced types:

void noop_do_coalesce(struct block_device *disk, struct bio_request *into, struct bio_request *from);

noop_do_coalesce referenced types:

void noop_reorder(struct block_device *disk);

noop_reorder referenced types:

void bio_sched_enqueue(struct block_device *disk, struct bio_request *req);

bio_sched_enqueue referenced types:

void bio_sched_dequeue(struct block_device *disk, struct bio_request *req, bool already_locked);

bio_sched_dequeue referenced types:

void bio_sched_enqueue_internal(struct bio_scheduler *sched, struct bio_request *req);

bio_sched_enqueue_internal referenced types:

void bio_sched_dequeue_internal(struct bio_scheduler *sched, struct bio_request *req);

bio_sched_dequeue_internal referenced types:

void bio_sched_dispatch_partial(struct block_device *disk, enum bio_request_priority prio);

bio_sched_dispatch_partial referenced types:

void bio_sched_dispatch_all(struct block_device *disk);

bio_sched_dispatch_all referenced types:

void bio_sched_try_early_dispatch(struct bio_scheduler *sched);

bio_sched_try_early_dispatch referenced types:

bool bio_sched_try_coalesce(struct bio_scheduler *sched);

bio_sched_try_coalesce referenced types:

bool bio_sched_boost_starved(struct bio_scheduler *sched);

bio_sched_boost_starved referenced types:

struct bio_scheduler * bio_sched_create(struct block_device *disk, struct bio_scheduler_ops *ops);

bio_sched_create referenced types:

void update_request_timestamp(struct bio_request *req);

update_request_timestamp referenced types:

bool submit_if_urgent(struct bio_scheduler *sched, struct bio_request *req);

submit_if_urgent referenced types:

bool sched_is_empty(struct bio_scheduler *sched);

sched_is_empty referenced types:

bool submit_if_skip_sched(struct bio_scheduler *sched, struct bio_request *req);

submit_if_skip_sched referenced types:

#define BIO_SCHED_LEVELS 5
#define BIO_SCHED_MAX (BIO_SCHED_LEVELS - 1)
#define BIO_SCHED_STARVATION_BOOST 1
#define BIO_SCHED_BOOST_SHIFT_LIMIT 4
#define BIO_SCHED_COALESCE_SCAN_LIMIT 8
#define BIO_SCHED_MAX_BOOST_SCAN 32
#define BIO_SCHED_MAX_COALESCES 4