自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (12)
  • 收藏
  • 关注

原创 单线程内存拷贝速度居然比硬盘写入还慢?

单线程内存顺序拷贝,首次拷贝性能不如SSD写入性能!

2024-04-10 16:45:08 296

原创 全网最简单vscode使用Makefile调试多文件的C/C++代码

vscode调试C/C++教程很多,操作麻烦,这里试图找到一个最简单的使用vscode调试C/C++代码的方法。这里是使用Makefile的多文件方式。

2024-01-05 18:03:13 688

原创 Go实现ECDH密钥交换-X25519

ECDH, X25519算法,实现一次RTT密钥交换。 Go语言1.20版本

2023-11-23 16:43:24 371

原创 DPDK线程初始化逻辑详解

介绍DPDK 工作线程和主线程的初始化过程,以及用户如何使用worker线程的方法

2023-08-10 12:00:20 305

原创 iperf3跑满100G网卡实测记录

其中发送速率12016406,基本稳定在1200000 KB/s以上。三个窗口分别同时开3个iperf3 client,跑10分钟。三个iperf3 Client, 合并速率大约 92GB/s。Kbps Mbps Gbps换算倍数是 1000。三个窗口分别开3个iperf3 server。ubuntu20.04, 系统设置默认状态。Kpbs 与 KB/s换算关系是 x8。两台服务器 100G网卡对插直连。

2023-07-27 16:13:16 1599

原创 RDMA RoCev2 CM建链和Socket建链测试

RDMA在高性能计算,AI大模型训练中发挥着重要的作用。主流支持RDMA的协议有IB、RoCev1、RoCev2、iWARP。其中RoCev2是应用最广泛的协议,因为其RDMA over UDP/IP,不依赖昂贵的IB网络设备,同时支持路由,性能上也接近原生IB水准。

2023-07-11 17:01:33 1483

原创 arch_mem_object_align的作用是什么?

DPDK在申请内存池时,会对OBJ大小进行重新计算最终进行重计算的函数是根据注释,此函数是让对象的首地址均匀的落在内存的channels和ranks中(X86平台下)。

2023-07-10 13:38:26 111

原创 无损网络实现的几种技术

基于端口、基于流、基于流量调度所实现无损网络的技术

2023-06-25 18:31:29 781

原创 大小端与字节序位序的关系实测

大小端对字节序和位序的影响,网络传输会影响字节序和位序吗?位结构体和大小端有什么关联?

2023-05-23 16:48:28 817 1

原创 Go实现一个简单的webserver,提供文件下载服务

代码通过ChatGPT获得,稍加修改。

2023-04-13 00:09:23 608

原创 Golang利用Pid实现单进程模型

使用读写Pid(进程号)文件的方式实现单进程模型。Golang 在Linux平台实现。

2022-12-16 18:08:48 794

原创 Golang的IP、字符串、整形之间的转换

golang IP []byte string uint32转换

2022-11-04 18:26:55 1256

原创 最简单的Makefile编译DPDK应用

为了方便开发DPDK的程序,一个Makefile模板

2022-09-28 18:01:53 399

原创 URDMA跑起来

urdma运行环境搭建,测试示例。

2022-09-02 16:45:03 374

原创 DPDK KNI介绍

DPDK KNI接口的说明,rte_kni内核模块的使用方式和原理。

2022-07-21 12:20:46 927

原创 gettimeofday和clock_gettime性能对比

测试方法gettimeofday 和 clock_gettime的7种类型时间的对比。clock_gettime类型如下类型含义CLOCK_REALTIME从1970.1.1到目前的时间CLOCK_MONOTONIC系统启动到现在的时间CLOCK_THREAD_CPUTIME_ID线程所消耗的时间CLOCK_PROCESS_CPUTIME_ID进程所消耗的时间CLOCK_MONOTONIC_RAW基于硬件时间CLOCK_REALTIME_CO

2022-03-29 15:13:48 3060 1

原创 Wireguard握手交互代码分析

Wireguard握手交互代码分析消息结构握手请求消息struct message_handshake_initiation { struct message_header header; // header里只有一个type, 发起0x01 __le32 sender_index; // Sender的标识,自定义。 u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN]; // 本地临时公钥 // AEA.

2021-11-17 17:59:06 2555

原创 DFINITY基本架构

DFINITY简介DFINITY (Internet Computer): 通过结合区块链网络节点的集体计算能力来创建“Internet Computer”,从而彻底改变互联网。Internet Computer是基于Internet Computer Protocol(ICP)区块链计算协议实现。DFINITY 的目标是成为一个快速、安全、可扩展的云平台,它将为公共互联网的扩展出更多的功能,允许用户直接部署应用程序和安装代码,而不会出现影响比特币和以太坊等其他主要区块链的拥堵问题。DFINITY =

2021-11-04 18:49:12 13136

原创 DID分布式数字身份简化模型

术语说明分布式身份标识符: Distributed Identity,DID,具备去中心化可验证,自主管理,全球唯一的特性;内部最核心内容为公钥+身份信息可验证凭证:Verifiable Credentials, VC,主要为声明的集合声明:claims,包含凭证颁发者为DID身份赋予的其他属性值和颁发者的签名可验证表达: Verifiable Presentation, VP, 主要包含可验证凭证VC和持有者的签名身份说明持有者: Holder, 自主生产DID,向注册机构上传DID,向颁发

2021-10-12 15:36:25 11297

原创 VRF proof极简理解

VRF proof术语说明SK: 私钥PK: 公钥M:输入值R:哈希输出P:证明函数证明人根据输入M和私钥计算出唯一的哈希值RR = VRF_Hash(SK, M)证明人根据输入M和私钥计算出唯一的证明PP = VRF_Proof(SK, M)验证者将证明转换成哈希值R = VRF_P2H ( P )即 VRF_Hash(SK, M) == VRF_P2H(VRF_Proof(SK, M))验证者校验True/False = VRF_verify(PK, M, P)特性

2021-10-12 11:45:44 376

原创 SM9原理极简介绍

KGCKey Generate Center可信机构产生主私钥和主公钥: Master Priv Key 、Master Pub Key产生用户私钥: Master Priv Key与用户Identity(如电话号码)计算生成用户私钥User Priv Key。签名方法签名(User Priv Key 和 Master Pub Key)一起加密生成数字签名。验证签名(User Identity 和 Master Pub Key)一起验证数字签名。需要可信机构KGC的存在,并生成与用户Ide

2021-10-12 11:34:11 6298

原创 试用Rawsocket收发二层包

测试代码'''#include#include#include#include#include#include#include#include#include #include#include#include#include#include #include #define BUFFSIZE 1024const char* device = "enx00e04c680125";const unsigned char dst_mac[6] = {0x00,0x0

2021-06-28 00:10:37 1970 1

原创 Openssl中chacha20-poly1305的使用

原理简述chacha20-poly1305 是带有关联数据的认证加密(AEAD)AEAD是一种能够同时保证数据的保密性、 完整性和真实性的一种加密模式。通常使用除了明文以外,会把包头的地址和端口等信息放进去一起做完整性校验。chacha20 是流加密算法。poly1305 是完整性校验是算法,即根据输入(加密数据和关联数据)输出16字节的认证标签。使用方法加密输入项:输入项长度(Bytes)说明key32共享秘钥iv12干扰项,每次不同AADN关

2021-01-28 16:16:05 5170 1

原创 Openssl中椭圆曲线secp256k1的使用

引言最近基于openssl学习非对称加密,内部复杂的算法对本人来说也相当于盲盒,但是只要弄清楚它们的性质,就可以使用它们了。本文主要记录基于openssl如何使用secp256k1算法。secp256k1概述secp256k1就是方程: y2y^{2}y2= x3x^3x3 + 7 的一条曲线有一个基点G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5D

2021-01-22 14:44:48 4511

原创 openssl生成椭圆曲线的私钥是如何做到每次不同的?

生成一个私钥只需要3步1. 获得指定曲线的group (如比特币的secp256k1)2. group和key绑定3. 用key来生成私钥先上一段代码例子 key1=EC_KEY_new(); if(key1==NULL) { printf("EC_KEY_new err!\n"); return -1; } key2=EC_KEY_new(); if(key2==NULL) { p

2021-01-13 10:40:56 917

原创 mTCP编译配置和例子使用

目录编译配置地址配置ARP表配置运行wget实例编译获取mTCP源码git clone https://github.com/mtcp-stack/mtcp.git获取mtcp目录下dpdk源码cd mtcpgit submodule initgit submodule update./setup_mtcp_dpdk_env.shPress [15] to compile x86_64-native-linuxapp-gcc versionPress [18] to install i

2020-12-24 11:55:07 1413 10

原创 Segment和Fragment的区别,做个实验就很清楚了

tcp socket, send一个超过mtu的数据包出去,网卡是发两个分片包出去,还是发两个独立的数据包出去呢?不知道,那就做个实验吧。写一个tcp client 和 tcp server .tcp client 一次调用send10240 bytes的包[root@node-3 tcpt]# ./a.out ========waiting for client's request========recv msg from client: , 10240 b.

2020-12-14 17:10:50 3804

原创 mellanox网卡驱动安装和温度检查

最近配了一台自用的编译和测试主机操作系统:ubuntu 18.04i7-10700 + b460m迫击炮 + mellanoxConnectX-4 Lx 网卡;这块网卡就有两个问题:1. 开机就很烫(不管有没有ifconfig up),手摸不得。2. 直接Reboot之后,网卡消失了,lspci都识别不到。降温为了降温,特地给机箱加了暴力风扇,默认转速太吵,又通过微星的bios调低转速,噪音能接受,网卡虽然还是热,但是不会烫手了。想通过lm-sensor监控温度失败了..

2020-12-10 16:28:50 5965 1

原创 vpp的cpu占用100%解决小技巧

笔记本虚拟机跑vpp啊,i7-8750H的cpu一个核心100%,发热感人,风扇很吵。解决这个cpu 100%问题,同时不影响功能调试的方法被我想到一个。主线程usleep, 用了这招之后跑性能测试肯定是跑不了的,当然笔记本本来也不是用来跑性能的。main.c: 1768function: vlib_main_or_worker_loopstatic u32 ck_rouds = 0; //define staic varible to count while (1)

2020-11-09 11:10:36 1122

原创 基于dpdk实现一个存数据的小例子

学习手撸dpdk,从写最简单的例子开始。功能说明数据包: ETHER HEADER | TYPE| LENGTH | VALUETYPE = 0x03 write reqTYPE = 0x04 write reply收到write req的单播请求,保存value, 回复write reply消息。测试客户端利用python3 scapy库来构造符合规则的二层数据包[root@localhost ~]# python3Python 3.6.8 (defau...

2020-10-09 00:36:20 1107 1

原创 简析vpp中的dpdk初始化

最近想手撸dpdk,正好需要研究一下dpdk的参数如何配置,就从vpp出发看看dpdk如何初始化的。vpp使用默认startup.conf配置。全局初始化rte_eal_init跟踪到执行该函数的参数[root@localhost fdio-vpp]# make debugGNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7Copyright (C) 2013 Free Software Foundation, Inc.Licen

2020-10-06 02:14:21 1787 3

原创 vpp nat44 handoff数据包

最近遇到一个性能瓶颈,在多线程共享内存池和哈希表的时候,不可避免产生锁竞争,性能受到影响。想要解决这个事情呢,有一个方法就是每个worker线程使用独立的内存池和哈希表,使之无锁化。如果要独立就要确保同一条流的包一定在同一个线程处理,这就需要通过专门的分发线程来做这件事了。恰好vpp本身支持线程之间的数据包调度——handoff。这里就从nat44的handoff.开始来学习吧。简化掉拥塞,trace等处理,只看核心逻辑。初始化设定nat44接口snat_feature_comman

2020-08-18 17:44:28 1583

原创 解决双蛋问题的C代码实现

看了李永乐老师讲解的双蛋问题,觉得很有趣,就按照视频里的思路自己实现一个吧。双蛋问题,实际题面为T层楼,N个蛋,最小扔多少次蛋一定能找出碎蛋的临界楼层?解题思路实为递归,这里就不多废文字了,有兴趣的也可以去B站av96214853观看李永乐老师的讲解该视频,更容易理解。直接上代码#include <stdio.h>#define FLOORS 2000#defi...

2020-03-18 01:56:17 931

原创 SR-IOV虚拟出来的网卡如何被VPP(DPDK)接管

目录引言SR-IOV简介网卡支持配置步骤1. 修改Bios enable SR-IOV2. 修改启动参数3. 设置vf网卡mac地址,权限4. 切换网卡驱动5.启动VPP小结引言在只有一张网卡的情况下,这个网卡不能既被VPP(DPDK)接管,同时被操作系统所使用。这个时候一般只能通过创建虚拟机,在虚拟机中运行VPP(DPDK)接管virtio的虚拟...

2019-12-17 20:30:20 5876 2

原创 根据掩码位计算IPv6地址掩码

最近想一个问题如何快速判断IPv6地址是否为同网段?比如给定一个前缀prefix 和一个掩码位数mask_len, 那么一个IPv6地址与前缀怎么对比比较快呢。我大概想了一下,把mask_len变成mask, (IPv6 &mask) ^prefix == 0 ? 这种位操作的判断应该是比较快的。mask_len变成mask就要麻烦一点了,毕竟IPv6有16个字节,不像IP...

2019-11-26 01:31:30 5478

原创 谷歌负载均衡Maglev实现简析

目录简介LB工作流程Maglev内部架构控制器转发器转发器实现快速包处理免拷贝批处理简介参考资料:Maglev: A Fast and Reliable Software Network Load Balancerhttps://storage.googleapis.com/pub-tools-public-publication-data/pdf/44...

2019-07-26 18:47:12 1293

原创 有风阻的非自由落体的速度求解之路

目录问题的由来开启求助模式求助一 数学物理竞赛老师求助二 高中数学老师求助三 做轮胎的求助四 小学教师求助五刚考完研的大四小朋友求助六 前同事——得到正确答案结语问题的由来上周有一天和老婆大人讨论小孩平衡车的问题,说体重大的小孩下坡有优势,速度会更快。我感觉也是的,那为什么体重大的会更快呢,老婆说你看看他们比赛不就知道了。我说对,如果不考虑阻力肯定是一...

2019-04-19 01:40:47 1572

原创 NAT ALG PPTP实现简要分析

目录PPTP简介PPTP工作流程建立连接数据传输直接穿越NAT会有什么问题NAT44 NAT64NAT66NAT ALG PPTP实现方法1. NAT 设置一个 call-id pool2. 建立连接时3. 数据传输时结语PPTP简介PPTP全称Point to Point Tunneling Protocol,点对点隧道协议。本质...

2019-03-06 17:55:45 1540

原创 写一个简单的VPP插件

目录注册插件注册nodeNode处理packet主函数注册开关CLI文件位置运行测试源码在此总结分析通过VPP自带的例子和网上一些例子的参考,写了一个最简单的插件练习,插件功能:把hook到的包打印一下IP头。注册插件VLIB_PLUGIN_REGISTER () = { .version = CK_SAMPLE_PLUGIN_BUILD_VE...

2018-12-06 11:51:44 4150 8

原创 VPP基本操作练习

目录基本操作启动输入命令到vpp1开启vpp shell接口操作创建veth创建vpp接口设置vpp接口IPTrace数据包连接两个VPP实例查看ARP查看VPP路由表启动第二个VPP实例创建memif路由操作添加主机路由添加vpp2路由Trace PingSWITCHING重新启动两个VPP实例建立veth为vp...

2018-11-30 14:42:31 9390 1

VPP简单插件源码Hook数据包

https://blog.csdn.net/jacicson1987/article/details/84849177 注册node,注册插件,hook数据包

2018-12-06

ComTool串口工具

一个小而精悍的串口调试工具。 打开串口,设置波特率等参数,设置一次会被一直默认,直到被修改。 支持文本,16进制的 收发。

2013-10-30

socket tool

此工具可以做TCP 客户端、服务端; 可以TCP\UDP链接 支持文本 十六进制 excel 等格式的输入输出。 做socket测试非常好用的工具

2013-10-30

Thinking in Java

Thinking in Java

2013-04-09

SQL21天学通

21天学通SQL语句。。很精简,适合初学者快速学习。。

2013-04-09

数据结构(C语言版)

严蔚敏编著 清华大学出版社出版的 数据结构 教材 有完整目录,清晰版PDF文件。

2012-09-27

GDB中文手册

5.1.1 设置断点 5.1.2 设置观察点 5.1.3 设置捕获点 5.1.4 删除断点 5.1.5 停用断点 5.1.6 中断条件 5.1.7 断点命令列表 5.1.8 断点菜单 5.1.9 “不能插入断点” 5.1.10 “调整过的断点地址……”

2012-09-14

胡晓光数字电子技术基础课后答案.

胡晓光数字电子技术基础课后答案.北航滴书。。十一五规划

2011-10-17

C++输入输出流详解

ofstream 类支持磁盘文件输出 如果在构造函数中指定一个文件名,当构造这个文件时该文件是自动打开的 ofstream myFile("filename",iosmode); iosmode 可以在调用默认构造函数之后使用 open 成员函数打开文件 ofstream myFile; // 声明一个静态输出文件流对象 myFile.open("filename",iosmode); // 打开文件,使流对象与文件建立联系 ofstream* pmyFile = new ofstream; // 建立一个动态的输出文件流对象 pmyFile->open("filename",iosmode); // 打开文件,使流对象与文件建立联系

2011-10-17

DOS命令大全

第1、最常用的命令   cd     改变当前目录       sys   制作DOS系统盘   copy    拷贝文件         del   删除文件   deltree   删除目录树        dir   列文件名 …………

2011-10-17

空空如也

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

TA关注的人

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