CN115576722A - 磁盘io查询方法和装置 - Google Patents

磁盘io查询方法和装置 Download PDF

Info

Publication number
CN115576722A
CN115576722A CN202211107473.2A CN202211107473A CN115576722A CN 115576722 A CN115576722 A CN 115576722A CN 202211107473 A CN202211107473 A CN 202211107473A CN 115576722 A CN115576722 A CN 115576722A
Authority
CN
China
Prior art keywords
disk
information
request
data structure
file
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.)
Pending
Application number
CN202211107473.2A
Other languages
English (en)
Inventor
闻茂泉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202211107473.2A priority Critical patent/CN115576722A/zh
Publication of CN115576722A publication Critical patent/CN115576722A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3041Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is an input/output interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3055Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

公开了一种磁盘IO查询方法和装置。所述方法包括:基于查询指令在块层静态探针点获取磁盘IO请求数据;从所述磁盘IO请求数据中解析出该磁盘IO请求要访问的磁盘位置信息和磁盘位置映射信息;基于所述磁盘位置映射信息在内存中定位与所述磁盘位置对应的存储文件信息;基于存储文件信息在内存中获取对应的文件存储路径信息;以及将磁盘IO请求的所述磁盘位置信息和所述文件存储路径信息进行关联显示。通过从块层获取磁盘IO请求以保证iops数量基本准确的同时,从磁盘IO请求中反向提取出文件路径信息,从而能够同时获取并显示磁盘IO的物理访问和逻辑访问信息,由此极大地方便异常磁盘IO请求的来源定位,并为服务器的正常工作提供保证。

Description

磁盘IO查询方法和装置
技术领域
本公开涉及一种存储领域,尤其涉及一种磁盘IO查询方法和装置。
背景技术
当服务器磁盘iops并发过高,超过磁盘的承受能力时,会使得服务器磁盘的使用率接近或达到100%,并且磁盘的响应速度会大幅降低。在磁盘iops异常增高时,同时获取每个磁盘iops的磁盘位置和文件路径信息有助于确定异常原因并加以消除。现有技术中,需要基于获取的磁盘扇区位置信息进行磁盘检索,才能够获取与磁盘扇区位置相对应的文件路径信息。随着服务器规模越来越大,单次磁盘检索的效率越来越低,且并发的磁盘IO请求也越来越多,使得异常原因的确定变得难以实现。
为此,需要一种改进的磁盘iops信息获取方法。
发明内容
本公开要解决的一个技术问题是提供一种更为高效的在内存中实现的磁盘IO查询方法,通过从块层获取磁盘IO请求以保证iops数量准确的同时,基于磁盘IO请求在内存中反向提取出文件路径信息,从而能够通过基于内存内数据结构中包含的指针访问,以极高的效率同时获取并显示磁盘IO的物理访问和逻辑访问信息,由此极大地方便异常磁盘IO请求的来源定位,并为服务器,尤其是大型服务器的正常工作提供保证。
根据本公开的第一个方面,提供了一种在内存中实现的磁盘IO查询方法,包括:基于查询指令在静态探针点获取磁盘IO请求数据;从所述磁盘IO请求数据中解析出该磁盘IO请求要访问的磁盘位置信息和磁盘位置映射信息;基于所述磁盘位置映射信息在内存中定位与所述磁盘位置对应的存储文件信息;基于存储文件信息在内存中获取对应的文件存储路径信息;以及将磁盘IO请求的所述磁盘位置信息和所述文件存储路径信息进行关联显示。
可选地,所述方法还包括:在位于块层的所述静态探针点处布置钩子函数,并且基于查询指令在静态探针点获取磁盘IO请求数据包括:基于所述查询指令,开启位于块层的所述静态探针点;以及所述钩子函数获取行进至块层的磁盘IO请求数据。
可选地,所述钩子函数获取行进至块层的磁盘IO请求数据包括:使用所述钩子函数获取所述磁盘IO请求数据的对应数据结构;以及使用所述钩子函数获取所述磁盘IO请求数据的上下文环境信息。
可选地,从所述磁盘IO请求数中解析出IO请求要访问的磁盘位置信息和磁盘位置映射信息包括:从所述对应数据结构解析出所述磁盘IO请求的磁盘扇区地址和/或分区信息作为所述磁盘位置信息,并且所述方法还包括:从所述bio数据结构解析出所述磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种;以及将所述磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
可选地,所述方法还包括:从所述上下文环境信息解析出所述磁盘IO请求的日期时间信息、进程名、进程ID、线程ID和系统调用函数信息中的一种或多种;以及将磁盘IO请求的所述日期时间信息、进程名、进程ID、线程ID和系统函数信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
可选地,所述进程名、所述系统调用函数信息和所述文件存储路径用于联合判定所述磁盘IO请求的请求来源。
可选地,基于所述磁盘位置映射信息找出与所述磁盘位置对应的存储文件信息包括:基于作为所述对应数据结构的bio数据结构或是request数据结构中的所述磁盘位置映射信息定位与所述磁盘位置对应的inode数据结构,并且,基于存储文件信息获取文件存储路径信息包括:基于所述inode数据结构获取内存中对应的dentry数据结构;以及从所述dentry数据结构提取所述文件存储路径信息。
可选地,基于bio数据结构中的所述磁盘位置映射信息定位与所述磁盘位置对应的inode数据结构,并且包括:从bio数据结构指向bio_vec数组中的一个数组元素;从所述数组元素中的数据所属页面属性指向地址空间数据结构;从所述地址空间数据结构中包含的属性指针指向与所述磁盘位置对应的inode数据结构。
可选地,从所述磁盘IO请求数据中解析出磁盘位置信息和磁盘位置映射信息包括:从作为所述对应数据结构的bio数据结构或是request数据结构中解析出多个磁盘位置信息和相应的磁盘位置映射信息,其中,在多个磁盘位置存储不同文件时,获取不同文件各种的文件存储路径信息并进行关联显示。
可选地,所述方法还包括:定义用于回传所述钩子函数获取信息的回传通道;以及将所述钩子函数在内核态获取的所述磁盘位置信息和所述文件存储路径信息通过回传通道传递给位于用户空间的查询程序。
根据本公开的第二个方面,提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一方面所述的方法。
根据本公开的第三个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一方面所述的方法。
由此,本发明的查询方法利用反向映射技术,直接通过在内存中已有结构的指针跳转而从块设备层的磁盘IO数据(例如,bio数据结构)中解析出inode数据结构,进而得到了完整的文件路径信息。由此在保证IO数量准确的同时,能够在无需磁盘检索的情况下从内存中的已有数据直接解析出文件完整路径信息,并通过物理存储信息和文件系统存储信息的关联显示,提升对异常磁盘IO的指示和定位能力。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了Linux IO存储栈的示意图。
图2示出了根据本发明一个实施例的磁盘IO查询方法的示意性流程图。
图3示出了Linux系统中文件存储在磁盘上的示意图。
图4示出了根据本发明一个实施例的磁盘IO查询所涉及操作的示意图。
图5示出了本发明的探针点钩子函数所执行操作的例子。
图6示出了根据本发明一个实施例的磁盘IO查询装置的组成示意图。
图7示出了利用本发明的磁盘IO查询装置进行查询所返回的显示内容的一个例子。
图8示出了根据本发明一实施例可用于实现上述磁盘IO查询方法的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
服务器通常使用Linux作为操作系统。Linux包括用户态和内核态,用户态中的应用程序,通过Linux开发的系统调用接口,与内核态进行交互。图1示出了Linux IO存储栈的示意图。当位于用户态的应用程序需要访问特定文件时,例如读取文件内容或是将内容写入文件,会生成用户进程的IO(Input/Output,即输入/输出)请求,并经由内核态开放的系统接口(例如,图示的read、write等接口),经由内核态的各个相关层完成操作。
在常规的来自用户进程的IO请求,会首先到达VFS层。VFS(虚拟文件系统)层用于屏蔽了底层不同的文件系统(例如,FAT、NFS等)的差异性,为上层应用程序提供一个统一抽象的虚拟文件系统。即,VFS层使得来自用户进程的IO请求能够明了下层文件系统的格式。
Buffered I/O(缓存IO又叫标准IO)是大多数文件系统的默认IO操作,经过VFS层的读请求如果能够读缓存命中,则直接访问页高速缓存(PageCache),无需进行磁盘访问,而经过VFS层的写请求则通常直接将数据写入页高速缓存,并由页高速缓存在满足预定条件时进行磁盘写入。在某些实现中,还包括应用程序直接访问页高速缓存的特殊情况(对应于Memory-MappedI/O(内存映射IO))。在读请求缓存未命中时,在页高速缓存写入时,或是旁路页高速缓存的Direct I/O(直接I/O)时,都会涉及磁盘访问,即生成针对磁盘的IO请求。
块层,又可称为块I/O层。在广义块层包括映射层的情况下,可用于确定文件所在文件系统或者块设备的块大小,并根据文件大小计算所请求数据的长度以及所在的逻辑块号,并由逻辑块号确定所请求数据的物理块号,也即在在磁盘上的真正位置。映射层之下的通用块层则用于屏蔽底层不同设备驱动的差异性,提供统一的、抽象的通用块层API。通用块层的核心数据结构是描述了从上层提交的一次IO请求的bio数据结构。bio数据结构中包括对磁盘IO请求的描述,但不包括涉及上层VFS的任何文件名或是文件存储路径信息。bio数据结构会在块层中被进一步组装或是拆分成request数据结构。
随后,在I/O调度器中,对上层提交的由bio数据结构构造得到的request数据结构进行调度。一个request数据结构通常包含一组顺序的bio数据结构。而每个物理设备会对应一个request队列,里面顺序存放着相关的request数据结构。I/O调度器可以将request数据结构发送给相应的设备驱动器,并进行真正的物理存储介质的访问,例如对硬盘(HDD)或固态硬盘(SSD的访问。
在通常情况下,读请求页高速缓存的命中率较高,足以应对大部分常规用户进程读请求(显然,读请求是IO请求中的一种),仅有小部分用户读请求会转换为成针对磁盘的IO请求;写请求(显然,写请求是IO请求中的另一种)则会由页高速缓存集中进行。然而在某些突发的访问高峰,或是系统运行出现异常时,会产生大量的异常磁盘IO。
领域内通常使用IOPS(Input/OutputOperations Per Second,每秒IO操作数)作为描述存储设备(如HDD、SSD或存储区域网络(SAN))性能的一个参数。在本发明中,使用“磁盘IO”来指代会发生硬件读取或写入的IO。当服务器磁盘iops并发过高,超过磁盘的承受能力时,会使得服务器磁盘的使用率接近或达到100%,并且磁盘的响应速度会大幅降低。在磁盘iops异常增高时,同时获取每个磁盘iops的磁盘位置和文件路径信息有助于确定异常原因并加以消除。现有技术中,需要基于获取的磁盘扇区位置信息进行磁盘检索,才能够获取与磁盘扇区位置相对应的文件路径信息。发明人发现,磁盘检索是耗时且低效的,并且为了获取文件路径信息而进行的磁盘检索实际上进一步拉高了磁盘IO。随着服务器规模越来越大,单次磁盘检索的效率越来越低,且并发的磁盘IO请求也越来越多,使得异常原因的确定变得难以实现。
为此,需要一种能够更为高效地关联获取磁盘iops的物理存储信息和文件系统路径信息的方法。希望能够快速地对大型服务器的海量并发的每一个磁盘IO的详细信息进行实时定位,包括iops的进程来源,系统调用来源和操作的文件信息等。基于这些更加详细的iops信息,能够更方便地确定iops异常增高的原因并加以消除,从而使磁盘尽快恢复正常工作。
本发明提出了一种在内存中实现的磁盘IO查询方法。该磁盘IO查询方法摒弃了现有技术中基于获取的IO请求中的扇区位置信息检索磁盘来获取文件系统相关信息的低效方案,而是通过从块层获取磁盘IO请求以保证对磁盘读写数量的准确描述的同时,基于该磁盘IO请求在内存中通过指针路径的创造性选择反向提取出文件路径信息,从而能够高效地关联获取并显示磁盘IO的物理访问和逻辑访问信息,由此极大地方便异常磁盘IO请求的来源定位,并为服务器的正常工作提供保证。
图2示出了根据本发明一个实施例的在内存中实现的磁盘IO查询方法的示意性流程图。本发明的磁盘IO查询方法可以实现为一个可安装的查询工具,通过对应的查询语句,对Linux内核态所发生的磁盘IO进行查询和展示。在本发明中,磁盘IO可以是针对磁盘的读和写,并且可以通过时间日期与IO事件的关联展示,列出磁盘iops的详情。进一步地,“在内存中实现”意在指示针对并发的磁盘IO请求的相关信息的查询和获取(包括对磁盘存储位置和文件路径信息)都是在内存中进行的,无需进行实际的磁盘检索来获取这些信息。
在步骤S210,可以基于查询指令在静态探针点获取磁盘IO请求数据。在安装了本发明的查询工具之后,就具备了在静态探针点获取磁盘IO请求数据的能力,但真正对磁盘IO数据的获取,则可以通过查询指令开启。例如,用户可以在本发明的查询工具下输入针对特定磁盘的特定查询命令行,以完成所需的查询。由于是对磁盘IO请求进行的查询,因此静态探针点优选设置在来自用户的IO请求已经变为磁盘IO请求的位置。如上参考图1的描述,由于VFS层仍然是针对文件(文件对应的地址为逻辑地址)的访问请求,因此为了查询磁盘IO请求,需要选择更下层位置的静态探针点,例如位于块层,尤其是通用块层(geneticBlocklayer)的静态探针点。因此,在一个实施例中,本发明的磁盘IO查询方法还可以包括在位于块层的所述静态探针点处布置钩子函数。此时,基于查询指令在静态探针点获取磁盘IO请求数据可以包括:基于所述查询指令,开启位于块层的所述静态探针点;以及所述钩子函数获取行进至块层的磁盘IO请求数据。
随后,可以对磁盘IO请求进行解析。在步骤S220,可以从获取的磁盘IO请求数据中解析出该磁盘IO请求要访问的磁盘位置信息和磁盘位置映射信息。在此,磁盘位置信息通常可以是磁盘扇区位置信息。在步骤S230,可以基于所述磁盘位置映射信息在内存中定位与所述磁盘位置对应的存储文件信息,随后在步骤S240,基于存储文件信息在内存中获取对应的文件存储路径信息。由此,通过一系列反向映射操作,直接在内存中找出与磁盘IO请求的物理访问位置相对应的文件存储路径,例如文件存储全路径。
于是,在步骤S250,可以将磁盘IO请求的所述磁盘位置信息和所述文件存储路径信息进行关联显示。这就使得查询人员能够直接从本发明的查询工具的查询结果中以极低的计算和查询开销同时获知磁盘IO请求所对应的磁盘位置和文件存储路径,由此极大地方便了在磁盘IO异常时,尤其是大型服务器设备的磁盘IO异常时,对异常发生位置的定位。
在Linux的内核态操作中,由于到达VFS层的用户IO请求会作为缓存IO被页高速缓存命中分流掉一部分,并且块层会对来自上层的磁盘IO请求进行合并等操作,因此无法将包含待访问文件信息的VFS层用户请求和包含待访问磁盘位置的块层用户请求简单的关联起来,导致现有技术中无法实现针对磁盘IO的磁盘位置和文件路径的关联显示。而如果利用块层用户请求中的磁盘位置在磁盘而非内存中进行文件存储路径的提取,则会由于磁盘访问远慢于内存访问而导致效率低下。
本发明的如上磁盘IO查询方法则采用了不同的思路,通过在块层获取业已确定要访问磁盘的IO数据(到达块层的用户IO请求是磁盘IO请求),直接从磁盘IO请求数据反向映射至这些请求在VFS层所对应的数据结构,并从中找出文件名和文件存储路径信息,由此高效地实现针对磁盘IO的磁盘位置和文件路径的关联显示。
在一个具体实施例中,钩子函数获取行进至块层的磁盘IO请求数据包括使用所述钩子函数获取所述磁盘IO请求数据的对应数据结构。对应数据结构可以是bio数据结构也可以是request数据结构。具体地,如果选择设置在块层上部的静态探针点,则可以获取bio数据结构,如果选择设置在块层下部的静态探针点,则获取的是request数据结构。
块层在内核中起着承上(文件系统层)启下(设备驱动层)的作用,bio数据结构(bio struct,也可称为bio数据体)是块层(更具体地,通用块层)的基本数据结构,用来描述IO请求属性及状态。如图1所示,块层还可以包括IO调度器。在磁盘访问请求到达IO调度器之前,bio结构会被组合或是拆分成request数据结构。于是,IO调度器可以对request数据结构进行调度,再输出给底层。为此,从所述磁盘IO请求数中解析出IO请求要访问的磁盘位置信息和磁盘位置映射信息可以包括:从所述bio数据结构或是request数据结构解析出所述磁盘IO请求的磁盘扇区地址和/或分区信息作为所述磁盘位置信息。进一步地,还可以从bio数据结构或是request数据结构解析出所述磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种。在具体实现中,可以直接从bio数据结构中解析出如上信息。而如果提取的是request数据结构,则首先需要从request数据结构中提取出bio数据结构,再从bio数据结构中解析出如上信息。
由此,在显示步骤中,可以将磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
获取的bio数据结构或是request数据结构还可以用于文件存储路径信息的获取。为此,基于磁盘位置映射信息定位内存中与所述磁盘位置对应的存储文件信息可以包括:基于所述bio数据结构或是request数据结构中的所述磁盘位置映射信息直接在内存中定位与所述磁盘位置对应的inode数据结构。基于存储文件信息获取文件存储路径信息则可包括:基于所述inode数据结构获取dentry数据结构;以及从所述dentry数据结构提取出所述文件存储路径信息。
在Linux系统中一切皆文件,普通的文件和目录,以及连块设备、套接字、管道等都通过统一的文件系统来管理。Linux文件系统设计了两个数据结构来管理这些不同种类的文件:inode(index node,索引节点)和dentry(directory entry,目录项)。
inode用来记录文件的元数据,即比如inode编号、文件大小、访问权限、修改日期、数据的位置等的各种文件属性。inode和文件一一对应,并会被持久化存储到磁盘中。dentry用来记录文件的名字、inode指针(指向该文件的inode)以及与其他dentry的关联关系。
磁盘在进行文件系统格式化的时候,会分出来3个区:超级块(Superblock)、索引节点区(inode blocks)和数据区块(data blocks)(在此忽略boot block)。图3示出了Linux系统中文件存储在磁盘上的示意图。图中的右侧示出为磁盘存储的内容,在其中,索引节点区内存放每个文件的索引节点(例如,文件1、2、3各自的索引节点1、2、3),数据区块内存放每个文件的内容数据(例如,逻辑块1、2、3内分别存储文件1、2、3的内容数据)。超级块则包含了整个文件系统的元数据。
位于右侧的目录项则通常位于内存中,并且包含了文件的名字、目录结构、索引节点指针。索引节点指针指向文件特定的索引节点(存放在索引节点区内)。每个索引节点又指向数据区块里具体的逻辑块,逻辑块则用于存放文件的具体数据。superblock数据结构、inode数据结构和dentry数据结构都是VFS层的对象类型。
基于静态探针点设置的钩子函数所获取的bio数据结构(或是从request数据结构中解析出的bio数据结构)中虽然不包括文件系统的信息,仅能够直接解析出分区信息和扇区位置信息,但可以利用指针,直接在内存中通过层层指针指向找到扇区位置对应的inode数据结构。
具体地,可以基于bio数据结构中的所述磁盘位置映射信息定位与所述磁盘位置对应的inode数据结构,如上的定位过程在用户的IO是bufferedIO的情况下可以包括:从bio数据结构指向bio_vec数组中的一个数组元素;从所述数组元素中的数据所属页面属性指向地址空间数据结构;从所述地址空间数据结构中包含的属性指针指向与所述磁盘位置对应的inode数据结构。
例如,可以通过struct bio数据结构中包含的结构体属性指针bi_io_vec指向某个struct bio_vec类型的数组,再由struct bio_vec类型数组的一个数组元素(例如第一个数组元素中)包含的结构体属性指针bv_page指向某个struct page类型的数据结构数据,再由struct page类型数据结构数据中包含的结构体属性指针mapping反向映射至某个struct address_space类型的数据结构数据,最后再由struct address_space类型数据结构中包含的结构体属性指针host指向某个struct inode类型数据结构数据。由于inode数据结构中并不包括文件名和文件存储路径,因此需要借助索引节点指针,反向找出对应的目录项,即dentry数据结构,并从中提取出文件名和文件存储路径信息(例如,图3所示的文件1的文件名以及其所在文件目录信息,并获取此获取文件存储路径信息)。由此,实现本发明查询中物理存储信息和文件存储信息的获取和关联显示。
由于一个bio数据结构(以及由多个bio数据结构组成的request数据结构)中通常包括多个合并的用户IO请求。因此,在一个实施例中,从所述磁盘IO请求数据中解析出磁盘位置信息和磁盘位置映射信息可以包括:从所述bio数据结构或是request数据结构中解析出多个磁盘位置信息和相应的磁盘位置映射信息,其中,在多个磁盘位置存储不同文件时,获取不同文件各种的文件存储路径信息并进行关联显示。然而在大多数情况下,一个bio数据结构或是一个request数据结构中包括的多个合并的用户IO请求通常指向同一个文件,因此也可以直接从bio数据结构中获取任一个,例如第0个扇区位置,并由此进行文件存储路径的反向映射和提取。
进一步地,所述钩子函数获取行进至块层的磁盘IO请求数据可以包括:使用所述钩子函数获取所述磁盘IO请求数据的上下文环境信息,例如,用户进程IO请求的进程上下文信息。由此,可以从所述上下文环境信息解析出所述磁盘IO请求的日期时间信息、进程名、进程ID、线程ID和系统函数信息中的一种或多种;以及将磁盘IO请求的所述日期时间信息、进程名、进程ID、线程ID和系统函数信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
由此,本发明的查询工具可以直接基于进程上下文获取系统调用函数信息,并进行关联显示,例如进程名、系统调用函数信息和文件存储路径可以用于联合判定所述磁盘IO请求的请求来源。
进一步地,本发明的查询方法还可以将所述钩子函数在内核态获取的所述磁盘位置信息和所述文件存储路径信息通过回传通道传递给位于用户空间的查询程序。
图4示出了根据本发明一个实施例的磁盘IO查询所涉及操作的示意图。图中,黑色粗实线是用户进程的IO数据流,从用户进程一路下行至磁盘驱动,灰色实心圆点是本发明用于IO数据拦截的静态探针点。当IO请求到达此处且接收到查询指令时,会临时执行到旁边的探针点钩子函数中。在探针点函数中,将需要的数据解析出来,并通过relayfs传输回用户空间。然后继续返回到蓝色实心圆点处的静态探针点继续执行原来的IO请求。
位于静态探针点(Tracepoint)的探针点钩子函数获取IO信息的相关数据,例如,布置在块层静态探针点的钩子函数获取bio数据结构数据和进程上下文数据。图5示出了本发明的探针点钩子函数所执行操作的例子。在探针点钩子函数内部,依赖进程上下文环境信息,分别可以解析出日期时间、进程名、进程ID、线程ID和系统函数信息。依赖在探针点处获取的bio数据结构,可以在探针点钩子函数内部直接解析出扇区地址、IO大小、分区信息、IO读写类型和IO扩展类型信息。同时还可以依赖反向映射(RMAP)技术从bio数据结构中解析出inode数据结构。从inode数据结构可以直接获取inode号信息,还可以进一步解析出dentry数据结构,最后提取出文件全路径信息。应该理解的是,位于IO调度器的静态探针点可以获取request数据结构数据和进程上下文数据,同样可以通过request数据结构中提取bio数据结构而解析出图5所示的各类信息。
回到图4,这些提取出的信息,可以通过预先定义的回传通道,例如图中的relayfschannel 0-2,回写至位于用户态的本发明的查询工具,例如查询工具iodump,并将上述结果展示给用户。
本发明还可以实现为一种磁盘IO查询装置。图6示出了根据本发明一个实施例的磁盘IO查询装置的组成示意图。如图所示,磁盘IO查询装置600包括获取单元610、解析单元620和显示单元630。
获取单元610用于基于查询指令在静态探针点获取磁盘IO请求数据。
解析单元620用于:从所述磁盘IO请求数据中解析出该磁盘IO请求要访问的磁盘位置信息和磁盘位置映射信息;基于所述磁盘位置映射信息找出与所述磁盘位置对应的存储文件信息;以及基于存储文件信息获取文件存储路径信息。
显示单元630则用于将磁盘IO请求的所述磁盘位置信息和所述文件存储路径信息进行关联显示。
本发明的磁盘IO查询装置可以实现为能够在Linux系统安装的iodump工具。图7示出了利用本发明的磁盘IO查询装置进行查询所返回的显示内容的一个例子。
当发现vda磁盘的使用率较高,并且iops较高时,可以使用iodump命令,通过-p选项参数指定vda盘,即可通过执行本发明的磁盘IO查询方法获取详细的iops信息。如图7所示,每一行可以对应一个iops的详细信息,其中包括日期时间(datetime)、进程名(comm)、进程ID(pid)、线程ID(tid)、IO大小(iosize)、扇区地址(sector)、分区信息(partition)、IO读写类型(rw)、IO扩展类型(rwsec)、系统函数(launcher)、inode号(ino)和文件全路径信息(fullpath)。
本发明的查询方法利用反向映射技术,直接在内存中实现从块设备层的bio数据结构中解析出inode数据结构,进而得到了完整的文件路径信息。由此在保证IO数量准确的同时高效解析出文件完整路径信息的工具。
本发明可以实现针对每一个文件完整路径的实时解析。以sata口的机械硬盘为例,每秒200iops的情况下,每秒实时解析200个文件完整路径信息。常规的blktrace工具的扇区位置输出结果由于需要额外基于外部输入命令进行磁盘查询而需要长的多的时间,例如,在TB级别的磁盘完成一条IO文件完整路径的查询就需要二十分钟甚至更长的时间。
进一步地,本发明的查询方法将进程上下文环境中的调用栈信息中的栈底函数解析出来(例如,图7中laucher行的显示),这使定位iops来源时更加准确。
本发明的查询方法同时解析并提供了进程ID和线程ID信息,弥补了现有工具缺少进程ID信息的不足。另外,可以如图7所示详细显示了每一个iops发生的公元历法的日期和时间信息,使得解析出的IO详情信息能够与例如iostat-x显示的iops的内核记账信息方便地进行时间对应。
图8示出了根据本发明一实施例可用于实现上述磁盘IO查询方法的计算设备的结构示意图。
参见图8,计算设备800包括存储器810和处理器820。
处理器820可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器820可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器820可以使用定制的电路实现,例如特定用途集成电路(ASIC,Application Specific Integrated Circuit)或者现场可编程逻辑门阵列(FPGA,Field Programmable Gate Arrays)。
存储器810可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器820或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器810可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器810可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器810上存储有可执行代码,当可执行代码被处理器820处理时,可以使处理器820执行上文述及的磁盘IO查询方法。
上文中已经参考附图详细描述了根据本发明的磁盘IO查询方法和装置。本发明利用反向映射技术,将块层打通到vfs层,并直接通过内存中的层层指针跳转解析出文件路径。进一步地,本发明利用进程名+函数名+文件名来判断io来源,从而进一步提升磁盘IO异常时对异常来源的定位并方便后续异常的解决。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (12)

1.一种在内存中实现的磁盘IO查询方法,包括:
基于查询指令在块层静态探针点获取磁盘IO请求数据;
从所述磁盘IO请求数据中解析出该磁盘IO请求要访问的磁盘位置信息和磁盘位置映射信息;
基于所述磁盘位置映射信息在内存中定位与所述磁盘位置对应的存储文件信息;
基于所述存储文件信息在内存中获取对应的文件存储路径信息;以及
将磁盘IO请求的所述磁盘位置信息和所述文件存储路径信息进行关联显示。
2.如权利要求1所述的方法,还包括:
在位于块层的所述静态探针点处布置钩子函数,并且
基于查询指令在静态探针点获取磁盘IO请求数据包括:
基于所述查询指令,开启位于块层的所述静态探针点;以及
所述钩子函数获取行进至块层的磁盘IO请求数据。
3.如权利要求2所述的方法,其中,所述钩子函数获取行进至块层的磁盘IO请求数据包括:
使用所述钩子函数获取所述磁盘IO请求数据的对应数据结构;以及
使用所述钩子函数获取所述磁盘IO请求数据的上下文环境信息。
4.如权利要求3所述的方法,其中,从所述磁盘IO请求数中解析出IO请求要访问的磁盘位置信息和磁盘位置映射信息包括:
从所述对应数据结构解析出所述磁盘IO请求的磁盘扇区地址和/或分区信息作为所述磁盘位置信息,
并且所述方法还包括:
从所述对应数据结构解析出所述磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种;以及
将所述磁盘IO请求的IO大小、IO读写类型和IO扩展类型信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
5.如权利要求3所述的方法,还包括:
从所述上下文环境信息解析出所述磁盘IO请求的日期时间信息、进程名、进程ID、线程ID和系统调用函数信息中的一种或多种;以及
将磁盘IO请求的所述日期时间信息、进程名、进程ID、线程ID和系统调用函数信息中的一种或多种与所述磁盘位置信息和所述文件存储路径信息进行关联显示。
6.如权利要求5所述的方法,其中,用于联合判定所述磁盘IO请求的请求来源包括:
所述进程名、所述系统调用函数信息和所述文件存储路径。
7.如权利要求3所述的方法,其中,基于所述磁盘位置映射信息在内存中定位与所述磁盘位置对应的存储文件信息包括:
基于作为所述对应数据结构的bio数据结构或是request数据结构中的所述磁盘位置映射信息定位与所述磁盘位置对应的inode数据结构,
并且,基于所述存储文件信息在内存中获取对应的文件存储路径信息包括:
基于所述inode数据结构获取内存中对应的dentry数据结构;以及
从所述dentry数据结构提取所述文件存储路径信息。
8.如权利要求7所述的方法,其中,基于bio数据结构中的所述磁盘位置映射信息定位与所述磁盘位置对应的inode数据结构,并且包括:
从bio数据结构指向bio_vec数组中的一个数组元素;
从所述数组元素中的数据所属页面属性指向地址空间数据结构;
从所述地址空间数据结构中包含的属性指针指向与所述磁盘位置对应的inode数据结构。
9.如权利要求3所述的方法,其中,从所述磁盘IO请求数据中解析出磁盘位置信息和磁盘位置映射信息包括:
从作为所述对应数据结构的bio数据结构或是request数据结构中解析出多个磁盘位置信息和相应的磁盘位置映射信息,其中,在多个磁盘位置存储不同文件时,获取不同文件各种的文件存储路径信息并进行关联显示。
10.如权利要求2所述的方法,还包括:
将所述钩子函数在内核态获取的所述磁盘位置信息和所述文件存储路径信息通过回传通道传递给位于用户空间的查询程序。
11.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1至9中任一项所述的方法。
12.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至9中任一项所述的方法。
CN202211107473.2A 2022-09-13 2022-09-13 磁盘io查询方法和装置 Pending CN115576722A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211107473.2A CN115576722A (zh) 2022-09-13 2022-09-13 磁盘io查询方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211107473.2A CN115576722A (zh) 2022-09-13 2022-09-13 磁盘io查询方法和装置

Publications (1)

Publication Number Publication Date
CN115576722A true CN115576722A (zh) 2023-01-06

Family

ID=84581079

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211107473.2A Pending CN115576722A (zh) 2022-09-13 2022-09-13 磁盘io查询方法和装置

Country Status (1)

Country Link
CN (1) CN115576722A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116684467A (zh) * 2023-08-02 2023-09-01 武汉吧哒科技股份有限公司 数据获取方法、电子设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116684467A (zh) * 2023-08-02 2023-09-01 武汉吧哒科技股份有限公司 数据获取方法、电子设备及存储介质
CN116684467B (zh) * 2023-08-02 2023-10-27 武汉吧哒科技股份有限公司 数据获取方法、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US20200341959A1 (en) Mapper tree with super leaf nodes
KR101422557B1 (ko) 예측 데이터 로더
US20170364301A1 (en) Data deduplication
US7603589B2 (en) Method and system for debugging a software program
US9141626B2 (en) Volume having tiers of different storage traits
US10162746B2 (en) Allocating additional requested storage space for a data set in a first managed space in a second managed space
US9524300B2 (en) Heterogenic volume generation and use system
US9933962B1 (en) Method for achieving sequential I/O performance from a random workload
US7475211B2 (en) Method and system for restoring data
US10078648B1 (en) Indexing deduplicated data
KR20150050457A (ko) 하이브리드 디바이스에서의 고체 상태 메모리 커맨드 큐
CN107291399B (zh) 一种基于spdk的后端存储方法、装置及系统
CA2987731C (en) Database memory monitoring and defragmentation of database indexes
US9183243B2 (en) Building a metadata index from source metadata records when creating a target volume for subsequent metadata access from the target volume
WO2021169163A1 (zh) 一种文件数据存取方法、装置和计算机可读存储介质
US10698826B1 (en) Smart file location
CN115576722A (zh) 磁盘io查询方法和装置
US10719497B2 (en) Utilization of optimized ordered metadata structure for container-based large-scale distributed storage
EP3436973A1 (en) File system support for file-level ghosting
US9384253B1 (en) System and method for multiple-layer data replication in a Linux architecture
US10055304B2 (en) In-memory continuous data protection
CN112783711A (zh) NodeJS上程序内存分析的方法、存储介质
CN111782588A (zh) 一种文件读取方法、装置、设备和介质
CN111339046B (zh) 针对文件的数据写入、读取和删除方法及装置
CN117806551A (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