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:
Defines
Section titled “Defines”#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