自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大隐隐于野

点滴记录,学习与分享。

  • 博客(421)
  • 收藏
  • 关注

原创 gdb print c++

gdb print:.gdbinitpythonimport sysend。

2024-05-22 16:08:12 260

原创 Linux 查看进程消耗内存情况总结

在Linux中经常发现空闲的内存很少,似乎所有的内存都被消耗殆尽了,表面上看是内存不够用了,很多新手看到内存被“消耗殆尽”非常紧张,其实这个是因为Linux系统将空闲的内存用来做磁盘文件数据的缓存。但是实际上不是这样。查看进程占用的实际物理内存(与smem看到实际物理内存大小有出入,这里解释一下:SIZE: 进程使用的地址空间, 如果进程映射了100M的内存, 进程的地址空间将报告为100M内存. 事实上, 这个大小不是一个程序实际使用的内存数. 所以这里看到的内存跟smem看到的大小有出入)

2024-05-21 17:47:03 857

原创 查看进程加载的so

cat /proc/77085/maps | awk '{print $6}' | grep '\.so' | sort | uniq

2024-05-07 10:16:32 106 1

原创 SSE4.2 指令集内置函数来加速32位循环冗余校验(CRC-32)计算

纯软件实现CRC32经常是借助于查表实现的(https://pycrc.org/一个可以生成CRC C语言计算代码的工具),当计算CRC32过于频繁时可通硬件指令优化以减少对CPU的占用。目前Intel支持的用于计算CRC的有CRC32和PCLMULQDQ两个指令。CRC32指令计算的是iSCSI CRC,也就是生成多项式为0x11EDC6F41的32位CRC。使用CRC32指令的方式有2种:一种是直接使用(内联)汇编代码;其实还可以使用CRC32指令并行计算CRC32,具体见引用[2]。

2024-04-29 15:59:56 569

原创 网卡bonding模式中xmit_hash_policy bond参数中不同策略的值计算方法

包含分段和未分段数据包的单个 TCP 或 UDP 会话可能会看到两个接口之间的流量平衡,这可能导致无序交付。预期的用例是由多个虚拟机共享的绑定,所有虚拟机都配置为使用自己的 vlan,以提供类似 lacp 的功能,而无需具有 lacp 功能的交换硬件。对于主要使用单个大的四层流的流量,例如单个NFS挂载、单个iSCSI目标/启动器,或其他持久的单个TCP/UDP连接,该流量不能负载均衡。如果此系统和另一个系统之间的网络流量使用相同的 IP 但多个端口,这个算法是一个不错的选择。

2024-04-19 18:02:04 878

原创 bond技术及mode模式详解

前言:​ 一般企业内用于提供NFS服务、samba服务或者vsftpd服务时,要求系统必须提供7*24小时的网络传输服务。它所能提供的最大网络传输速度为100MB/s,但是当访问的用户数量特别多时,服务器的访问压力非常大,网络传输速率特别慢。 因此我们可以采用bond技术实现多网卡的负载均衡来保障网络的自动备援和负载均衡。以此保障实际运维工作中网络的可靠性、文件高速率传输性。一、Linux多网卡绑定1.1 网卡绑定mode的种类网卡绑定mode共有七种:bond0、bond1、bond2、bon

2024-04-19 14:26:45 542

原创 VirtIO vring实现原理详解

VRing包含数据传输的所有要素,包括Descriptor Table,Avail Ring和Used Ring,其中Descriptor Table是一个数组,每个Entry描述一个数据的buffer,Descriptor Table存放的是指针,Avail Ring和Used Ring中的ring数组则不同,它们存放的是索引,用来间接记录Descriptor chain。对于发送数据,buffer对于后端来说是只读的,对于接受数据,后端需要往buffer中写数据,所以是可写的。

2024-04-08 17:10:42 763

原创 使用libibverbs构建RDMA应用

每一个队列对(QP)包含有一个发送队列(SQ)和接收队列(RQ),并且必须与至少一个完成队列(CQ)相关联(换言之,一个QP中的SQ和RQ可以关联到同一个CQ上)。LID是本地ID的缩写,当一个port变成活跃状态的时候,port就被分配了一个独一无二的数字。ibv_rc_pingpong程序在开始执行的时候放置大量的缓存区到发送队列,然后在必要的时候重新填充队列。它是每个结点用来通信的硬件。如果PSN与最近使用的一个PSN很相似的话,硬件就假定传入的数据包是一个陈腐的包,来自一个旧连接,然后予以拒绝。

2024-04-03 10:23:06 498

原创 iperf网络性能测试工具

iperf命令是一个网络性能测试工具,可以测试TCP和UDP带宽质量。同时也可以通过UDP测试报告网丢包率或者发包性能,是一个非常实用的工具可以直接通过官网下载对应系统版本进行安装(1.对于windows版的iPerf,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录即可2.对于linux版的iPerf,请使用如下命令安装。

2024-03-28 12:56:55 1031

原创 IEEE 802.3ad 链路聚合与LACP的简单知识&EtherChannel 总结

该链路在逻辑上是一个整体,内部的组成和传输数据的细节对上层服务是透明的。1. IEEE 802.3ad 方式下的 AIX 实现了不受官方支持的允许“链路聚合”包含不同线路速度的适配器,您应只聚集设置为相同线路速度并且设置为全双工的适配器。EtherChannel支持基于2层MAC,3层IP,4层端口号的源/目的的负载均衡,高效地使用现有链路,当EtherChannel内有链路DOWN掉后,立即采用其它链路承担该链路的流量,这在事实上使EtherChannel具有了链路热备份的特性,提高了链路的冗余性。

2024-03-28 10:40:25 593

原创 Linux网卡bond的七种模式详解

接收的负载被顺序地分布(round robin)在bond中最高速的slave上 当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,

2024-03-28 10:24:21 995 1

原创 numa网卡绑定

使用numactl --membind 将程序的cpu和mem绑定到同一节点上后,会大大减少perf中观察到的minor-fault(page-fault)的次数,同样会在延迟,只比原来的1us增加几百ns。不常访问的函数偶尔访问时(几秒一次),可能会出现延迟较高的情况,比如原来是1us,冷的情况下是3us,perf中观察到有较多的minor-fault(page-fault)chip:芯片,一个cpu芯片上可以包含多个cpu core,比如四核,表示一个chip里4个core。

2024-02-07 15:43:41 1088

原创 linux性能优化——关于NUMA的配置

此外对新手要注意:pcie上并没有NUMA信息,因为pcie上的信息都是硬件设备,NUMA并不是硬件,而只是一种内存技术,该技术和CPU的支持分不开,所以,用。例如,某一个pcie地址段是和NUMA的Node0绑定的,则该地址段上的设备应绑定Node0。以网卡为例,通过lspci找到了某一张网卡的pcie地址号0000:4b:00.01,bus为4b,小于80,故应绑定Node0。该指令的值会返回所属的Node号,如果返回0,便代表该网卡绑定在Node0上。如果返回的值为0,说明该网卡绑定NUMA正确。

2024-02-07 15:41:47 642

原创 Linux中的numactl命令指南

现代处理器采用*非统一内存访问(NUMA)*的方式进行硬件设计。有时我们想控制线程如何被分配到处理器内核上,以避免使用超线程,而是使用硬件线程,或者确保一个任务不会频繁迁移。NUMA调度策略和NUMA内存放置策略。numactl是一个Linux函数,它以指定的NUMA调度或内存放置策略运行进程。它将进程与Linux NUMA超级计算机上的处理器绑定。使用numactl的目的是将进程限制在一个numa池或CPU节点上,而不是特定的CPU核。通过numactl。

2024-02-07 15:35:21 1625

原创 无锁CAS--备份,有问题

由于CAS是一个原子操作,所以即使同时T2线程了也调用了do-while中的CAS操作,但是其判断p->_next不为空,因为T1线程已经将尾节点向后移动了,所以其只能继续执行do,将p向后移动,重新移动到尾节点继续重新判断,直到成功为止....比较并交换(compare and swap,CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某⼀数据时由于执行顺序不确定性以及中断的不可预知性产⽣的数据不一致问题。因此,无锁队列比使用mutex的效率要高一些。

2024-02-06 16:51:12 976

原创 无锁队列的实现(c语言)-备份,有问题

CAS实现的是硬件级的互斥,在线程低并发的情况下,其性能比普通互斥锁高效,但是当线程高并发的时候,硬件级互斥引入的代价与应用层的锁竞争产生的代价同样都是很大的。无锁编程不需要程序员再去考虑死锁、优先反转等棘手的问题,因此在对应用程序不太复杂,而对性能要求稍高的程序中,可以采取有锁编程。如果对有锁多线程程序有良好的设计,那么可以使程序的性能在不下降的同时,实现高并发。//因为temp可能为NULL,因此我们用P记录temp->next的值,后续会用到。对于线程无锁同步方式方式的应用,我实现了一个无锁的队列。

2024-02-06 16:46:48 429

原创 通过遵循最佳做法来提高 EDA 和 HPC 应用程序的 Azure NetApp 文件性能

回顾一下,你使用 Azure NetApp 文件作为后端存储解决方案,以便在 Azure 上运行 HPC 和 EDA 应用程序。你需要了解性能技巧和最佳做法,以提高这些应用程序的 Azure NetApp 文件性能。本模块介绍了关于参考体系结构、客户端 VM 和网络的性能建议。然后,我们讨论了几个性能技巧,包括装载选项和客户端 VM 配置。最后,我们检查了 SPEC EDA 和 FIO 基准检验结果,以验证所讨论的性能技巧。

2024-02-05 14:25:56 1466

原创 内存泄漏调试 ---- jemalloc的heap profiling

使用jemalloc时,可以通过profiling机制来发现并定位本文翻译自原文并增加了一些例子。

2024-02-01 16:47:26 983

原创 spdk技术原理简介和实践经验

1、SPDK的整体架构存储协议层:SPDK支持的存储应用类型。NVMe-oF target实现了NVMe-oF规范,对外提供基于NVMe协议的存储服务端,支持RDMA和TCP网络;iSCSI Target对外提供基于SCSI协议的存储服务端;vhost-scsi或vhost-blk对qemu提供后端存储服务,qemu可以基于SPDK提供的后端存储为虚拟机挂载virtio-scsi或virtio-blk磁盘。存储服务层。

2024-01-31 14:38:23 1301

原创 提高 NFS Azure 文件共享性能

是客户端 Linux 装载选项,通过允许在客户端与 NFSv4.1 的 Azure 高级文件服务之间使用更多 TCP 连接来大规模提高性能,同时保持平台即服务 (PaaS) 的复原能力。从具有较大预读值的 Linux 版本升级到具有 128 KiB 默认值的版本的客户可能会遇到顺序读取性能下降的问题。我们使用了 Flexible I/O Tester (FIO),这是一款免费的开源磁盘 I/O 工具,用于基准和压力/硬件验证。有关详细信息,请参阅。建议使用绿色突出显示的方案,而红色突出显示的方案则不推荐。

2024-01-30 17:13:33 659

原创 Doubling Network File System Performance with RDMA-Enabled Networking

This post was originally published on the Mellanox blog.Network File System (NFS) is a ubiquitous component of most modern clusters. It was initially designed as a work-group filesystem, making a central file store available to and shared among several cli

2024-01-26 16:18:54 1049

原创 Thin-LUN使用vdbench测试性能如何预埋数据

一、功能需求Thin-LUN性能测试过程中,由于刚创建的THIN-LUN需要预埋数据,才能准确测试出实际性能,所以在第一次性能测试之前,需要使用vdbench预埋数据二、组网图无三、配置步骤。

2024-01-23 17:00:27 1131

原创 GDB调试中动态显示执行的代码

虽然list已经很方便了, 但还是不尽人意. 如果能够在运行的同时显示代码就好了, 答案是肯定的.显示main.c中的main函数附近的代码: list main.c:main。显示main.c中的第2到20行的代码: list main.c:2,20。显示第10到20行的代码: list 10, 20。显示main函数附近的代码: list main。(GDB版本要求: 7.0及以上)

2024-01-18 15:35:33 415

原创 RDMA Send Receive操作详解

在下面的图中,我们可以看到注册的内存区域(MR)和被通信队列所使用的位于内存区域之内的缓冲区(buffer)。当数据流开始到达系统B的时候,系统B上的HCA就消费来自系统B的WQE,然后将数据放到该放的缓冲区上去。系统A也创建一个WQE并放置到它的发送队列(SQ)中去,该WQE中的指针执行一段内存缓冲区,该缓冲区的数据将要被传送。第1步:系统A和B都创建了他们各自的QP的完成队列(CQ), 并为即将进行的RDMA传输注册了相应的内存区域(MR)。系统B分配了一段空的缓冲区,用来存放来自系统A发送的数据。

2024-01-18 11:09:54 897

原创 RDMA原理浅析

在具体的远程内存读写中,RDMA操作用于读写操作的远程虚拟内存地址包含在RDMA消息中传送,远程应用程序要做的只是在其本地网卡中注册相应的内存缓冲区。跟TCP/IP的send/recv是类似的,不同的是RDMA是基于消息的数据传输协议(而不是基于字节流的传输协议),所有数据包的组装都在RDMA硬件上完成的,也就是说OSI模型中的下面4层(传输层,网络层,数据链路层,物理层)都在RDMA硬件上完成。RDMA是一种新的直接内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。

2024-01-18 11:02:09 856

原创 RDMA Scatter Gather List详解

其中在ibv_send_wr我们需要一个sg_list的数组,sg_list是用来存放ibv_sge元素,那么什么是SGL以及什么是sge呢?这个WR请求中,包括一个sg_list的元素。wr是一个链表,每一个结点包含了一个sg_list(i.e. SGL: 由一个或多个SGE构成的数组), sg_list的长度为num_sge。下面图解一下SGL和WR链表的对应关系,并说明一个SGL (struct ibv_sge *sg_list)里包含的多个数据段是如何被RDMA硬件聚合成一个连续的数据段的。

2024-01-18 08:43:00 1351

原创 首款PCIe 5.0 SSD面世,速度大幅提升

这应该会加快以这种方式设计的游戏的加载时间,但不幸的是,我们还没有看到足够的示例。1TB 和 2TB 型号的读写速度可能存在差异,但三星 980 Pro 的 2TB 版本仅将顺序写入速度提高到 5100MBps,而 1TB 的顺序写入速度为 5000MBps,这实际上差不多。现在,终于看到有新的 PC 游戏最低规格限制为 SSD,《星空》(Starfield)需要 SSD 存储,而 CD Projekt Red 的《赛博朋克 2077》的最低规格需要 SSD,并计划逐步淘汰机械硬盘 (HDD) 支持。

2024-01-16 15:15:54 404

原创 如何将千亿文件放进一个文件系统,EuroSys‘23 CFS 论文背后的故事

本文介绍了百度智能云文件存储 CFS 的元数据系统的核心设计,对⻓期困扰文件系统元数据领域的 POSIX 兼容性和高扩展性(特别是写扩展性)难以兼顾的问题,进行了解答。这是一个大规模分布式文件系统能否扩展到千亿级别文件数,同时保持高性能稳定性的一个关键问题。分离式元数据架构是近年来文件系统元数据领域的发展趋势,业界有潜力存储千亿文件的系统均是基于这种架构实现的。这类架构采用类似 “存算分离” 的思想,将元数据服务分为两层,分别是负责存储数据的数据库层,和偏计算逻辑、负责实现文件系统语义的元数据代理层。

2024-01-16 13:33:50 915

原创 基于英特尔傲腾持久内存的下一代高性能计算存储系统DAOS

本文内容来自 Intel极限存储架构和开发首席工程师 梁震 在2021CCF全国高性能计算学术年会(CCF HPC China 2021)上的演讲资料,供大家参考。- DAOS 存储服务器的硬件配置(BOM)- 分布式异步对象存储(DAOS)的系统架构。- DAOS 的存储设备管理。- MariaDB 存储引擎。注:元数据和小文件/对象放SCM上。- DAOS 的用户接口和生态系统。- DAOS 的部署方式。- DAOS 的社区资源。- DAOS系统栈结构。- DAOS的核心功能。

2024-01-16 10:41:57 380

原创 Linux中的numactl命令使用详解

现代处理器采用*非统一内存访问(NUMA)*的方式进行硬件设计。有时我们想控制线程如何被分配到处理器内核上,以避免使用超线程,而是使用硬件线程,或者确保一个任务不会频繁迁移。NUMA调度策略和NUMA内存放置策略。numactl是一个Linux函数,它以指定的NUMA调度或内存放置策略运行进程。它将进程与Linux NUMA超级计算机上的处理器绑定。使用numactl的目的是将进程限制在一个numa池或CPU节点上,而不是特定的CPU核。通过numactl。

2024-01-16 10:31:52 1891

原创 Linux下双网卡绑定七种模式以及多网卡的7种bond模式原理

mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

2024-01-15 15:55:41 572

原创 DAOS在后傲腾时代的演变

本文内容来自 Intel极限存储架构和开发首席工程师 的分享资料,供大家参考。

2024-01-15 15:30:15 411

原创 NVMe over TCP高性能文件存储,让未来照进现实,400us

闪存是一种固态芯片,主流的闪存设备使用NAND技术来映射数据,这种芯片无需任何外部电源即可维护存储的数据,它的读写速度比内存稍低,但无需借助机械方式进行寻址,因此读写性能远高于机械磁盘,容量也比内存要大,单GB成本近年来快速下降,大有成为服务器上高速存储介质主流设备的趋势。,与SCSI等协议不同,NVMe协议实现了多队列的架构和指令集,更能发挥多核CPU服务器的处理能力,使该协议指令集在多核CPU服务器上发挥更好的性能,存储系统如果不能针对这些特点进行深入的优化,也不能充分享受到新型介质和协议带来的红利。

2024-01-12 15:54:57 598

原创 NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

上图是一个双控制器/双端口的NVM子系统示例,在EMC DSSD之后,使用PCIe直连服务器和存储阵列的应用估计寥寥无几,所以该子系统基本上代表了双端口NVMe SSD 和JBOF机箱的设计。最后是前面留下的那个问题,NVMe规范对SSD的管理粒度只到NameSpace,而大多数对等节点的分布式存储/超融合都需要将底层磁盘(闪存)空间打散成更小粒度的数据块,这时就需要底层有个文件系统或者类似的对象组织结构,读写时产生的跨节点数据操作一般应该是通过私有协议来实现。

2024-01-12 15:37:04 1084

原创 NVMe-oF RDMA vs. TCP延时测试对比:端到端SPDK的意义

可以看出,使用Linux内核的NVMe-oF Initiator和Target测试,延时在16-18µs之间;》的新闻,该测试环境是2台服务器,每台各安装2块NVIDIA Bluefield-2 DPU,形成4条100GbE以太网直连,两端分别跑NVMe-oF Target(存储目标)和Initiator(主机端)。另一点值得注意:在NVIDIA新闻的测试平台介绍中,并没有提到用的什么持久化数据盘,也就是说该测试应该是用DRAM内存模拟块设备来跑网卡的极限性能,没有提到随机访问那就是顺序IO了。

2024-01-12 15:28:59 1045

原创 SPDK Performance Reports

SPDK: Performance Reportshttps://spdk.io/doc/performance_reports.html

2024-01-12 14:25:25 365

原创 SPDK中常用的性能测试工具

本文主要介绍磁盘性能评估的方法,针对用户态驱动Kernel与SPDK中各种IO测试工具的使用方法做出总结。其中fio是一个常用的IO测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的性能。为了和SPDK的fio工具相区别,我们称之为内核fio。SPDK有自己的IO测试工具,包括fio_plugin,perf和bdevperf。SPDK采用异步I/O(Asynchronous I/O)加轮询(Polling)的工作模式,通常与Kernel的异步I/O作为对比。

2024-01-12 14:07:22 984

转载 下一代ZNS?浅谈FDP在企业级SSD应用前景

ZNS对于存储系统或者云系统,在系统侧可控制IO在SSD内的具体写入位置,通过系统侧的主动垃圾回收(Garbage Collection,简称GC),将SSD内的GC削减到0。另一方面,由于SSD内基本不需要GC,可以减少SSD内的冗余空间(Over-Provisioning,简称OP),使OP基本减到零,对于SSD内部管理表项也带来简化,从而削减企业级SSD的DRAM。这样的问题是,系统应用需要知道SSD上的NAND具体操作方式和物理拓扑,NAND代次演进和厂家差异,系统应用也需要进行适配。

2024-01-12 11:25:28 209

原创 JBOD详解

RAID模式除了RAID 0和RAID 1,还有RAID 2,RAID3,RAID 4,RAID 5,RAID 6,RAID 7,RAID 8,RAID 01,RAID 10等。由于篇幅所限,这里不做介绍,有兴趣可自行了解。单块数据盘可以做RAID0,只是没有任何增益效果,唯一作用是能让RAID卡识别硬盘。组成RAID 0的磁盘改变为无RAID的模式或无RAID模式的磁盘改变为RAID 0的模式时,系统需要对相应的磁盘重新分区,原硬盘里的所有数据将全部丢失。

2024-01-11 17:10:18 1778

原创 NVMe 2.0 Specifications Infographic

1、Zoned Namespaces(ZNS)2、Key Value Storage(KV)3、Endurance Group Management4、Rotational Media Support

2024-01-11 15:02:03 408

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除