Multipath用户进程代的码解析.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Multipath用户进程代的码解析

Multipath概要说明Multipath用户程序有两个,包括multipath和multipathd,其中multipath程序主要用来做查询多路径状态,multipathd程序主要用来响应硬件事件,并执行相应动作。从网上找的一张描述multipath整体调用流程的图片,从用户态到内核态multipath程序流程:首先调用sysfs_get_mnt_path,得到sysfs文件系统的挂载目录,一般情况下为/sys;然后调用configure,这个函数执行了剩下的所有事情:首先通过path_discovery从/sys下找到所有当前磁盘路径,放到结构体中pathvec中然后调用coalesce_paths,计算pathvec中每一条路径的wwid值,如果相同就聚合成一条mpp最后调用domap(mpp),执行多路径动作(例如:路径创建、路径删除、路径切换等等)multipath版本device-mapper-multipath-0.4.7-23.el5multipath用户态程序依赖库libsysfs.so从sysfs子系统内提取/sys/block/{sda,sdb...}磁盘信息对应源码包:sysfsutils-2.0.0-6.src.rpmlibdevmapper.so重新封装ioctl接口,供libmultipath.so库以及kpartx调用主要提供函数接口如:dm_task_create dm_task_run dm_task_destroy等对应源码包:device-mapper-1.02.28-2.el5.src.rpmlibmultipath.so供multipath、multipathd等程序调用主要提供函数接口如:coalesce_paths、add_map_without_path、add_map_with_path、remove_map、remove_maps等对应源码包:device-mapper-multipath-0.4.7-23.el5.src.rpm以命令执行为入口,一步步分析代码流程:生成多路径信息multipath -v3命令执行概要扫描sysfs下所有磁盘,得到所有块设备,包括本机硬盘,U盘,所有scsi存储,过滤掉黑名单(blacklist)中的设备,通过scsi_id命令得到磁盘的scsi-id,并将相同scsi-id的磁盘归类为一个多路径,最后调用ioctl发往内核核心数据结构struct vectors vecs {struct vector *pathvec;# 存储单独的一条磁盘信息,如sda、sdb等struct vector *mpvec;# 存储聚合后的多路径信息,如dm-0、dm-1等}主函数调用流程执行 main - configure - path_discovery、coalesce_pathspath_discovery函数流程从sysfs子系统提取所有路径,如sda,sdb... 遍历这些路径,依次调用path_discover,在path_discover中,过滤掉黑名单(blacklist)中的磁盘设备,再调用pathinfo获得与磁盘有关的信息:wwid、vendor_id、product_id、sg_id.{host_no,channel,scsi_id,lun}等,最终将所有单条路径信息填入vecs-pathvec结构中其中获得wwid的函数为get_uid,主要就是调用程序/sbin/scsi_id -g -u -s /block/%n 获得磁盘wwid信息coalesce_paths(聚合路径)函数流程仍然是遍历vecs-pathvec中所有路径,将path.size 和 path.wwid相同的路径聚合为一条多路径,最终调用domap(ACT_CREATE)创建一条多路径,并填充到结构体vecs-mpvec中domap函数流程domap 参数主要有创建ACT_CREATE、重新生成多路径ACT_RELOAD、切换路径ACT_SWITCHPG、多路径重命名ACT_RENAME根据参数不同,调用如下函数:函数名函数说明dm_addmap创建一条多路径dm_map_present检测内核是否已经存在某条多路径dm_flush_map删除一条多路径dm_switchgroup主备模式下的路径切换dm_fail_path废掉一条路径dm_reinstate_path恢复一条路径dm_queue_if_no_path改变多路径行为:若多路径下没有任何可用路径,是否缓存写队列dm_rename重命名某条多路径的别名(alias)domap(ACT_CREATE) - dm_addmap - dm_task_run (在libdevmapper.so.

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档