Ceph iSCSI Gateway:tcmu-runner代码原理详解

背景

tcmu-runner在ceph iscsi gateway中是linux内核到ceph rbd间的桥梁,用于识别SCSI命令字,并根据命令字含义,调用librbd接口实现命令字的处理。详细描述见Ceph iSCSI Gateway:架构原理详解一文。

本文结论

  • 设备添加
    • 通过监听netlink识别iSCSI块设备添加。
    • 添加过程中mmap共享内存(用于内核和用户态的命令字传输),并进行rbd_open。
  • SCSI命令字处理
    • 通过启动一个线程扫描mmap中为处理的命令字。
    • 扫描到命令字后调用rbd相关接口处理。
    • 处理完成后将处理结果和数据填写到mmap共享内存中。
  • exclusive锁处理
    • tcmu-runner采用了其中描述的显式加锁方法StandardPolicy。
    • 一定不能将multipath配置成AA模式,配置成AA模式会导致exclusive-lock在不同的tcmu-runner客户端一直切换。

代码详解

创建块设备

通过netlink与内核configfs交互,当target中新增rbd image后,此tcmu-runner客户端会收到消息,并创建块设备。核心代码包括:

  • 注册netlink
  • 创建块设备

设置netlink

函数调用关系如下:

static struct genl_cmd tcmu_cmds[] = {
   
	{
   
		.c_id		= TCMU_CMD_ADDED_DEVICE,
		.c_name		= "ADDED DEVICE",
		.c_msg_parser	= handle_netlink,
		.c_maxattr	= TCMU_ATTR_MAX,
		.c_attr_policy	= tcmu_attr_policy,
	},
	{
   
		.c_id		= TCMU_CMD_REMOVED_DEVICE,
		.c_name		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值