DDIO(Data Direct I/O)数据直连技术

如今,随着大数据和云计算的爆炸式增长,宽带的普及以及个人终端网络数据的日益提高,对运营商服务节点和数据中心的数据交换能力和网络带宽提出了更高的要求。并且,数据中心本身对虚拟化功能的需求也增加了更多的网络带宽需求。为此,英特尔公司提出了Intel® DDIO(Data Direct I/O)的技术。该技术的主要目的就是让服务器能更快处理网络接口的数据,提高系统整体的吞吐率,降低延迟,同时减少能源的消耗。

当一个网络报文送到服务器的网卡时,网卡通过外部总线(比如PCI总线)把数据和报文描述符送到内存。接着,CPU从内存读取数据到Cache进而到寄存器。进行处理之后,再写回到Cache,并最终送到内存中。最后,网卡读取内存数据,经过外部总线送到网卡内部,最终通过网络接口发送出去。可以看出,对于一个数据报文,CPU和网卡需要多次访问内存。而内存相对CPU来讲是一个非常慢速的部件。CPU需要等待数百个周期才能拿到数据,在这过程中,CPU什么也做不了。

DDIO技术思想就是使外部网卡和CPU通过LLC Cache直接交换数据,绕过了内存这个相对慢速的部件。这样,就增加了CPU处理网络报文的速度(减少了CPU和网卡等待内存的时间),减小了网络报文在服务器端的处理延迟。这样做也带来了一个问题,就是网络报文直接存储在LLC Cache中,对这一级cache的容量有很大需求。因此,在英特尔的E5处理器系列产品中,把LLC Cache的容量提高到了20MB。DDIO处理网络报文流程示意图如下:

为了发送一个数据报文到网络上去,首先是运行在CPU上的软件分配了一段内存,然后把这段内存读取到CPU内部,更新数据,并且填充相应的报文描述符(网卡会通过读取描述符了解报文的相应信息),然后写回到内存中,通知网卡,最终网卡把数据读回到内部,并且发送到网络上去。但是,没有DDIO技术和有DDIO技术条件的处理方式是不同的。

a) 没有DDIO时,如上图所示:

1)CPU更新报文和控制结构体。由于分配的缓冲区在内存中,因此会触发一次Cache不命中,CPU把内存读取到Cache中,然后更新控制结构体和报文信息。之后通知NIC来读取报文。

2)NIC收到有报文需要传递到网络上的通知后,读取控制结构体进而知道去内存中读取报文信息。

3)由于之前CPU刚把该缓冲区从内存读到Cache中并且做了更新,很有可能Cache还没有来得及把更新的内容写回到内存中(回写机制)。因此,当NIC发起一个对内存的读请求时,很有可能这个请求会发送到Cache系统中,Cache系统会把数据写回到内存中。

4)最后,内存控制器再把数据写到PCI总线上去,NIC从PCI总线上读取数据。

b) 有DDIO时,如上图所示:

1)CPU更新报文和控制结构体。这个步骤和没有DDIO的技术类似,但是由于DDIO的引入,处理器会开始就把内存中的缓冲区和控制结构体预取到Cache,因此减少了内存读的时间。

2)NIC收到有报文需要传递到网络上的通知后,通过PCI总线去读取控制结构体和报文。利用DDIO技术,I/O访问可以直接将Cache的内容送到PCI总线上。这样,就减少了Cache写回时等待的时间。

由此可以看出,由于DDIO技术的引入,网卡的读操作减少了访问内存的次数,因而提高了访问效率,减少了报文转发的延迟。在理想状况下,NIC和CPU无需访问内存,直接通过访问Cache就可以完成更新数据,把数据送到NIC内部,进而送到网络上的所有操作。

有网络报文需要送到系统内部进行处理,其过程一般是NIC从网络上收到报文后,通过PCI总线把报文和相应的控制结构体送到预先分配的内存,然后通知相应的驱动程序或者软件来处理。和之前网卡的读数据操作类似,有DDIO技术和没有DDIO技术的处理也是不一样的。

a) 没有DDIO时,如上图所示:

1)报文和控制结构体通过PCI总线送到指定的内存中。如果该内存恰好缓存在Cache中(有可能之前CPU有对该内存进行过读写操作),则需要等待Cache把内容先写回到内存中,然后才能把报文和控制结构体写到内存中。

2)运行在CPU上的驱动程序或者软件得到通知收到新报文,去内存中读取控制结构体和相应的报文,Cache不命中。之所以Cache一定不会命中,是因为即使该内存地址在Cache中,在步骤1中也被强制写回到内存中。因此,只能从内存中读取控制结构体和报文。

b) 有DDIO时,如上图所示:

1)这时,报文和控制结构体通过PCI总线直接送到Cache中。这时有两种情形:场景一就是如果该内存恰好缓存在Cache中(有可能之前处理器有对该内存进行过读写操作),则直接在Cache中更新内容,覆盖原有内容。场景二就是如果该内存没有缓存在Cache中,则在最后一级Cache中分配一块区域,并相应更新Cache表,表明该内容是对应于内存中的某个地址的。

2)运行在CPU上的驱动或者软件被通知到有报文到达,其产生一个内存读操作,由于该内容已经在Cache中,因此直接从Cache中读。

由此可以看出,DDIO技术在CPU和外设之间交换数据时,减少了CPU和外设访问内存的次数,也减少了Cache写回的等待,提高了系统的吞吐率和数据的交换延迟。

<think>嗯,用户遇到了Keil编译时的L210 I/O错误,提示找不到RTX51.LIB文件。我需要先理解这个错误的常见原因。根据提供的引用信息,类似的问题通常是由于缺少必要的库文件,比如c51fps.lib或者RTX51.LIB,或者文件路径不正确导致的。 首先,我应该检查文件是否真的存在于指定的路径。用户提到的路径是C:\KEIL\C51\LIB\RTX51.LIB,可能Keil安装不完整,或者库文件被误删。这时候需要确认文件是否存在,如果不存在,可能需要重新安装Keil或者单独下载缺失的库文件。 然后,引用中提到的解决方法包括下载缺失的库文件并放到正确的目录下。比如c51fps.lib的问题,用户需要找到该文件并复制到LIB文件夹。同样,RTX51.LIB的问题可能类似,需要确保库文件存在。另外,还要检查库文件的名称是否正确,是否有拼写错误,比如大小写或者后缀名的问题。 接下来,考虑项目配置是否正确。用户可能在项目设置中错误地引用了不存在的库文件,或者选择了不正确的目标设备。比如,如果项目需要使用RTX51实时操作系统,但安装的Keil版本没有包含这个库,或者许可证问题导致某些组件未安装。这时候需要检查目标设备的选项,确认是否需要使用RTX51,或者是否有其他配置错误。 另外,路径权限的问题也可能导致这个错误。如果Keil的安装目录在系统保护区域(如Program Files),可能需要以管理员权限运行Keil,或者将项目移到其他目录下。还有,环境变量或者Keil的路径设置是否有误,需要检查IDE中的路径配置是否正确。 用户可能已经尝试过重新编译,但问题依旧。所以需要逐步排查:确认库文件存在,检查项目配置,确保路径正确,权限足够。如果这些步骤都做了还是不行,可能需要重新安装Keil或者联系技术支持。 最后,生成相关问题时要覆盖常见可能,比如如何安装库文件、配置项目、路径权限等,帮助用户全面解决问题。</think>针对Keil编译时出现的`L210 I/O error: PATH OR FILE NOT FOUND`问题,以下是分步解决方案: --- ### **问题原因** 该错误表示编译器在链接阶段找不到指定文件(如`RTX51.LIB`或`c51fps.lib`),可能由以下原因导致: 1. **文件缺失**:目标库文件未正确安装或被删除[^2][^3][^4]。 2. **路径配置错误**:编译器未配置正确的库文件路径[^1]。 3. **项目设置问题**:目标设备选择错误或未启用相关库支持[^4]。 --- ### **解决步骤** #### 1. **确认库文件是否存在** - 检查`C:\KEIL\C51\LIB\`目录下是否包含所需文件(如`RTX51.LIB`或`c51fps.lib`)。 - 若文件缺失: 1. 从Keil官网下载对应库文件(如[c51fps.lib下载](https://www.keil.com/ddio/))。 2. 手动复制文件到`C:\KEIL\C51\LIB\`目录[^3]。 #### 2. **验证项目配置** - 打开Keil项目后,依次点击: ``` Project > Options for Target > Device ``` 确认选择的芯片型号与目标设备匹配。 - 在`Target > Code Generation`中检查是否勾选了`Use MicroLIB`(若依赖浮点运算需取消勾选)[^4]。 #### 3. **检查文件路径权限** - 若Keil安装在系统目录(如`C:\Program Files`),需以管理员权限运行Keil。 - 尝试将项目移动到非系统目录(如`D:\Projects`)[^4]。 #### 4. **重新安装Keil(终极方案)** 若上述步骤无效: 1. 卸载Keil并删除残留文件。 2. 重新安装时选择完整组件(包含`C51 Compiler`和`RTX51`库)[^1]。 --- ### **示例操作** ```plaintext 步骤示例:修复c51fps.lib缺失问题 1. 下载c51fps.lib文件。 2. 复制到C:\KEIL\C51\LIB\。 3. 重启Keil并重新编译项目。 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值