SRIO实战深入分析:Ping-Pong实现为什么性能反而下降?

活动发起人@小虚竹 想对你说:

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!

提醒:在发布作品前,请将不需要的内容删除。

深入分析:Ping-Pong实现为什么性能反而下降?

一、代码中的Ping-Pong实现分析

你的代码确实实现了基本的Ping-Pong缓冲结构,但存在几个关键问题:

1.1 缓冲区切换逻辑分析
memcpy(pBuff[current_buf], rd_rio_transfer.user_mmap_handle[0], mats_sz);
current_buf = (current_buf + 1) % 2;
  • 正确点:使用了两个缓冲区并通过current_buf索引进行切换
  • 问题点:切换时机不明确,没有缓冲区状态管理(哪个正在被读/写)
1.2 数据流分析
rio_lower_dma_transfer(
    mport_fd,
    target_destid, 
    pBuff[(current_buf + 1) % 2],  // 使用另一缓冲区
    mats_sz, 
    rio_base_addr);
  • 正确点:发送时使用了另一个缓冲区
  • 问题点:没有确保接收缓冲区已完成填充
1.3 内存管理
if (posix_memalign((void**)&pBuff[0], 64, mats_sz) != 0 ||
    posix_memalign((void**)&pBuff[1], 64, mats_sz) != 0)
  • 正确点:内存对齐处理得当(64字节对齐)
  • 问题点:缓冲区大小固定为256字节,可能不适合实际数据量

二、为什么性能反而下降?

2.1 主要性能瓶颈
  1. 不必要的内存拷贝

    memcpy(pBuff[current_buf], rd_rio_transfer.user_mmap_handle[0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值