网络多媒体服务的内存拷贝减少方案与隐马尔可夫模型和神经网络混合方法
立即解锁
发布时间: 2025-08-18 00:54:17 阅读量: 1 订阅数: 18 

### 网络多媒体服务的内存拷贝减少方案与隐马尔可夫模型和神经网络混合方法
#### 网络多媒体服务的内存拷贝减少方案
在网络多媒体服务中,为了减少CPU的内存拷贝开销并提高视频点播(VOD)服务器的吞吐量,提出了直接I/O和单拷贝两种方案。
##### 直接I/O
当文件系统识别出打开的文件不是通过正常的缓冲区缓存I/O路径,而是直接I/O路径时,相关信息会记录在调用进程的打开文件描述符表中。`sys_read()` 接口会判断路径类型,对于直接I/O路径,会调用 `direct_rw()` 函数,否则调用 `generic_file_read()` 函数。
`direct_rw()` 函数用于直接I/O的读写操作,读写过程除了给设备驱动的读写标志不同外基本相同,这里主要介绍读操作流程,它包含以下六个步骤:
1. 将用户缓冲区空间映射到内核页面。
2. 锁定所有页面。
3. 初始化缓冲区头和块映射。
4. 发起页面I/O。
5. 执行块设备驱动I/O。
6. 返回总计数。
直接I/O具有以下特点:
1. 所有I/O在内存和磁盘上都应按512字节对齐,因为磁盘驱动以扇区为单位传输物理块。
2. 通用缓冲区缓存模块可以通过预读进行预取,但直接I/O无法这样做,因为它不能为预取分配缓冲区内存。
3. 直接I/O路径在大文件系统块大小上比小文件系统块大小(如i386架构下Linux ext2的4KB)更有效。
##### 单拷贝
单拷贝意味着在VOD服务器将物理磁盘块传输到网络接口时,从磁盘到内核地址空间只进行一次拷贝。单拷贝方案的核心概念是将内存索引节点和套接字结合用于多媒体流。它保持通用缓冲区缓存模块的缓冲区块不变,修改后的内存索引节点使用这些缓冲区块进行磁盘读取,修改后的套接字结构也使用这些块进行传输,使得内存索引节点和套接字结构指向相同的缓冲区块,二者是一对一映射关系。
单拷贝的实现主要涉及内核的以下更改:
- **内存索引节点**:插入两个变量,指针数组 `ZC_BH []` 指向之前读取刚使用过的缓冲区块,`current_zc_nr` 记录缓冲区块的数量,VOD服务器在一个周期内的请求块数可确定 `current_zc_nr` 的最大值。
- **套接字结构**:新套接字结构的 `struct inode` 指针字段指向关联的内存索引节点。应用程序使用 `fcntl()` 接口将文件描述符传递给内核接口,然后套接字处理例程将套接字与调用进程的文件描述符指向的索引节点关联起来。
- **`generic_readpage()` 函数**:该函数是虚拟文件系统(VFS)下所有本地文件系统读操作的通用接口,在单拷贝方案中,此函数仅返回检索到的数据字节数,而不是像传统那样将缓冲区块数据复制到用户缓冲区。
- **套接字缓冲区指针**:套接字协议栈会检查套接字是否为单拷贝路径。如果是正常路径,协议例程会将用户缓冲区空间的数据复制到名为 `sk_buff` 的套接字缓冲区;如果是单拷贝路径,协议函数直接指向关联索引节点维护的缓冲区块。
##### 实验结果
实验在单个媒体文件和VOD测试平台上进行。创建的ext2文件系统使用4KB的块大小和1KB的片段大小,共存储30个300MB的视频文件,每个文件通过软件RAID工具跨三个磁盘进行条带化。
实验测量了CPU开销、读操作的响应时间以及读/发送组合的吞吐量,并对比了正常操作和无预读操作的情况。结果表明:
- **CPU负载**:正常路径由于需要将内核内存数据复制到用户缓冲区,CPU性能最差;直接路径的CPU负载略高于单拷贝路径,可能是地址转换和将用户地址空间映射到内核缓冲区结构的开销导致的。
- **读吞吐量**:无预读路径的吞吐量最差,因为每次读操作都必须发起磁盘访问。正常路径比直接路径快9 - 10%,但比单拷贝路径慢5 - 10%,直接I/O无法利用缓存优势,而单拷贝路径由于不需要将磁盘块复制到用户缓冲区空间,吞吐量最佳。
- **读/发送吞吐量**:单拷贝路径的读/发送操作完成
0
0
复制全文
相关推荐









