Relayfs介绍

Relayfs介绍relayfs介绍Relay 是一种从 Linux 内核到用户空间的高效数据传输技术。通过用户定义的 relay 信道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。通过灵活运用改造也可双向传输。Relay 特别适用于内核空间有大量数据需要传输到用户空间的情形。Relay 的前身是 RelayFS,即作为 Linux 的一个新型文件系统,即用虚拟文
摘要由CSDN通过智能技术生成
Relayfs介绍

relayfs介绍

Relay 是一种从 Linux 内核到用户空间的高效数据传输技术。通过用户定义的 relay 信道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。通过灵活运用改造也可双向传输。Relay 特别适用于内核空间有大量数据需要传输到用户空间的情形。Relay 的前身是 RelayFS,即作为 Linux 的一个新型文件系统,即用虚拟文件系统的方式(内核创建,用户空间去读)进行通讯。现在(后)Relay 已是内核的一部分,它的源码也从fs/目录下转移到kernel/relay.c,头文件在include/linux/下,说明文件在 docunment/filesystem中。RelayFS目前已经被越来越多的内核工具使用,包括内核调试工具SystemTap、LTT,以及一些 特殊的文件系统例如DebugFS等。
Relay的基本原理:一个relay通道由一组和CPU一一对应的内核缓冲区组成。这些缓冲区又被称为relay缓冲区(buffer),其中的每一个 在用户空间都用一个常规档来表示,这被叫做relay檔(file)。内核空间的用户可以利用relay提供的API接口来写入数据,这些数据会被自动的 写入当前的CPU id对应的那个relay缓冲区;同时,这些缓冲区从用户空间看来,是一组普通档,可以直接使用read()进行读取,也可以使用mmap()进行映射。 Relay并不关心数据的格式和内容,这些完全依赖于使用relay的用户程序。Relay的目的是提供一个足够简单的接口,从而使得基本操作尽可能的高 效。Relay将数据的读和写分离,使得突发性大量数据写入的时候,不需要受限于用户空间相对较慢的读取速度,从而大大提高了效率。Relay作为写入和 读取的桥梁,也就是将内核用户写入的数据缓存并转发给用户空间的程序。这种转发机制也正是Relay这个名称的由来。

可以看到,这里的relay通道由四个relay缓冲区(kbuf0到kbuf3)组成,分别对应于系统中的cpu0到cpu1。每个CPU上的代码调用 relay_write()的时候将数据写入自己对应的relay缓冲区内。每个relay缓冲区称一个relay檔,即/cpu0到/cpu3。当档系 统被mount到/mnt/以后,这个relay档就被映像成映像到用户空间的地址空间。一旦数据可用,用户程序就可以把它的数据读出来写入到硬盘上的文件 中,即cpu0.out到cpu3.out。
relayfs内核API:
relayfs提供给内核的API包括四类:channel管理、写函数、回调函数和辅助函数。
Channel管理函数包括:
• relay_open(base_filename, parent, subbuf_size, n_subbufs, overwrite, callbacks) 
• relay_close(chan) 
• relay_flush(chan) 
• relay_reset(chan) 
• relayfs_create_dir(name, parent) 
• relayfs_remove_dir(dentry) 
• relay_commit(buf, reserved, count) 
• relay_subbufs_consumed(chan, cpu, subbufs_consumed) 
写函数包括:
• relay_write(chan, data, length) 
• __relay_write(chan, data, length) 
• relay_reserve(chan, length) 
回调函数包括&#

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值