当前位置: 首页 > news >正文

【微知】RDMA IB verbs中的ABI是什么?作用是什么?(application binary interface、规范、兼容)

文章目录

  • 背景
  • 要点
  • 举个Linux操作系统的例子
  • 举个Intel芯片规范的例子:
    • 比如芯片的ABI定义
    • 比如操作系统的ABI
    • 举个应用程序的例子
  • 综述

背景

在RDMA的IB verbs经常看到ABI version中的ABI是什么?

要点

ABI是什么?
ABI:application binary interface 应用二进制接口。是一种规范。一种机器级别的目标代码层接口规范。比如过程调用用的参数传递使用什么规定寄存器。不同代码段之间的通过ABI约定,比如传参和返回值在哪?内存是否对其等?。CPU、编译器和操作系统供应商都提供自己的ABI。

为什么要ABI?
为了兼容。

兼容哪些?
系统调用,函数调用,二进制格式等

举个Linux操作系统的例子

Linux的API包括一些内核接口和用户态接口。比如用户态glibc。
先看Linux ABI?
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

举个Intel芯片规范的例子:

比如SystemV在Inter386的ABI描述, http://www.sco.com/developers/devspecs/abi386-4.pdf

可以看到描述了这些规范:
比如函数调用序列,操作系统接口,ELF文件结构
在这里插入图片描述
在这里插入图片描述

比如芯片的ABI定义

寄存器的约定,比如sp就是栈指针:
在这里插入图片描述
比如栈的分布:
在这里插入图片描述

比如操作系统的ABI

比如内存中加载段的规范,数据段在哪,代码段在哪。操作系统这样规定了,编译器编译的时候就按照这个规范放到哪儿。操作系统执行的时候也就搬到哪。
在这里插入图片描述
比如微软ABI是芯片的一个自己比如对寄存器的用途约定是:

  • 调用函数传参通过寄存器RCX、RDX、R8和R9来存储前四个参数。浮点用XMM0、XMM1、XMM2和XMM3寄存器

举个应用程序的例子

以Mellanox网卡驱动中ABI的例子来看,他定义了他的二进制程序的一些规范,比如下面是create cq这个行为传参的规范,未来不同版本的用户态库,内核态响应都按照这个来兼容。

struct mlx5_ib_create_cq {__aligned_u64 buf_addr;__aligned_u64 db_addr;__u32	cqe_size;__u8    cqe_comp_en;__u8    cqe_comp_res_format;__u16	flags;__u16	uar_page_index;__u16	reserved0;__u32	reserved1;
};

但是!用户态verbs自己定义了ABI的版本,如果他的ABI版本提高了,就不能兼容了。不过至少ABI定义了如果你版本相同,就能兼容。

/* Increment this value if any changes that break userspace ABI* compatibility are made.*/
#define MLX5_IB_UVERBS_ABI_VERSION	1

综述

因为有了ABI的规范,于是ELF这些结构也就规范了,比如也就能用相同的readelf命令读取不同平台架构(比如mac、x86、嵌入式平台)的二进制文件。包括不同程序语言之间(比如Python调用C)互相调用都离不开ABI的功能。本文主要以芯片、操作系统、用户程序为切面简单看了下ABI是什么?对理解ABI以及理解计算机体系整个结构有一定的帮助。

参考:
https://en.wikipedia.org/wiki/Application_binary_interface
https://cloud.tencent.com/developer/article/1357674


http://www.mrgr.cn/news/53577.html

相关文章:

  • PCDN 技术如何优化网络延迟(壹)
  • 机械视觉光源选型
  • 解决mac ssh端终端只有黑白颜色的问题
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
  • C++——有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。(如c=a+b)
  • 动销方案在合作伙伴场地执行,好处多多!
  • S7-1500 通过PN/PN Coupler 通信
  • Python | Leetcode Python题解之第493题翻转对
  • UniHttp 框架,请求http接口
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于AGCN-LSTM模型的海上风电场功率概率预测 》
  • 15分钟学Go 第8天:控制结构 - 循环
  • 请问平库管理系统有哪些功能流程?
  • 高职单招如何报考与备考?这份指南为你解惑
  • 使用django-simple-captcha遇到的坑
  • 杨氏矩阵(有一个数字矩阵,矩阵的每行从左到右的递增的,矩阵从上到下是递增的请编写一个程序,在这样的矩阵中查找某个数字是否存在)
  • 2023年华为杯数学建模竞赛题F论文和代码
  • Python库matplotlib之十二
  • 【大模型】AI视频课程制作工具开发
  • Python 网络编程:端口检测与IP解析
  • 查缺补漏----Cache命中率与缺失率的判断