CN114185650B - Linux系统下识别SCSI设备的方法、系统、设备及存储介质 - Google Patents
Linux系统下识别SCSI设备的方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN114185650B CN114185650B CN202111525202.4A CN202111525202A CN114185650B CN 114185650 B CN114185650 B CN 114185650B CN 202111525202 A CN202111525202 A CN 202111525202A CN 114185650 B CN114185650 B CN 114185650B
- Authority
- CN
- China
- Prior art keywords
- host
- shared
- adapter
- adapters
- hosts
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明提出一种Linux系统下识别SCSI设备的方法、系统、设备及存储介质,该方法包括:对主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;根据所述主机适配器的配置信息获取目标设备资源绑定信息;根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况;若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机。本发明实施例避免同一时间戳中多个线程访问同一个主机适配器,避免线程的阻塞。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种Linux系统下识别SCSI设备的方法、系统、设备及存储介质。
背景技术
在当前业内各类存储技术中,小型计算机系统接口(Small Computer SystemInterface,简称SCSI)是常用且重要的数据传输协议之一,它支撑着操作系统对外部设备的I/O操作,实际应用场景中,在Linux系统上添加一个新的SCSI磁盘是不需要重启的,一般可以通过扫描发现的操作来识别就绪设备。
以下是目前常用的两种扫描方法:
1)通过/sys下的属性设置进行SCSI扫描:
#echo‘---’>/sys/class/scsi_host/host[n]/scan。
该方法中,/sys所挂载的并不是一个真正意义的文件系统,而是一个供内核数据结构进行调用的接口,其本身包含关于设备、内核模块、文件系统及其他内核组件的信息。
2)通过sg3_utils所提供的rescan-scsi-bus.sh脚本进行扫描:
#./rescan-scsi-bus.sh。
该方案中,无需配置主机总线编号(上一方案中[n]值),适用于对于RHEL/CentOS6/7及以上系统版本。但是该类型任务(I/O级别)在Linux调度中只允许串行。
对于单台主机而言,由于上下层存在多对多的关系,执行过程中会对不同链路下相同的设备进行重复扫描;对于主机集群而言,通常是会有同一个逻辑单元映射到不同主机的情况,如果在同一时间进行扫盘操作将加重此类现象。
由上陈述可发现,当前Linux系统在进行SCSI磁盘扫描时存在如下问题:
对相同设备或者相同逻辑单元进行了多次的扫描,在同时间戳的情况下容易造成进程阻塞;多逻辑单元扫描的目的是建立起上下层对应关系,而对于共享逻辑单元而言,获取到唯一的逻辑单元ID即可,现有技术中在短时间内发起多台主机相同的扫描任务,也会导致进程阻塞。
发明内容
本发明提供一种Linux系统下识别SCSI设备的方法、系统、设备及存储介质,其主要目的在于避免同一时间戳中多个线程访问同一个主机适配器,避免线程的阻塞。
第一方面,本发明实施例提供一种Linux系统下识别SCSI设备的方法,包括:
对与主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
优选地,所述若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,按照如下公式分配:
(i+x-1)%m,
其中,i表示主机编号,x表示第几次时间戳的扫描任务,m表示共享主机适配器的个数,%表示取余。
优选地,还包括:若所述共享主机个数大于所述共享主机适配器个数,则为每一共享主机适配器分别分配一个共享主机,将剩余主机适配器分配给剩余共享主机和非共享主机,以使得同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一共享主机对应的共享主机适配器相连接的目标设备,以识别新接入的SCSI设备。
优选地,还包括:根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在一个主机对应多个主机适配器、且多个主机适配器共享一个目标设备的情况,若存在,将与多个主机适配器连接的目标设备作为共享目标设备;
将所述共享目标设备连接的其中一个主机适配器设置为高优先级,在执行扫描任务的过程中,根据所述主机适配器连接的目标设备信息,先扫描高优先级主机适配器对应的目标设备,以识别新接入的SCSI设备。
优选地,还包括:
将所述共享目标设备连接的其它主机适配器设置为低优先级;
在同一时间戳内,通过高优先级主机适配器对应的通道扫描目标设备,低优先级的主机适配器对应的通道不扫描。
优选地,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向上遍历父设备,获取所述主机的个数、所述主机适配器连接的主机信息。
优选地,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向下遍历子设备,获取所述主机适配器连接的目标设备信息。
第二方面,本发明实施例提供一种Linux系统下识别SCSI设备的系统,包括:
配置模块,用于对与主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
资源模块,用于根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
共享模块,用于根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
识别模块,用于若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
第三方面,本发明实施例提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述Linux系统下识别SCSI设备的方法的步骤。
第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述Linux系统下识别SCSI设备的方法的步骤。
本发明提出的一种Linux系统下识别SCSI设备的方法、系统、设备及存储介质,通过对不同的共享主机分配不同的共享主机适配器,避免多个线程在同一时间戳访问同一个主机适配器,一定程度上可使同一时间段内尽可能少的相同扫描任务被放入队列,降低进程等待的时间,减少反复扫描带来的I/O繁忙问题。
附图说明
图1为本发明实施例提供的一种Linux系统下识别SCSI设备的方法的场景示意图;
图2为本发明实施例提供的一种Linux系统下识别SCSI设备的方法流程图;
图3为现有技术中基于SCSI的Linux系统分层架构的示意图;
图4为本发明实施例中共享主机个数等于共享主机适配器个数的情况连接示意图;
图5为本发明实施例中共享主机个数小于共享主机适配器个数的情况连接示意图;
图6为本发明实施例中共享主机个数大于共享适配器个数的情况示意图;
图7为本发明实施例中一个主机同时与多个目标设备连接的情况示意图;
图8为本发明实施例提供的一种Linux系统下识别SCSI设备的系统结构示意图;
图9为本发明实施例中提供一种计算机设备的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为本发明实施例提供的一种Linux系统下识别SCSI设备的方法的场景示意图,如图1所示,用户在客户端中写入识别指令,并将该识别指令发送给服务端。服务端接收到该识别指令后,执行该Linux系统下识别SCSI设备的方法,以实现对用户的回访。
需要说明的是,服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。客户端可为智能手机、平板电脑、笔记本电脑、台式计算机等,但并不局限于此。客户端和服务端可以通过蓝牙、USB(Universal Serial Bus,通用串行总线)或者其他通讯连接方式进行连接,本发明实施例在此不做限制。
图2为本发明实施例提供的一种Linux系统下识别SCSI设备的方法流程图,如图2所示,该方法包括:
Linux SCSI模型是内核的抽象,主机适配器连接主机IO总线(如PCI总线)和存储IO总线(如SCSI总线)。一台计算机可以有多个主机适配器,而主机适配器可以控制一条或多条SCSI总线,一条总线可以有多个目标设备与之相连,并且一个目标节点可以有多个逻辑单元。即内核与主机适配器之间是多对多的关系,主机适配器和目标设备之间是多对多的关系。
在Linux SCSI子系统中,内核中的目标节点(target)可以是SCSI磁盘,SCSI磁盘中可以有多个逻辑单元,统一由磁盘控制器控制,这些逻辑单元才是真正作为IO终点的存储设备,内核用设备(device)对逻辑单元进行抽象;内核中的Host对应主机适配器,内核使用四元组来唯一标识一个SCSI磁盘的逻辑单元,四元组为host、channel、id和lun,其中,host表示主机适配器的唯一编号;channel表示主机适配器中SCSI通道编号,由主机适配器固件维护;id表示目标设备唯一标识符;lun表示目标设备内逻辑单元编号。
现有的扫描发现新磁盘的逻辑过程可以为:
先识别所有主机适配器,然后对每个主机适配器连接的目标设备进行识别,最后对每个目标设备的逻辑单元进行识别。该方法对相同设备或者相同逻辑单元进行了多次的扫描,在同时间戳的情况下容易造成进程阻塞;多逻辑单元扫描的目的是建立起上下层对应关系,而对于共享逻辑单元而言,获取到唯一的逻辑单元ID即可,现有技术中在短时间内发起多台主机相同的扫描任务,也会导致进程阻塞。
针对上述问题,本发明实施例提供一种Linux系统下识别SCSI设备的方法,其具体实施过程如下:
S210,对与主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
安装Linux系统的主机在刚开始运行时,为了描述方便,下文将安装Linux系统的主机均简称为主机,会对所有的SCSI设备进行扫描,并在主机上生成与扫描相对应的记录,比如将扫描过的SCSI设备均添加至自身创建的/sys目录下,这样,如果一个设备在/sys目录下,那么这个设备就已经被主机扫描过,实际应用中,添加至/sys目录下的可能是SCSI标识信息,比如SCSI设备编号等。但是新接入的SCSI设备没有被扫描过,没有被主机扫描过,故也不在该目录下。
当需要识别新加入的SCSI设备时,需要对主机上所挂载的所有SCSI设备都进行一次扫描,并将扫描设备与/sys目标下记录的信息进行比较,就可以识别新接入的SCSI设备。本发明实施例中的SCSI设备可以是SCSI磁盘、光驱、软驱、打印机、扫描仪等等,本发明实施例在此不做具体的限定。
主机适配器是能让主机与外围设备进行通信的端口,是与SCSI物理接口连接的实际驱动器,因此,先对主机适配器进行识别,主机与适配器之间也是多对多的关系,可以是一个主机上有多个适配器,也可以是多个主机共享某几个主机适配器。
图3为现有技术中基于SCSI的Linux系统分层架构的示意图,如图3所示,该架构包括低层、中层和高层。低层代表与SCSI的物理接口的实际驱动器,例如各个厂商为其特定的主机适配器(Host Bus Adapter,简称HBA)开发的驱动,低层驱动主要作用是发现连接到主机适配器的SCSI设备,在内存中构建SCSI子系统所需的数据结构,并提供消息传递接口,将SCSI命令的接受与发送解释为主机适配器的操作。中层代表包含scsi栈的公共服务函数。高层代表各种SCSI设备类型的驱动,如SCSI磁盘驱动、SCSI磁带驱动、高层驱动认领低层驱动发现的SCSI设备,为这些设备分配名称,将对设备的IO转换为SCSI命令,交由低层驱动处理。高层和低层通过调用中层的函数完成其功能,而中层在执行过程中,也需要调用高层和低层注册的回调函数做一些个性化处理。
对与主机连接的主机适配器进行识别,具体通过#lscpu(查看CPU和处理单元的信息)、#cat/proc/cpuinfo(查看CPU信息)、#cat/proc/loadavg(查看系统负载)、#lshw(通用的工具,可以列出多种硬件单元的详细或者概要的信息,比如CPU、内存、usb控制器、硬盘等。lshw能够从各个“/proc”文件中提取出相关的信息)等指令进行信息提取,可以识别出其相应主机、对应低层中的驱动器、中层中的公共服务函数、以及高层中的设备类型驱动等信息,提取出来并将其作为配置信息,配置信息包括主机适配器描述结构两部分内容。
S220,根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
具体地,根据配置信息中SCSI目标设备描述结构可以通过Linux内核设备树向上遍历父设备的方法找到对应的主机适配器,完成主机适配器与主机之间的关联,并提取出主机适配器和主机之间的关联信息。
由于主机适配器和目标设备之间也是多对多的连接关系,因此,还需要识别主机适配器和目标设备之间的连接关系,Linux系统自动识别同一SCSI设备下的多个目标设备,同样也是采用向上遍历的方法,找到与每个主机适配器对应的目标设备,完成目标设备与主机适配器之间的关联,并提取出目标设备与主机适配器之间的关联信息。
根据配置信息中的目标设备描述结构、主机适配器描述结构得到目标设备资源绑定信息,主机适配器与目标设备之间也是多对多的对应关系,而主机适配器的配置信息中记载了该主机适配器两端连接的主机和目标设备,根据每个主机适配器连接的主机编号、目标设备的编号,可以得出该系统中目标设备的共享情况。
S230,根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
根据前面得到的每个主机适配器连接的主机编号、目标设备的编号等信息,判断该情况下存在一个还是多个主机,如果存在多个主机,看是否存在多个主机共享多个主机适配器的情况,图4为本发明实施例中共享主机个数等于共享主机适配器个数的情况连接示意图,如图4所示,对于主机1、主机2和主机3,其均与主机适配器1、主机适配器2和主机适配器3连接,对于该情况,主机1、主机2和主机3均为共享主机,主机适配器1、主机适配器2和主机适配器3均为共享主机适配器,此处共享主机的个数为3,共享适配器即为被共享主机进行共享的主机适配器,此处共享主机适配器的个数为3,共享主机和共享适配器的个数相等。
S240,若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
在进行扫描时,在一个时间戳中,分别为每个共享主机分配一个不同的共享主机适配器,不同的共享主机适配器分别连接不同的目标设备,可以保证在一个时间戳内线程访问的是不同的目标设备,具体分配规则为在当前时间戳中,分为主机1、主机2和主机3分配的主机适配器1、主机适配器2和主机适配器3;在下一时间戳中,分别为主机1、主机2、主机3分配主机适配器2、主机适配器3和主机适配器1。这样保证在同一时间戳不会有多个线程访问同一主机适配器,如此,可以保证同一时间扫描不同的主机分配器和目标设备,避免了线程的阻塞。
图5为本发明实施例中共享主机个数小于共享主机适配器个数的情况连接示意图,如图5所示,主机1、主机2均与主机适配器1、主机适配器2、主机适配器3连接,而主机3只与主机适配器3连接,此处,主机1和主机2均为共享主机,主机适配器1、主机适配器2和主机适配器3均为共享主机适配器,由于主机3只能通过主机适配器3与外部连接,因此,先将主机适配器3分配给主机3,在当前时间戳中,为主机1、主机2分配主机适配器1和主机适配器2;在下一时间戳中,为主机1和主机2分配主机适配器2和主机适配器1。
本发明实施例提供一种Linux系统下识别SCSI设备的方法,通过对不同的共享主机分配不同的共享主机适配器,避免线程同一时间访问同一主机适配器,一定程度上可使同一时间段内尽可能少的相同扫描任务被放入队列,降低进程等待的时间,减轻反复扫描带来的I/O繁忙问题。
在上述实施例的基础上,优选地,所述若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,按照如下公式分配:
(i+x-1)%m,
其中,i表示主机编号,x表示第几次时间戳的扫描任务,m表示共享主机适配器的个数,%表示取余。
以上述例子为例,则m=3,在当前时间戳中,执行第1次扫描任务,共享主机1分配的共享主机适配器的编号为:(1+1-1)%3=1,即共享主机1分配主机适配器1;共享主机2分配的共享主机适配器的编号为:(2+1-1)%3=2,即共享主机2分配主机适配器2;共享主机3分配的共享主机适配器的编号为:(3+1-1)%3=3,即共享主机3分配主机适配器3。
在下一个时间戳中,执行第2次扫描任务,共享主机1分配的共享主机适配器的编号为:(1+2-1)%3=2,即共享主机1分配主机适配器2;共享主机2分配的共享主机适配器的编号为:(2+2-1)%3=3,即共享主机2分配主机适配器3;共享主机3分配的共享主机适配器的编号为:(3+2-1)%3=1,即共享主机3分配主机适配器1。
在下下一个时间戳中,执行第3次扫描任务,共享主机1分配的共享主机适配器的编号为:(1+3-1)%3=3,即共享主机1分配主机适配器3;共享主机2分配的共享主机适配器的编号为:(2+3-1)%3=1,即共享主机2分配主机适配器1;共享主机3分配的共享主机适配器的编号为:(3+3-1)%3=2,即共享主机3分配主机适配器2。
按照上述描述方式,在同一时间戳内不同主机可以通过不同主机适配器扫描,避免了同一线程的阻塞。
在具体实施时,将共享主机设置为高优先级,非共享主机设置为低优先级,放置在一个队列中,先从相应队列中提取高优先级的共享主机,为高优先级的共享主机分配共享主机适配器,然后再为低优先级的主机分配合适的主机适配器,通过对主机管理进行补充,减轻反复扫描带来的I/O繁忙问题。
主机初始识别往往是高耗时的阶段,在现有扫盘机制下无法规避主机同时等待相同SCSI线的情况,如采用以上定义优先扫描通道组的方案,一定程度上可使同一时间段内尽可能少的相同扫描任务被放入队列,降低进程等待的时间。
在上述实施例的基础上,优选地,还包括:
若所述共享主机个数大于所述共享主机适配器个数,则为每一共享主机适配器分别分配一个共享主机,将剩余主机适配器分配给剩余主机,以使得同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一共享主机对应的共享主机适配器相连接的目标设备,以识别新接入的SCSI设备。
图6为本发明实施例中共享主机个数大于共享适配器个数的情况示意图,如图6所示,主机1与主机适配器1、主机适配器2连接,主机2与主机适配器1、主机适配器2连接,主机3与主机适配器1、主机适配器2、主机适配器3连接,主机1、主机2、主机3均为共享主机,主机适配器1、主机适配器2均为共享主机适配器,此时,共享主机的个数为3,共享主机适配器的个数为2,在一个时间戳内,由于共享主机的个数大于共享适配器的个数,因此,以共享适配器为参照基准,为每个共享主机适配器分配一个共享主机,在当前时间戳内,为主机1、主机2分别分配主机适配器1、主机适配器2,为主机3分配主机适配器3;在下一时间戳内,为主机1、主机2分别分配主机适配器2、主机适配器1,为主机3分配主机适配器3。
分配完成后,通过不同的线程,通过与主机相连的主机适配器,扫描与主机适配器连接的目标设备,扫描后获取所有连接的SCSI编号,并与/sys目录下已经存储的SCSI编号进行比较,可以识别新接入的SCSI设备。
在上述实施例的基础上,优选地,还包括:
根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在一个主机对应多个主机适配器、且多个主机适配器共享一个目标设备的情况,若存在,将与多个主机适配器连接的目标设备作为共享目标设备;
将所述共享目标设备连接的其中一个主机适配器设置为高优先级,在执行扫描任务的过程中,根据所述主机适配器连接的目标设备信息,先扫描高优先级主机适配器对应的目标设备,以识别新接入的SCSI设备。
如果该情况下只存在一个主机,一个主机相连多个主机适配器,并且其中介个主机适配器共同连接一个目标设备,如果存在这种情况,将共享的目标设备对应的其中一个主机适配器设置为高扫描优先级。图7为本发明实施例中一个主机同时与多个目标设备连接的情况示意图,如图7所示,主机1相连的主机适配器有主机适配器1、主机适配器2、主机适配器3和主机适配器4,主机适配器1和主机适配器2共同连接目标设备1,主机适配器3和主机适配器4共同连接目标设备2,对于目标设备1,可以将主机适配器1或者主机适配器2设置为高扫描优先级,本发明实施例中以将主机适配器1设置为高扫描优先级为例进行说明,对于目标设备2,可以将主机适配器3或者主机适配器4设置为高扫描优先级,本发明实施例中以将主机适配器3设置为高扫描优先级为例进行说明。
因此,在进行扫描时,先通过主机适配器1和主机适配器3进行目标设备的扫描,然后再通过主机适配器2和主机适配器4进行目标设备的扫描,可以避免同时访问一个目标设备,从而造成线程堵塞。
通过实验验证,可以优化单台主机的扫描发现,提高执行效率并减少I/O等待。
在仅作唯一逻辑单元识别的场景下,单主机扫盘的效率预计可升: 其中n为主机连接的主机适配器个数,且n>2。由该公式可知效率提升范围在[33%,50%)。
在上述实施例的基础上,优选地,还包括:
将所述共享目标设备连接的其它主机适配器设置为低优先级;
在同一时间戳内,通过高优先级主机适配器对应的通道扫描目标设备,低优先级的主机适配器对应的通道不扫描。
以图7为例进行说明,目标设备1和目标设备2均为共享目标设备,主机适配器1和主机适配器3为高优先级主机适配器,主机适配器2和主机适配器4为低优先级主机适配器,在一个时间戳中,只通过主机适配器1对应的通道对目标设备器1进行扫描,只通过主机适配器3对应的通道对目标设备器2进行扫描,而主机适配器2和主机适配器4对应的通道则不进行扫描操作,等待进入下一个时间戳或者当前时间戳任务执行时出现异常情况,则通过主机适配器2对应的通道对目标设备器1进行扫描,通过主机适配器4对应的通道对目标设备器2进行扫描,而主机适配器1和主机适配器3对应的通道则不进行扫描操作,以此避免线程堵塞。
在上述实施例的基础上,优选地,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向上遍历父设备,获取所述主机的个数、所述主机适配器连接的主机信息。
具体地,根据配置信息中主机适配器的描述结构,通过Linux内核设备树向上遍历父设备,得到主机的个数、主机适配器连接的主机信息。
在上述实施例的基础上,优选地,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向下遍历子设备,获取所述主机适配器连接的目标设备信息。
具体地,根据配置信息中主机适配器的描述结构,通过Linux内核设备树向下遍历子设备,得到主机适配器连接的目标设备信息。
综上,本发明实施例提供一种Linux系统下识别SCSI设备的方法,在配置多链路管理软件作负载均衡的场景下,需完成全链路即主机适配器的扫描,该种方式同样可带来一定的效率提升,相近时间内尽可能避免了连续扫描同一目标设备的情况,减少其它I/O操作出现长时间等待的情况。
图8为本发明实施例提供的一种Linux系统下识别SCSI设备的系统结构示意图,如图8所示,该系统包括:
配置模块810,用于对主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
资源模块820,用于根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
共享模块830,用于根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
识别模块840,用于若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
本实施例为与上述方法实施例相对应的系统实施例,具体实施过程与上述方法实施例相同,详情请参考上述方法实施例,本系统实施例在此不再赘述。
在上述实施例基础上,优选地,在所述识别模块中,所述若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,按照如下公式分配:
(i+x-1)%m,
其中,i表示主机编号,x表示第几次时间戳的扫描任务,m表示共享主机适配器的个数,%表示取余。
在上述实施例基础上,优选地,还包括第一检测模块,其中:
所述第一检测模块用于若所述共享主机个数大于所述共享主机适配器个数,则为每一共享主机适配器分别分配一个共享主机,将剩余主机适配器分配给剩余主机,以使得同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一共享主机对应的共享主机适配器相连接的目标设备,以识别新接入的SCSI设备。
在上述实施例基础上,优选地,还包括第二检测模块和第三检测模块,其中:
所述第二检测模块用于根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在一个主机对应多个主机适配器、且多个主机适配器共享一个目标设备的情况,若存在,将与多个主机适配器连接的目标设备作为共享目标设备;
所述第三检测模块用于将所述共享目标设备连接的其中一个主机适配器设置为高优先级,在执行扫描任务的过程中,根据所述主机适配器连接的目标设备信息,先扫描高优先级主机适配器对应的目标设备,以识别新接入的SCSI设备。
在上述实施例基础上,优选地,还包括设置模块和扫描模块,其中:
所述设置模块用于将所述共享目标设备连接的其它主机适配器设置为低优先级;
所述扫描模块用于在同一时间戳内,通过高优先级主机适配器对应的通道扫描目标设备,低优先级的主机适配器对应的通道不扫描。
在上述实施例基础上,优选地,所述资源模块中,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向上遍历父设备,获取所述主机的个数、所述主机适配器连接的主机信息。
在上述实施例基础上,优选地,所述资源模块中,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向下遍历子设备,获取所述主机适配器连接的目标设备信息。
上述Linux系统下识别SCSI设备的系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图9为本发明实施例中提供一种计算机设备的结构示意图,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括计算机存储介质、内存储器。该计算机存储介质存储有操作系统、计算机程序和数据库。该内存储器为计算机存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储执行Linux系统下识别SCSI设备的方法过程中生成或获取的数据,如配置信息、目标设备资源绑定信息。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种Linux系统下识别SCSI设备的方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中的Linux系统下识别SCSI设备的方法的步骤。或者,处理器执行计算机程序时实现Linux系统下识别SCSI设备的系统这一实施例中的各模块/单元的功能。
在一实施例中,提供一计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中Linux系统下识别SCSI设备的方法的步骤。或者,该计算机程序被处理器执行时实现上述Linux系统下识别SCSI设备的系统这一实施例中的各模块/单元的功能。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种Linux系统下识别SCSI设备的方法,其特征在于,包括:
对与主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
2.根据权利要求1所述的Linux系统下识别SCSI设备的方法,其特征在于,所述若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,按照如下公式分配:
(i+x-1)%m,
其中,i表示主机编号,x表示第几次时间戳的扫描任务,m表示共享主机适配器的个数,%表示取余。
3.根据权利要求1所述的Linux系统下识别SCSI设备的方法,其特征在于,还包括:
若所述共享主机个数大于所述共享主机适配器个数,则为每一共享主机适配器分别分配一个共享主机,将剩余主机适配器分配给剩余共享主机和非共享主机,以使得同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一共享主机对应的共享主机适配器相连接的目标设备,以识别新接入的SCSI设备。
4.根据权利要求1所述的Linux系统下识别SCSI设备的方法,其特征在于,还包括:
根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在一个主机对应多个主机适配器、且多个主机适配器共享一个目标设备的情况,若存在,将与多个主机适配器连接的目标设备作为共享目标设备;
将所述共享目标设备连接的其中一个主机适配器设置为高优先级,在执行扫描任务的过程中,根据所述主机适配器连接的目标设备信息,先扫描高优先级主机适配器对应的目标设备,以识别新接入的SCSI设备。
5.根据权利要求4所述的Linux系统下识别SCSI设备的方法,其特征在于,还包括:
将所述共享目标设备连接的其它主机适配器设置为低优先级;
在同一时间戳内,通过高优先级主机适配器对应的通道扫描目标设备,低优先级的主机适配器对应的通道不扫描。
6.根据权利要求1至5任一所述的Linux系统下识别SCSI设备的方法,其特征在于,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向上遍历父设备,获取所述主机的个数、所述主机适配器连接的主机信息。
7.根据权利要求6所述的Linux系统下识别SCSI设备的方法,其特征在于,所述根据所述主机适配器的配置信息获取目标设备资源绑定信息,包括:
根据所述配置信息中的主机适配器描述结构,通过Linux内核设备树向下遍历子设备,获取所述主机适配器连接的目标设备信息。
8.一种Linux系统下识别SCSI设备的系统,其特征在于,包括:
配置模块,用于对与主机连接的主机适配器进行识别,获取所述主机适配器的配置信息;
资源模块,用于根据所述主机适配器的配置信息获取目标设备资源绑定信息,所述目标设备资源绑定信息包括所述主机的个数、所述主机适配器连接的主机信息、所述主机适配器连接的目标设备信息;
共享模块,用于根据所述主机的个数、所述主机适配器连接的主机信息,判断是否存在多个主机共享多个主机适配器的情况,若存在,则将与多个主机连接的主机适配器作为共享主机适配器,将与多个主机适配器连接的主机作为共享主机;
识别模块,用于若所述共享主机个数不大于所述共享主机适配器的个数,则为每一共享主机分别分配一个共享主机适配器,将未分配的共享主机适配器分配给其它非共享主机,以保证同一时间戳主机与主机适配器一一对应,并根据所述主机适配器连接的目标设备信息,扫描与每一主机对应的主机适配器相连接的目标设备,以识别新接入的SCSI设备。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述Linux系统下识别SCSI设备的方法的步骤。
10.一种计算机存储介质,所述计算机存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述Linux系统下识别SCSI设备的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111525202.4A CN114185650B (zh) | 2021-12-14 | 2021-12-14 | Linux系统下识别SCSI设备的方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111525202.4A CN114185650B (zh) | 2021-12-14 | 2021-12-14 | Linux系统下识别SCSI设备的方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114185650A CN114185650A (zh) | 2022-03-15 |
CN114185650B true CN114185650B (zh) | 2023-07-25 |
Family
ID=80543669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111525202.4A Active CN114185650B (zh) | 2021-12-14 | 2021-12-14 | Linux系统下识别SCSI设备的方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114185650B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004355638A (ja) * | 1999-08-27 | 2004-12-16 | Hitachi Ltd | 計算機システム及びそのデバイスの割り当て方法 |
CN101566923A (zh) * | 2008-04-25 | 2009-10-28 | 中兴通讯股份有限公司 | 一种目标端scsi设备统一驱动模块及方法 |
CN101788971A (zh) * | 2003-12-18 | 2010-07-28 | 英特尔公司 | 适配器接口的地址分配 |
CN101848203A (zh) * | 2004-07-14 | 2010-09-29 | 国际商业机器公司 | 在网络协议处理的卸载中支持连接建立的设备和方法 |
CN103986602A (zh) * | 2014-05-16 | 2014-08-13 | 华为技术有限公司 | 一种启动操作系统的方法、相关设备和系统 |
CN105320628A (zh) * | 2015-11-06 | 2016-02-10 | 中国科学院计算技术研究所 | 使能单根i/o设备多根共享的适配装置、系统及方法 |
CN107209681A (zh) * | 2015-10-21 | 2017-09-26 | 华为技术有限公司 | 一种存储设备访问方法、装置和系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6453392B1 (en) * | 1998-11-10 | 2002-09-17 | International Business Machines Corporation | Method of and apparatus for sharing dedicated devices between virtual machine guests |
US7685476B2 (en) * | 2006-09-12 | 2010-03-23 | International Business Machines Corporation | Early notification of error via software interrupt and shared memory write |
US7970903B2 (en) * | 2007-08-20 | 2011-06-28 | Hitachi, Ltd. | Storage and server provisioning for virtualized and geographically dispersed data centers |
US9515899B2 (en) * | 2012-12-19 | 2016-12-06 | Veritas Technologies Llc | Providing optimized quality of service to prioritized virtual machines and applications based on quality of shared resources |
-
2021
- 2021-12-14 CN CN202111525202.4A patent/CN114185650B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004355638A (ja) * | 1999-08-27 | 2004-12-16 | Hitachi Ltd | 計算機システム及びそのデバイスの割り当て方法 |
CN101788971A (zh) * | 2003-12-18 | 2010-07-28 | 英特尔公司 | 适配器接口的地址分配 |
CN101848203A (zh) * | 2004-07-14 | 2010-09-29 | 国际商业机器公司 | 在网络协议处理的卸载中支持连接建立的设备和方法 |
CN101566923A (zh) * | 2008-04-25 | 2009-10-28 | 中兴通讯股份有限公司 | 一种目标端scsi设备统一驱动模块及方法 |
CN103986602A (zh) * | 2014-05-16 | 2014-08-13 | 华为技术有限公司 | 一种启动操作系统的方法、相关设备和系统 |
CN107209681A (zh) * | 2015-10-21 | 2017-09-26 | 华为技术有限公司 | 一种存储设备访问方法、装置和系统 |
CN105320628A (zh) * | 2015-11-06 | 2016-02-10 | 中国科学院计算技术研究所 | 使能单根i/o设备多根共享的适配装置、系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114185650A (zh) | 2022-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9965826B2 (en) | Resource management | |
US20170277530A1 (en) | Technologies for securing a firmware update | |
US20140164666A1 (en) | Server and method for sharing peripheral component interconnect express interface | |
WO2018157588A1 (zh) | 固件烧录方法、系统、计算机设备和存储介质 | |
US20200150903A1 (en) | Method for executing hard disk operation command, hard disk, and storage medium | |
KR101636892B1 (ko) | 플래시 메모리 저장 장치에서 동적 메모리 할당에 의해 일어나는 자기 축출을 회피하는 방법 | |
CN111338779B (zh) | 资源分配方法、装置、计算机设备和存储介质 | |
US20230384979A1 (en) | Data processing method, apparatus, and system | |
CN112131019A (zh) | 微内核操作系统进程间快速通信方法 | |
US20210042246A1 (en) | Information processing apparatus and storage device access control method | |
US10838861B1 (en) | Distribution of memory address resources to bus devices in a multi-processor computing system | |
CN115757207A (zh) | 缓存状态管理方法、装置、通信设备及存储介质 | |
CN108228842B (zh) | Docker镜像库文件存储方法、终端、设备以及存储介质 | |
CN114185650B (zh) | Linux系统下识别SCSI设备的方法、系统、设备及存储介质 | |
US8239634B2 (en) | Input/output control based on information specifying input/output issuing source and input/output priority | |
CN107562648B (zh) | 无锁ftl访问方法与装置 | |
JP2012079245A (ja) | 仮想計算機のボリューム割当て方法およびその方法を用いた計算機システム | |
CN109002255B (zh) | 存储系统及其操作方法 | |
US11586549B2 (en) | Method and apparatus for managing memory in memory disaggregation system | |
US11853798B2 (en) | Disaggregated memory pool assignment | |
US9858085B2 (en) | Information processing including BIOS apparatus, information processing method thereof, and storage medium | |
US20170083235A1 (en) | Device capable of using external volatile memory and device capable of releasing internal volatile memory | |
US8490105B2 (en) | Pluggable component interface | |
US20230089104A1 (en) | Usb controller endpoint resource management | |
TWI841160B (zh) | 存儲控制器的驅動管理方法及相關設備 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |