bcache拥塞控制

2 篇文章 0 订阅

bcache拥塞控制原理代码层梳理

概述

bcache的拥塞只针对cache设备侧的监控,一个bcache设备的拥塞控制是读写共用的:即配置了读/写拥塞任意一个,都会对整个bcache的IO下发造成影响。

拥塞控制原理(3.10内核)

通过代码走读,其拥塞控制拥有“监控端”“控制端”两部分。

监控端负责在IO完成时发现当前设备是否出现“拥塞”状况,同时调整拥塞值。

控制端负载在IO下发前根据设备拥塞值评估是否要下发IO到cache盘。

1.监控端

bcache读写cache盘的开始和结束,会进行用IO耗时计算工作。具体分为写IO处理流程和读IO处理流程:

写IO:

下发IO前记录IO下发时间:
__bch_submit_bbio
	-> b->submit_time_us = local_clock_us();
写IO返回后:
cached_dev_write_complete
	-> cached_dev_bio_complete
		-> search_free
			-> bio_complete      标记该IO完成
				-> bio_endio
					-> bch_insert_data_endio   
						-> bch_bbio_endio
							-> bch_bbio_count_io_errors  拥塞控制监控函数

读IO:

下发IO前记录IO下发时间:
__bch_submit_bbio
	-> b->submit_time_us = local_clock_us();       记录下发时间
读IO cache miss返回后:
request_read_done_bh
	-> request_read_done
		-> bio_complete
			-> bio_endio
				-> bch_cache_read_endio
					-> bch_bbio_endio
						-> bch_bbio_count_io_errors  拥塞控制监控

bch_bbio_count_io_errors函数做的事情:

在这里插入图片描述

2.控制端

在IO下发前根据当前cache设备的拥塞状态,即将下发的IO信息,判断是否触发拥塞控制。

触发流程:
request_write/read:
	-> check_should_skip
		-> bch_get_congested

bch_get_congested做的事情:

在这里插入图片描述

check_should_skip做的事情:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值