摘要:enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shared_from_this; std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被
阅读全文
摘要:memory order (3.1) 对应GCC的memory-order/memory-mode Memory Barrier 内存栅栏是一个令 CPU 或编译器在内存操作上限制内存操作顺序的指令,通常意味着在 barrier 之前的指令一定在 barrier 之后的指令之前执行。 在 C11/C
阅读全文
摘要:转载 How to Write a QUIC Endpoint Program 要编写使用QUIC的应用程序,需要创建一些新类以及继承一些QUIC类。 本文档通过QUIC的 客户端和服务器程序作为示例,介绍如何在自己的应用程序中使用QUIC。 使用的proto-quic版本为:Updating to
阅读全文
摘要:To write an application that uses QUIC, you will have to subclass some of the QUIC classes as well as creating some new classes. This document tries t
阅读全文
摘要:root@ubuntu:~# git clone https://github.com/ainvyu/vcxproj2cmake.git Cloning into 'vcxproj2cmake'... remote: Enumerating objects: 37, done. remote: To
阅读全文
摘要:Tars介绍 Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。
阅读全文
摘要:root@ubuntu:~/posix_quic# g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper Target: aarch6
阅读全文
摘要:在 CUBIC 之上又有个优化,叫做 Proportional Rate Reduction (PRR),用以让 CUBIC 这种算法在遇到丢包时候能更快的恢复到当前 CWND 正常值,而不过分的降低到过低的水平。 参考:draft-mathis-tcpm-proportional-rate-red
阅读全文
摘要:C/C++中的NULL到底是什么 我们查看一下C和C++的源码,不难发现: NULL在C++中的定义NULL在C++中被明确定义为整数0: /* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #
阅读全文
摘要:auto_ptr 在 C++98 开始推出 auto_ptr 管理裸指针,让开发者不需要手动释放指针内存,当生命周期结束时自动释放内存。但是 auto_ptr 在转移所有权会出现野指针导致崩溃。 root@ubuntu:~/c++# cat ptr.cpp #include <iostream> #
阅读全文
摘要:td::thread 各种构造函数例子如下: #include <iostream> #include <utility> #include <thread> #include <chrono> #include <functional> #include <atomic> void f1(int
阅读全文
摘要:C++11 中引入 std::ref 用于取某个变量的引用,这个引入是为了解决一些传参问题。 我们知道 C++ 中本来就有引用的存在,为何 C++11 中还要引入一个 std::ref 了?主要是考虑函数式编程(如 std::bind)在使用时,是对参数直接拷贝,而不是引用。下面通过例子说明 示例1
阅读全文
摘要:#include <iostream> #include<string> #include<sstream> #include<vector> using namespace std; #define MAX_NUM 1000 int string_to_num(string & str) { in
阅读全文
摘要:C++11标准新特性 右值引用(Rvalue Reference)是C++11标准引入的特性,它实现了转移语义和精确传递,主要的作用有2个方面: 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率; 能够更简洁明确地定义泛型函数; 左值引用和右值引用 首先区分什么是左值引用和右值引用,简
阅读全文
摘要:TCP_NOTSENT_LOWAT 更改 tcp_notsent_lowat 为 16384(16K)可以优化 web 速度。 #添加值 echo "net.ipv4.tcp_notsent_lowat = 16384" >> /etc/sysctl.conf #查看是否成功 sysctl net.
阅读全文
摘要:按下 F12 进入浏览器调试信息界面; 选取 Network->Protocol,
阅读全文
摘要:5G关键能力 近年来,5G已成为各国战略竞争制高点和未来社会发展、信息化的关键技术。目前,各国纷纷加快5G战略和政策布局。2019年工业和信息化部正式向中国电信、中国移动、中国联通、中国广电发放5G商用牌照,中国正式进入5G商用元年,这比原计划商用提前了一年。最新报告显示,截至2020年12月,我国
阅读全文
摘要:QUIC协议是一系列协议的集合,主要包括: 传输协议(Transport) 丢包检测与拥塞控制(Recovery) 安全传输协议(TLS) HTTP3协议 HTTP头部压缩协议(QPACK) 负载均衡协议(Load Balance)。 本文针对QUIC的系列协议进行科普性简单介绍,细节读者仍然需要通
阅读全文
摘要:https://reposhub.com/rust/network-programming/cloudflare-quiche.html Building # 準備 $ apt-get install cmake $ curl https://sh.rustup.rs -sSf | sh # 適宜P
阅读全文
摘要:QUIC requires to not have IP fragmentation. By looking at the source code, it seems that QUIC assumes a maximum of 1392: Ether=14 IPv4=20 UDP=8 QUIC=1
阅读全文
摘要:Quick UDP Internet Connection (QUIC) is a network protocol initially developed and deployed by Google, and now being standardized in the Internet Engi
阅读全文
摘要:Build quiche and BoringSSL: % git clone --recursive https://github.com/cloudflare/quiche % cd quiche % cargo build --release --features ffi,pkg-config
阅读全文
摘要:Chrome浏览器启用quic 1.启用quic: chrome://flags/#enable-quic 2.检查quic: chrome://net-internals/#quic 安装 http2-and-spdy-indicator 浏览器插件 Google has support for
阅读全文
摘要:前言 NFV(网络功能虚拟化)由运营商联盟提出,为了加速部署新的网络服务,运营商倾向于放弃笨重昂贵的专用网络设备,转而使用标准的IT虚拟化技术来拆分网络功能模块。在传统CT网络中对于服务质量保证的要求是非常高的,简而言之就是高带宽,高可靠,低时延。这些要求对于虚拟化技术而言本身就具有非常大的挑战。在
阅读全文
摘要:Peer A Server-Reflexive + + Transport Address | | 192.0.2.150:32102 | | | /| | TURN | / ^| Peer A | Client’s Server | / || | Host Transport Transport
阅读全文
摘要:root@ubuntu:~/nginx-1.16.1# ps -elf | grep nginx 1 S root 2739 1 0 80 0 - 2265 sigsus 20:09 ? 00:00:00 nginx: master process ./objs/nginx -c conf/ngin
阅读全文
摘要:x86平台 CompareAndSwap实现如下所示 #define barrier() __asm__ __volatile__("": : :"memory") int CompareAndSwap(volatile int* ptr, int old_value, int new_value)
阅读全文
摘要:单核 vs 多核 从多核的视角上来说,是存在着乱序的可能的。比如,假设存在变量x = 0,cpu0上执行写入W0(x, 1),对x写入1。接着在cpu1上,执行读取R1(x, 0),得到x = 0,这在x86和arm/power的cpu上都是可能出现的。原因是x86上cpu核和cache以及内存之间
阅读全文
摘要:gcc 编译为汇编代码 原始C++代码如下: #include<atomic> using namespace std; atomic<int> a; int j; int main() { int n; a.store(1,memory_order_acquire); n = j; return
阅读全文
摘要:读完了C++并发编程实战,记录一下对memory order的理解。 1. C++原子操作的内存顺序概述 memory order主要有以下几种: memory_order_relaxed只提供对单个atomic变量的原子读/写,不和前后语句有任何memory order的约束关系。 memory_
阅读全文
摘要:CPU上下文切换是保证 Linux系统正常工作的一个核心功能,按照不同场景,可以分为进程上下文切换、线程上下文切换和中断上下文切换。究竟怎么分析CPU上下文切换的问题。 过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降
阅读全文
摘要:https://zhuanlan.zhihu.com/p/78388827
阅读全文
摘要:在 16 位环境下,short 的长度为 2 个字节,int 也为 2 个字节,long 为 4 个字节。16 位环境多用于单片机和低级嵌入式系统,在PC和服务器上已经见不到了。对于 32 位的 Windows、Linux 和 Mac OS,short 的长度为 2 个字节,int 为 4 个字节,
阅读全文
摘要:CPU 亲和性 Linux 可以运行在多处理器的机器上,为了维持多个CPU之间的负载均衡,线程可能会被OS调度到其它CPU上,这种情况下线程就无法利用原先CPU上边的缓存了,也就降低了CPU cache的命中率了。所谓的CPU亲和性,就是让线程在指定的CPU上长时间运行而不被调度到其它CPU上边,以
阅读全文
摘要:为什么需要 Memory Order 如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的。简单来说,编译器以及 CPU 的一些行为,会影响到程序的执行结果: 即使是简单的语句,C++ 也不保证是原子操作。 CPU 可能会调整指令的执行
阅读全文
摘要:CAS类 CAS 即 compare-and-swap , 下面这两个函数提供原子的比较和交换,如果 *ptr == oldval,就将 newval 写入 *ptr 此函数在相等并写入的情况下返回 true bool __sync_bool_compare_and_swap (type *ptr,
阅读全文
摘要:pthread使用barrier栅栏方式同步 Linux中提供了多种同步机制,其中使用barrier(栅栏)是多线程之间进行同步的方法之一。 基本原理: 假设多个线程约定一个栅栏,只有当所有的线程都达到这个栅栏时,栅栏才会放行,否则到达此处的线程将被阻塞。 使用场景: 程序启动的时候,需要建立一个独
阅读全文
摘要:三次握手 三次握手协议的过程: a.客户端 向 服务器端 发送一个 SYN 包,请求一个主动打开。该包携带客户端为这个连接请求设定的随机数A作为消息列号。 b.服务器端接收到一个SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身携带一个随机产生
阅读全文
摘要:思维导图 1、什么是拥塞控制? 拥塞控制是一种用来调整传输控制协议(TCP)连接单次发送的分组数量的算法。它通过增减单次发送量逐步调整,使之逼近当前网络的承载量。 简单易懂的话来说,所谓的拥塞控制,从字面的意思来讲,网络通信就像是一个水管里的水,如果水突然因为水管的赃物阻塞了,那么我们就应该采取一定
阅读全文
摘要:This blog post explains how computers running the Linux kernel receive packets, as well as how to monitor and tune each component of the networking st
阅读全文
摘要:从网卡收包到上送协议栈有两个模式: 一种是传统的中断模式,即收到一个数据包,执行一次中断处理函数(比如e100_rx),在此函数中分配skb,替换有数据的skb(DMA已经将数据拷贝到初始化的skb),调用netif_rx将有数据的skb放在percpu的队列上(如果开启了RPS,这个队列有可能是本
阅读全文
摘要:Linux SMP 多核调用示例 在多core系统中,系统启动后内核将会在一个core上执行,且会在不同core上进行调度。即内核模块(驱动)加载只会在一个core中执行一次初始化。那么需要在所有core,或某个特殊的core执行那么我们需要smp提供的多核接口。 smp相关api 在linux/s
阅读全文
摘要:来看下NAPI和非NAPI的区别: (1) 支持NAPI的网卡驱动必须提供轮询方法poll()。 (2) 非NAPI的内核接口为netif_rx(),NAPI的内核接口为napi_schedule()。 (3) 非NAPI使用共享的CPU队列softnet_data->input_pkt_queue
阅读全文
摘要:过去的十年中互联网经历了爆发式的增长,这背后有什么技术平台起了最为关键的作用,我认为是Linux,即使在云计算流行的今天,它依然是最重要的一块基石。我们或许经常听到关于什么是最好的服务器编程语言、怎样是最好的架构设计的讨论,却从未听到有人讨论什么是最好的服务器操作系统,实际上它的地位早已重要到我们习
阅读全文
摘要:开启VF: modprobe -r igb modprobe igb max_vfs=7 echo "options igb max_vfs=7" >>/etc/modprobe.d/igb.conf 查找Virtual Function: # lspci | grep 82576 0b:00.0
阅读全文
摘要:目录 文章目录 目录 PCI 与 PCIe 设备 SR-IOV 在 KVM 中启用 SR-IOV 网卡 手动挂载 VF 到虚拟机 指令方式挂载 SR-IOV 的数据包分发机制 PCI 与 PCIe 设备 PCI(Peripheral Component Interconnect,外设组件互连):符合
阅读全文
摘要:virtio 是一种 I/O 半虚拟化解决方案,ovs是一个虚拟交换机,利用软件的方式实现交换功能。本文将对virtio+ovs的转发原理进行介绍和并对其性能展开分析。 1、 virtio和ovs介绍 传统数据中心的硬件服务器上运行着linux,linux使用硬件网卡收发包,硬件网卡连接的硬件交换机
阅读全文
摘要:译者序 本文翻译自 2019 年 DigitalOcean 的工程师 Nate Sweet 在 KubeCon 的一篇分享: Understanding (and Troubleshooting) the eBPF Datapath in Cilium 。 由于译者水平有限,本文不免存在遗漏或错误之
阅读全文
摘要:rte_eth_tx_hairpin_queue_setup
阅读全文
摘要:NAT Lookback Introduction 其實網路上關於 NAT Loopback 的文章到處都有,從原理,到如何在Linux實作等網路上各種資源都有,那這篇文章跟網路上的教學又有什麼不同?我唯一能夠貢獻的是 NAT Loopback 關於 Linux Kernel 的問題,在某些情況下,
阅读全文
摘要:mellanox DEV_TX_OFFLOAD_UDP_TNL_TSO
阅读全文
摘要:root@-x86:~# ethtool -K eno3 gso onroot@-x86:~# ethtool -k eno3|grep generic-generic-segmentation-offload: ongeneric-receive-offload: onroot@-x86:~# e
阅读全文
摘要:root@evpn2 test]# tcpdump -i vxlan100 -eennvv tcpdump: listening on vxlan100, link-type EN10MB (Ethernet), capture size 262144 bytes 11:53:45.567149 0
阅读全文
摘要:当前智能网卡已经从10G时代迈入25G时代,并且向50G/100G时代演进。云化带来的每年的增量是非常客观的,Mellanox/Broadcom等厂商之间的竞争也很激烈。降成本,提性能,是个永恒的话题。 在相关性能技术支撑中,多队列是很重要的一环。它源起处理器的多核技术带来的并行挑战,后来加入QoS
阅读全文
摘要:skb模型 IP 数据包分片(fragment)时用到的 frag_list 模型: 分片的数据有各自的 skb 结构体,它们通过 skb->next 链接成一个单链表,表头是第一个 skb 的 shared_info 中的 frag_list。 GSO 进行分段(segmentation)用到的一
阅读全文
摘要:vxlan_tnl_send根据vxlan tunnel的ip查找路由。调用vxlan_xmit_skb封装发送报文。 vxlan_xmit_skb计算封装vxlan需要的最小空间,并且扩展头部空间。添加vxlan头。如果有BGP的头,也添加。udp_tunnel_xmit_skb添加协议头发送。
阅读全文
摘要:序章 TCP 拥塞控制算法在网络中占据重要地位,在 BBR 算法出来之前,大部分现代操作系统的拥塞控制算法经过好几代的更新,最后大多都是采用 Cubic;而在 BBR 出现之后,由于它在长肥网络中优异的带宽的利用率,加上 Google 在 Youtube 的推广,大有替换 cubic 等传统 TCP
阅读全文
摘要:perf top 用于实时显示当前系统的性能统计信息。该命令主要用来观察整个系统当前的状态,比如可以通过查看该命令的输出来查看当前系统最耗时的内核函数或某个用户进程 linux系统下可以使用perf性能分析工具,做热点函数分析,perf安装命令yum install perf。perf常用的热点函数
阅读全文
摘要:NAT 网关对 TCP 的映射是根据 source_ip:port 和 destination_ip:port 来做的,经过 NAT 网关的 TCP 流量都通过这个四元组做识别,监听 SYN 和 ACK 可以确定 TCP 链接是否建立是否断开;而 NAT 网关对 UDP 流量的处理却没有这么可靠,对
阅读全文
摘要:本文整理自LiveVideoStack线上分享第三季,第五期,由清华大学计算机系网络技术研究所博士生王莫为为大家介绍近些年ABR算法的发展,探讨基于机器学习的ABR算法的优劣势,并结合AiTrans比赛分析其在直播场景中的应用问题。 文/王莫为 整理/LiveVideoStack 大家好,我是来自清
阅读全文
摘要:简介本文介绍清华大学聂晓辉等作者发表在JSAC 2019, Artificial Intelligence and Machine Learning for Networking and Communications期刊的论文《Dynamic TCP Initial Windows and Cong
阅读全文
摘要:概念 TSO(TCP Segmentation Offload): 是一种利用网卡来对大数据包进行自动分段,降低CPU负载的技术。 其主要是延迟分段GSO(Generic Segmentation Offload): GSO是协议栈是否推迟分段,在发送到网卡之前判断网卡是否支持TSO,如果网卡支持T
阅读全文
摘要:背景 目前,有大量的网络应用在处理数据包的时候只需要处理数据包头,而不会操作数据负载部分,例如防火墙、TCP/IP协议栈和软件交换机。对这类网络应用而言, 包头处理产生的开销(称为“per-packet overhead”)占了整体开销的大部分。因此,如何减少包头处理开销是优化这类应用性能的关键。
阅读全文
摘要:1.1 offload技术概述 首先要从术语offload说起,offload指的是将一个本来有软件实现的功能放到硬件上来实现,这样就可以将本来在操作系统上进行的一些数据包处理(如分片、重组等)放到网卡硬件上去做,降低系统CPU消耗的同时,提高处理性能。在neutron中,基于VXLAN的网络虚拟技
阅读全文
摘要:简介 VXLAN是网络虚拟化场景中广泛部署的隧道协议,OVS-DPDK中已经支持VXLAN类型的VTEP (virtual tunnel end point)。VXLAN隧道在数据面引入了报文封装/解封装的操作,且在ingress方向由于VXLAN报文携带两层L2-L4 header,OVS数据面需
阅读全文
摘要:http://arthurchiao.art/blog/understanding-tc-da-mode-zh/ 在处理 action 方面有两种工作模式: 传统模式:分类之后执行 tcf_exts_exec() direct-action 模式 随着 eBPF 功能越来越强大,它能做的事情不止是分
阅读全文
摘要:https://davidlovezoe.club/wordpress/archives/952
阅读全文
摘要:基于 Jericho2 芯片的下一代物理云网关 —— BCM88690 在使用现有的智能网卡解决方案的同时, UCloud 也在积极的在技术市场上寻找合适的下一代物理云网关,以替换现有的产品解决方案。 首先进入 UCloud 视线的是某公司的一款高性能交换机。它和智能网卡一样可以运行 Linux 和
阅读全文
摘要:○ As explained above, smartNIC driver’s callback is registered for hardware offload with TCF block by invoking tcf_block_cb_register() KPI. static con
阅读全文
摘要:yum install mtr 电信的三种承载网络 包括老一代的163骨干网,电信一种有三种承载网络,分别是传统163骨干网和CN2中的GT类型和GIA类型,下面分别介绍一下这三种网络的概念和区别: 传统163骨干网:这是最常见的线路,骨干节点全部都以202.97开头,因为用的人多,并且优化程度低,
阅读全文
摘要:[root@localhost dpdk-19.11]# tc qdisc show dev enp125s0f0 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 [root@loca
阅读全文
摘要:# devlink dev eswitch set pci/0000:05:00.0 mode switchdev # echo 2 > /sys/class/net/enp5s0f0/device/sriov_numvfs # ip l show 297: enp5s0f0: <BROADCAST
阅读全文
摘要:最近遇到了分片导致的一系列问题,所以在这里盘点一下OVS中都有哪些已经做了分片和重组的地方,以及还有哪些地方需要做。版本还是基于2.7.0。并且datapath的时候会分别分析OVS和OVS-DPDK两块的处理。 up到userspace的时候 OVS部分 netdev_frame_hook-->n
阅读全文
摘要:[root@localhost ~]# ovs-ofctl dump-flows br0 cookie=0x0, duration=706691.312s, table=0, n_packets=84180530, n_bytes=7456796909, priority=0 actions=NOR
阅读全文
摘要:隧道创建 对于隧道L2TP、FOU/GUE、GENEVE和VXLAN,隧道创建时,都需要在内核中新建一个UDP套接口,框架中的函数udp_sock_create4提供此功能。不仅是套接口的创建,还有本机接口的绑定bind,以及如果特定隧道提供了对端地址信息,进行连接connect。 int udp_
阅读全文
摘要:OVS Hardware Offloads Configuration OVS-Kernel Hardware Offloads Configuring Uplink Representor Mode Please note that this step is optional. However,
阅读全文