自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 问答 (1)
  • 收藏
  • 关注

原创 GSO/GRO常见疑问

LRO是网卡硬件对小包合并大包的实现,GRO是软件版本的LRO,开启后,在不支持LRO的环境,skb在进入协议栈之前会进行报文合并,以减小协议栈处理的报文数,提高协议栈处理能力。内核合并流程:npai_gro_receive->dev_napi_gro_receive->inet_gro_receive->tcp_gro_receive->skb_gro_receive。

2024-04-22 16:38:45 709

原创 virtio_net与vhost协议feature过程

协商核心:协商的目的是为了对guest的virtio_net设备与后端的vhost_user之间协商共同支持的feature集合,以最终确定整个流程中启用的最终feature集合,但qemu-kvm架构中,guest与vhost_user(一般是ovs-dpdk进程)是不直接通信的,所以他们之间的feature需要一个中间人,即:qemu模块。本文以vhost_user后端为例进行描述,kernel的vhost_net与vhost_user类似,只是在qemu中注册了不同接口而已。

2024-04-22 15:07:21 121

原创 一文读懂DPDK&DPVS定时器原理

DPVS封装了一个调度器概念,每个lcore一个调度器,全局公共调度器在master核上(lcore 0)。每个调度器对应一个DPDK原生定时器,等于由DPDK-timer驱动调度器定时执行,调度器内部基于时间片方式管理调度器内部定时器,每个时间片段上的定时器都对应一个哈希表链表;采用多层(2层)时间轮设计。DPDK的定时器使用跳表skiplist实现,每个lcore维护一个skiplist,跳表的时间复杂度为O(logn),定时器较少时可以高效率查询、插入,在处理大量定时器时,效率并不高。

2024-04-02 17:39:08 382

原创 kvm系统开启嵌套虚拟化

在虚拟机XML中使用CPU host-passthrough模式。【返回Y则跳过以下操作,返回N请继续执行下面操作】创建虚拟配置文件 (保证虚拟机全部关机状态中)intel查看处理器是否支持。amd查看处理器是否支持。

2023-10-30 10:08:30 220

原创 RCU锁原理扫盲

2、读者接近零消耗。(可能需要开关中断或抢占等一些操作。比如在rcu_read_lock中只禁用了抢占,无其他操作,相比读写锁的读锁更高效,读写锁还需要原子操作)3、所有cpu使用度过一个宽限期则删除旧数据。(不同场景宽限期计算方式不一样,常见的有以上下文切换或软中断为参考表示一个cpu度过宽限期)1、延迟删除、旧数据回收;牺牲写者性能来提高读者性能。//linux内核实现较复杂,有兴趣可研究源码。

2023-08-22 10:42:16 137

原创 Shell的后台运行(&)与nohup

1、&使shell脚本在后台运行,以确保父shell可以继续执行后续命令。否则就需要等待子shell执行完才能继续执行。&后的脚本,fd 0被执行/dev/null。2、nohup ,确保子shell不会收到sighup信号。sighup信号为终端关闭时给所有进程发送的sighup信号,默认动作为退出。父进程变为进程1的进程不会收到sighup信号,因为此时此进程已经与控制终端没有关联。

2023-07-24 16:51:38 650

转载 网卡&MAC&PHY扫盲

CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU,而将PHY留在片外,这种结构是最常见的。我们可以把帧看做是一种数据包,在数据包中不仅包含有数据信息,而且还包含有数据的发送地、接收地信息和数据的校验信息。2、数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。CPU不集成MAC和PHY,MAC和PHY采用独立芯片或者集成芯片 (高端采用)

2023-05-31 09:20:00 383

原创 dpdk lcore_id&cpuid&core_id关系

这里的core_id完全由lcore_id换算得到。(当lcore_id与cpuid不相等时,core_id与cpuid之间没有关联):使用lcore_id的index,从0开始。(lcoreID不一定是连续的,如-l指定时,不连续时core_index与lcore_id不相等)参数可指定lcore_id与cpuid映射关系。当运行多个dpdk程序时,可以确保lcore_id都从0开始。: 指的cpu物理coreID,这里指的不是cpuid。绑定cpu时使用此字段。参数可指使用的定具体lcore_id。

2023-05-30 20:14:27 318

原创 iSCSI原理

从根本上说,它是一种基于IP Storage理论的新型存储技术,该技术将存储行业广泛应用的SCSI接口技术与IP网络技术相结合,可以在IP网络上构建SAN。iSCSI的优势主要表现为:首先,iSCSI沿用TCP/IP协议,而TCP/IP是在网络方面最通用、最成熟的协议,且IP网络的基础建设非常完善,同时,SCSI技术是被磁盘和磁带等设备广泛采用的存储标准,这两点使iSCSI的建设费用和维护成本非常低廉;其次,iSCSI支持一般的以太网交换机而不是特殊的光纤通道交换机,从而减少了异构网络带来的麻烦;

2023-04-03 10:45:05 149

原创 sriov开启混杂模式

2、宿主机将vf设置trust on ,关闭spoof check;1、需要网卡硬件支持,如x700系列支持,82599不支持。3、vm内设置网卡为混杂模式。

2023-03-02 14:14:23 665

原创 linux内核网络模块笔记

1、veth接口的dev->xmit函数为veth_xmit接口,直接将报文skb发给peer dev,重新调用netif_rx进入协议栈流程。3、tun_net_xmit 为tun/tap口发包函数,将skb发到tun_file中,然后唤醒vhost-net线程处理报文。2、ovs的upcall上送到用户态的skb最终匹配流表后会重新下发给内核,在内核进行转发。

2022-11-08 20:19:07 235

原创 Linux内核NAPI原理机制、网卡收包过程

2、硬中断函数为驱动probe函数注册的中断回调函数,非napi时一般为netif_rx,napi时一般为驱动自己实现的函数,函数内部触发软中断。3、backlog_process为默认的poll函数(使用默认poll函数时,硬中断函数中一般调用netif_rx),部分驱动会定义自己的poll函数,此时不会使用默认的(也不调用netif_rx)。6、napi和非napi一次都会处理多个报文,但非napi时会触发多次硬中断,硬中断会打断软中断流程,对性能有影响。逻辑一样,都是减少硬中断次数。

2022-11-07 20:33:21 853

原创 Linux网络 IP/TCP校验和、checksum、伪首部相关问题

ip校验和、tcp校验和、skb->ip_summed、伪首部、checksum

2022-10-25 18:01:36 3987

原创 mmap MAP_PRIVATE MAP_SHARED

2、private的修改不会回写硬盘文件,并且是copy-on-write模式,文件未修改时指向的共享文件内容(此时其他进程修改文件,private是可见的,因为是同一块内存。当private修改了内存以后,private重新申请一块内存,此时其他进程再修改文件内容private将看不到修改)1、mmap成功以后,fd可以立即关闭,而不影响mmap。3、share修改会回写磁盘文件;man mmap手册。

2022-10-18 14:13:00 857

原创 Linux内核中的Watchdog

linux /dev/watchdog softlockup hardlockup 看门狗 kvm watchdog i6300esb

2022-10-09 18:29:07 4651

转载 linux 网卡tx-checksumming和tx-checksum-ip-generic

如果 VIRTIO_NET_F_CSUM 设置的话,只是具备了 NETIF_F_HW_CSUM 的feature,所以它展示为on,而。NETIF_F_HW_CSUM 的出现,显得 NETIF_F_IP_CSUM 和 NETIF_F_IPV6_CSUM 就过时了。也就是说,NETIF_F_HW_CSUM 是 NETIF_F_IP_CSUM 和 NETIF_F_IPV6_CSUM 的一个超集。但是既然是硬件计算校验和,NETIF_F_HW_CSUM从功能上显然是能覆盖,所以。

2022-09-23 16:50:22 1881

原创 vhost-user前后端通知交互机制

vhost-user是将内核的vhost模块移植到了用户态执行,实现效果基本和内核vhost一致。本文主要描述的vhost-user是基于dpdk的实现;后端使用内核vhost还是vhost-user对前端(虚拟机)是透明的,虚拟机内部都是virtio-net标准的驱动。(当然使用vhost-user时guest也可以使用virtio-net-pmd驱动作为前端)。本文主要讲述vhost-user作为后端时前后端的交互通知机制,前端与后端通过vring 交换报文,发送队列、接收队列是前后端共享内存实现。..

2022-08-04 00:13:23 501

原创 skb->truesize,len,datalen区别

3、skb->true_size,整个skb长度,包含sk_buff结构、数据长度(线程和非线程)。2、skb->data_len非线性区数据长度,包括frag_list和frags[]两部分数据。1、skb->len数据包长度(协议栈不同位置,包含的协议头不一致)...

2022-07-19 17:41:23 1244

原创 Qemu-kvm常见问题

这种问题一般是更新版本后,qemu支持的machine类型不兼容导致,修改对应虚拟机xml配置文件并重新定义即可。步骤:输入qemu-kvm -machine help查看支持的type选择指定type进行替换 一般选择default那个即可。virsh define ./centos-v1.xml 重启启动虚拟机即可另外更新之后,重启机器可能会遇到kvm因为权限无法启动的问题解决方法:chmod 666 /dev/kvm并编辑vim /etc/libvirt/qemu.conf之后systemct

2022-06-30 01:12:46 1708

原创 虚拟化网卡加速

虚拟化网卡进化:1、纯虚拟化网卡,完全由软件模拟2、virtio-net3、vhost /sriov4、vhost-user/ovs-user(dpdk等)5、vswitch硬件加速参考资料:https://developer.aliyun.com/article/604505https://legacy.netdevconf.info/1.2/slides/oct6/04_gerlitz_efraim_introduction_to_switchdev_sriov_offloads.pdf

2022-06-27 18:11:40 395

转载 linux网络命名空间

在 Linux 上通过 veth 我们可以创建出许多的虚拟设备。通过 Bridge 模拟以太网交换机的方式可以让这些网络设备之间进行通信。不过虚拟化中还有很重要的一步,那就是隔离。借用 Docker 的概念来说,那就是不能让 A 容器用到 B 容器的设备,甚至连看一眼都不可以。只有这样才能保证不同的容器之间复用硬件资源的同时,还不会影响其它容器的正常运行。在 Linux 上实现隔离的技术手段就是 namespace。通过 namespace 可以隔离容器的进程 PID、文件系统挂载点、主机名等多种资源。不过

2022-06-20 15:49:16 165

原创 openstack底层技术-虚拟网络设备(flat、vlan、vxlan、bridge)

openstack网络设备

2022-06-14 10:50:34 1327

原创 Glance、Cinder、Swift区别&联系

cinder、swift、对象存储、块存储

2022-06-01 20:18:43 1515

原创 linux文件权限详解

//权限与用户是强相关的,这里先简单介绍下linux的不同类型用户1、Linux系统中的3类用户1)管理员:比如root用户,权限最大的用户,拥有所有权限2)系统用户系统用户:在红帽5或者6系列的系统中,系统用户的uid值为0-499;不同发行版可能不一致,以实际实现为准;系统用户一般用于守护进程/服务使用,一般不允许登录系统(即/sbin/nologin),这样可以降低对应进程的权限3)普通用户普通用户:一般用于人机交互登录的账户useradd、id、groupadd、userdel、use

2022-05-30 19:46:50 8375

原创 Linux文件硬链接与软链接

在Linux操作系统中,链接被分为两种:软链接(Soft Link,符号链接)和硬链接(Hard Link)。硬链接(Hard Link)A是B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除其中一个,对另外一个没有任何影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据

2022-05-26 10:28:08 248

转载 Roce\Infiniband

Roce、infiband

2022-05-13 09:38:37 1037

原创 DPDK多进程模式

多进程模式1、Symmetric/Peer Processes主从进程执行同样的任务,分摊保卫转发2、Asymmetric/Non-Peer Processes客户端进程+服务端进程,服务进程收包并分发给不同的从进程(客户端进程)3、Running Multiple Independent DPDK Applications多主进程方式,多个主进程独立运行,使用–file-prefix区分文件目录4、Running Multiple Independent Groups of DPDK Ap

2022-04-29 16:30:57 719

原创 DPDK多进程间通信机制

DPDK将进程分为两种 : primary process 和secondary process。由primary process对系统的资源(如内存,vfio container等)进行控制,而secondary process若需要申请资源,则向primary process发送申请的请求,由promary process处理请求后,将结果通知secondary process。...

2022-04-29 11:20:45 1103

原创 DPDK内存管理(初始化+分配释放)

以下内容以dpdk19.11版本代码为准,其他版本可能有出入。DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。主要init过程://以启用了大页,legacy-mem模式为主内存管理主结构为struct rte_mem_config* mem_config = rte_config.mem_config内存

2022-04-14 17:48:53 1352

转载 Linux kernel的中断子系统之(二):IRQ Domain介绍

转载自:蜗窝科技(博客)作者:linuxer一、概述在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。2、HW interrupt ID。对于interrupt controller而言,它收集了多个外设的interrupt request line并向上传递,因此,inter

2022-04-12 21:20:16 456

原创 制作Ubuntu/Centos自动安装 ISO

制作Ubuntu/Centos自动安装 ISO目标环境和软件工具Ubuntu ISO参考资料:Centos ISO参考资料目标1、达到系统自动安装,不需要人机交互2、自定义操作系统(开机界面、默认账户等等)环境和软件工具环境:Linux Ubuntu/CentOS操作系统软件:mkisofs,xorrisoCentOS : yum install mkisofs xorriso -yUbuntu: sudo apt install -y mkisofs xorrisoUbuntu ISO

2022-03-01 15:22:47 1304

原创 Docker常用命令

https://docs.docker.com/engine/faq/https://www.runoob.com/docker/docker-resources.htmlhttps://www.katacoda.com/提供对应相关REST API接口1、启动、设置开启开机启动sudo systemctl start dockersudo systemctl enable docker启动容器时使用 –oom-kill-disable=true指定通过dockerfile可自动构建镜像d

2021-11-15 10:15:45 713

转载 jiffies和jiffies_64

Linux内核时间管理(二)——jiffies与jiffies_64释疑 </h1> <div class="clear"></div> <div class="postBody"> <div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">  ...

2021-08-25 00:40:16 269

原创 sslsplit源码流程分析

概述官网地址:https://www.roe.ch/SSLsplithttps://github.com/droe/sslsplitSSLsplit是用于对 SSL / TLS 加密的网络连接进行中间人攻击的工具。用于网络取证,应用程序安全性分析和渗透测试中。SSLsplit是纯粹的透明代理,不能充当浏览器中配置的HTTP或SOCKS代理。SSLsplit支持SSL 3.0,TLS 1.0,TLS 1.1和TLS 1.2,以及可选的SSL 2.0。对于HTTPS连接,SSLsplit会动态生成并签名

2021-05-31 19:48:58 1248 1

转载 Linux gettid和pthread_self区别

1 线程ID获取方法 linux下获取线程有两种方法: 1)gettid或者类似gettid的方法   2)直接调用pthread_self() gettid 获取的是内核中线程ID,而pthread_self 是posix描述的线程ID。 通过执行man手册,我们也能发现他们的区别: SYNOPSIS        #include ...

2021-05-18 11:45:28 512

转载 详解TLS1.3的握手过程

最近学习了一下TLS几个版本的协议,今天来着重说明下TLS1.3的握手过程,通过对握手过程的说明你就可以清晰的明白为什么TLS1.3要比TLS1.2快那么多了,话不多说,先上TLS1.3的握手流程图:                             &nbs...

2021-05-13 15:31:28 2283

转载 linux内核网络协议栈-数据包的数据收发流程图

2021-05-11 19:41:24 262

原创 HTTPS握手过程、常见问题

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。解决web访问的保密性与完整性答:两个字段的值是一样的,具体参考RFC5280https://www.rfc-editor.org/rfc/rfc5280#secti

2021-05-08 17:19:14 743

原创 linux 共享库soname与realname

1、soname,可以使不同版本号的共享库共存,保证升级时不需要升级程 序文件。2、realname, 共享库文件名字,文件控制信息中保存有soname。readelf -d 可查看soname3、ld -llibfile, 程序加载时会根据libfile的soname查找依赖库。如: soname : libtest-1.sorealname : libtest-1-2.so, libtest-1-3.sogcc -fPIC -shared -Wl,soname,libhello.so

2020-09-14 15:54:19 298

原创 My first Article

Hello World!!!

2020-04-09 01:04:15 86

空空如也

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

TA关注的人

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