自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 qemu学习笔记3之相关资料链接

官网地址编译使用官网地址https://wiki.qemu.org/Documentation有问题可以先看官方提供的主文档资料主文档部分大多数文档是从 QEMU git 源代码树自动生成的,但是一些文本文件尚未转换为新格式git web 界面 QEMU wiki包含更多 尚未集成到 QEMU git 树中的用户文档和 开发人员文档QEMU wiki用户文档开发人员文档...

2022-05-24 10:01:47 226

原创 qemu学习笔记2之搭建x86虚拟机

用Qemu搭建x86_64学习环境软件环境Linux内核版本: Linux-5.16Busybox版本: busybox-1.35.0host: CentOS Linux release 8.3.2011linux内核编译安装内核编译依赖软件yum install -y flex bison ncurses-devel编译命令make O=out_x86_64 x86_64_defconfigmake O=out_x86_64 menuconfigmake O=out_x86_64

2022-03-25 11:04:17 2956

原创 qemu学习笔记1之编译安装测试

发行版本直接命令安装Arch: pacman -S qemuDebian/Ubuntu: apt-get install qemuFedora: dnf install @virtualizationGentoo: emerge --ask app-emulation/qemuRHEL/CentOS: yum install qemu-kvm# qemu-system-x86_64命令无法找到,没有这个命令需要链接下,举个例子:ln -s /usr/libexec/qemu-kvm /usr/

2022-03-25 11:02:16 3259

原创 xdp初体验

简介XDP是利用ebpf提供的全新内核网络性能提升方案,主要优势包括:它不需要任何专门的硬件它不需要内核绕过它不会取代 TCP/IP 堆栈它与 TCP/IP 堆栈以及 BPF 的所有优点协同工作在没有引入XDP之前,原来是的内核网络数据包传输路径是这样的:NIC > driver 驱动> tc流控 ==> netfilter ==> IP/TCP协议栈 ==> socket启用XDP后,网络包传输路径是这样的:①NIC > ②driver 驱动&

2021-08-09 17:44:11 1753

原创 linux下使用libasan检测进程内存异常

软件环境CentOS Linux release 8.3.2011按照libasan包yum install libasan测试例子#include <stdio.h>#include <stdlib.h>#include <unistd.h> int my_print(){ int *a = malloc(10); printf("this is my_print, a:%p\n", a); return 0;} int

2021-05-19 16:43:49 2868

原创 解决git在win下无法clone linux内核源码的问题

解决git在win下无法clone linux内核源码的问题step 1 :初始化空库mkdir linux cd linuxgit init #初始化空库 step 2 : 拉取remote的all objects信息git remote add -f origin git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git拉取remote的all objects信息开启sparse clone,设置需要pull的目

2020-06-28 08:49:04 2374 2

原创 git管理仓库搭建

用gogs搭建属于自己的git网站gogs是一款极易搭建的自助 Git 服务, 掌握了它, 我们就可以搭建自己的git服务站点gogs官网, github中文地址安装dockerdocker安装教程参考链接下载gogs的docker镜像docker pull gogs/gogsych@~$docker pull gogs/gogsUsing default tag: latestlatest: Pulling from gogs/gogscbdbe7a5bc2a: Pull compl

2020-06-27 16:45:02 229

原创 docker环境安装

安装docker安装详细教程使用官方安装脚本自动安装安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也可以使用国内 daocloud 一键安装命令:curl -sSL https://get.daocloud.io/docker | sh一键安装命令存在一个问题,它默认直接找所有可用包最新的版本,如果本地的软件源存在软件版本冲突,这里是解决不了的。如果一键安装存在问题,建议使用下面的手动安装

2020-06-27 09:43:18 257

原创 rust学习笔记

安装linux 安装流程$ curl https://sh.rustup.rs -sSf | sh安装完成后,需要重启系统,重启后rust的环境变量自动加到系统PATH里面[ych@localhost cargo_guess]$ env |grep PATHPATH=/home/ych/.cargo/bin:/home/ych/.local/bin:/home/ych/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin或者直接carg

2020-06-20 15:27:42 516

原创 gdb使用技巧总结

简介一般来说,GDB主要帮忙你完成下面四个方面的功能:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事。动态的改变你程序的执行环境。技巧1 启动时不显示提示信息[ych@localhost ~]$ gdbGNU gdb (GDB) Red Hat En...

2019-09-06 16:27:35 380

原创 busybox之reboot命令流程分析

busybox初始化注册reboot处理信号busybox启动的时候,会注册reboot的处理信号init_main bb_signals(0 + (1 << SIGUSR1) /* halt */ + (1 << SIGTERM) /* reboot */ + (1 << SIGUSR2) /* poweroff */ , ha...

2019-09-06 12:43:25 2266

原创 linux c编程实用api记录

查询进程运行的cpu和numa node#include <stdio.h>#include <sys/syscall.h>void main(){ unsigned cpu = 0; unsigned node = 0; syscall (__NR_getcpu, &cpu, &node, 0); printf("cpu:%d nod...

2019-04-18 11:08:55 200

原创 vpp之节点报文处理流程分析

这里以vpp提供的节点sample例子为例来分析vpp的节点对报文处理的流程vpp/src/examples/sample-plugin/sample$lltotal 56-rw-rw-r-- 1 ych ych 886 Apr 1 17:34 CMakeLists.txt-rw-rw-r-- 1 ych ych 17933 Apr 1 17:34 node.c-rw-rw-r...

2019-04-18 09:52:23 5634

原创 vpp之主动发包实现

在使用vpp收发包的过程中,除了大部分处理报文输入之外,我们还有可能会遇到主动发包的情况,主动申请一个buf,填充报文各层信息和payload后,将其发送到指定网口出去,下面提供一个我自己写的主动发包的例子{ u8 have_packet_rewrite = 1; u32 bi0; vlib_buffer_t *b0; vlib_frame_t *f; upu_main_t * ...

2019-04-16 09:50:07 2692 5

原创 vpp之vec学习

概念理解vpp的vec(向量)是一个允许动态调整大小的数组,数组的类型可以是任意的c所有数据结构类型,通过vec来操作数组数据非常方便.一个vec包含以下几部分: 用户自定义头部(aligned to uword boundary) 可选 vec头部(vec_header_t, 主要是定义了vector length: number of elements)user's...

2019-04-15 18:57:39 5213 2

原创 linux 常用命令

记录在使用linux过程中常用的命令,方便查找centos装机建议安装软件yum install -y net-tools vim gcc gcc-c++yum install -y psmisc sysstatyum install -y numactl-devel*x86_64yum install -y bzip2sudo apt-get -y install libnuma-...

2019-04-13 10:36:43 818

原创 vpp之浅谈插件和使用

vpp版本笔者这里使用的vpp版本是最新git下来的,show version信息如下DBGvpp# show version vpp v19.04-rc0~531-g537e85d built by ych on localhost.localdomain at Wed Mar 27 10:17:26 CST 2019插件介绍vpp的软件框架主要分为四个层面:top ├─...

2019-03-27 12:28:40 8514 3

原创 vpp之dpdk测试环境搭建

绑定82955网口到dpdk模式sudo modprobe vfio-pcisudo /usr/bin/chmod a+x /dev/vfiosudo /usr/bin/chmod 0666 /dev/vfio/*sudo ifconfig p3p2 downsudo ./dpdk-devbind.py --bind=vfio-pci p3p2sudo ./dpdk-devbind.p...

2019-03-26 16:47:33 4504

原创 vpp之使用Vagrant搭建测试环境

使用Virtual Box和Vagrant虚拟环境搭建vpp测试场景目的:在虚拟环境中,运行多个vpp实例并将它们相互连接以形成拓扑安装Virtual Boxfor centoshttps://wiki.centos.org/HowTos/Virtualization/VirtualBoxcd /etc/yum.repos.dwget http://download.virtual...

2019-03-25 11:02:27 1058

原创 vpp之源码编译

服务器系统[ych@localhost ~]$ cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)$uname -aLinux air5005 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Li...

2019-03-23 11:34:54 1771 15

原创 dpdk eal初始化流程梳理

for dpdk-18.11这里把dpdk的eal初始化流程简单汇总,尽量把每个函数功能介绍详细,持续更新中rte_eal_init│├──rte_cpu_is_supported:检查cpu是否支持│├──rte_atomic32_test_and_set:操作静态局部变量run_once确保函数只执行一次│├──pthread_self() 获取主线程的线程ID,只是用于打印...

2019-03-21 10:29:05 2571 1

原创 浅谈对RCU锁的理解

概念Read-Copy Update,简称RCU,可以认为它是一种锁或者一种同步机制,其实说它是一种同步机制应该更恰当写,因为本身RCU的核心实现没有用的锁,只是用了内存屏障+TLS(线程本地变量)或者是Per-CPU变量都可以。RCU的使用场景是读多写少的场景,但是他和读写锁最大的差异就是,读写锁在持有写锁的时候,读锁会被阻塞,但是RCU运行写锁高并发,就算在持有写锁的时候,也能实现读锁不被...

2019-03-20 10:28:47 4547

原创 dpdk kni学习

相关概念Kernel NIC Interface (KNI) 是dpdk提供的允许用户面的应用报文访问内核协议栈接口库。kni主要的特点: mbuf到skb转化,只需要一次内存拷贝,中间mbuf从用户态传到内核态,走的是内存零拷贝,中间没有系统调用和copy_to_user()/copy_from_user() 操作; 允许用户通过标准的linux net tools查看dpdk的报文...

2019-03-14 17:16:38 1389 1

原创 dpdk mbuf之代码流程

创建mbuf的内存池当我们要使用mbuf的时候,需要先创建一个mbuf的内存池,然后每次都从mp里面alloc和free即可。相对dpdk提供的mbuf库来说,使用比较简单,具体代码在:dpdk/lib/librte_mbuf 目录里面struct rte_mempool *rte_pktmbuf_pool_create(const char *name, unsigned int n,...

2019-03-13 18:53:08 5540

原创 dpdk mbuf之结构体学习

struct rte_mbufstruct rte_mbuf的源码定义如下,struct rte_mbuf结构体定义的时候,由于成员原来越多,所以有意跨两个cache line大小,通过MARKER cacheline0和MARKER cacheline1来标示两个cache line, cacheline0到 cacheline1之间的变量都是在cache line 0,原则上将基础性、频繁...

2019-03-13 15:51:25 7511 1

原创 dpdk mbuf之概念理解

对dpdk的mbuf理解下次更新对mbuf的学习总结

2019-03-13 15:51:10 12520 2

原创 dpdk mempool之代码流程

dpdk mempool之代码流程

2019-03-11 19:12:55 1964

原创 dpdk mempool之结构体学习

rte_mempool结构体struct rte_mempool { /* * Note: this field kept the RTE_MEMZONE_NAMESIZE size due to ABI * compatibility requirements, it could be changed to * RTE_MEMPOOL_NAMESIZE next time the...

2019-03-11 16:39:49 2367

原创 dpdk mempool之概念学习

dpdk mempool学习总结概序dpdk的mempool是预先分配预固定大小的内存池,它可以通过名字来表示不同的内存池,通过注册不同钩子函数来申请、释放内存对象。默认的handler是无锁ring库来实现的。同时,它也提供了一些其它特性:每个core独立的对象缓存区local_cache,用来减少多核访问造成的冲突(无锁ring需要用到cas机制,所以频繁使用,对系统性能还是有比较大...

2019-03-11 15:49:04 3009 3

原创 i++和++i的区别

i++和++i的区别概念意思i++:先取值后自加++i:先自加后取值汇编代码生成分析在汇编层面看这两个语句的区别,可以知道具体的实现细节code 1 for i++#include void main(){ int index = 0; printf(&quot;index1:%d \r\n&quot;, index++); printf(&quot;index2:%d \r\n&quot;...

2019-03-08 14:35:02 583 2

原创 centos7.4+vmware12安装dpdk环境

centos7.4+vmware12安装dpdk环境编译dpdkcd /home/ych/wget https://fast.dpdk.org/rel/dpdk-18.05.1.tar.xztar -xvf dpdk-18.05.1.tar.xzexport DPDK_DIR=/home/ych/dpdk-stable-18.05.1export DPDK_TARGET=x86_64...

2019-03-06 08:57:27 1045

原创 对dpdk的rte_ring实现原理和代码分析

对dpdk的rte_ring实现原理和代码分析前言dpdk的rte_ring是借鉴了linux内核的kfifo实现原理,这里统称为无锁环形缓冲队列。环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的数据。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针, 而写用户仅仅会影响写指针。...

2019-03-05 18:25:52 7557 1

原创 git之解决git pull发生的冲突

git之解决git pull发生的冲突我们在git pull代码的时候,经常遇到以下情况$git pullUpdating 05e89f5..6ed5776error: Your local changes to the following files would be overwritten by merge: core/service/common/comm_msg.h core/...

2019-03-05 10:38:05 2248

原创 浅谈对自旋锁的理解

浅谈对自旋锁的理解概念理解何谓自旋锁(spin lock)?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻, 最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡...

2019-03-03 00:40:08 1020

原创 浅谈对读写锁的理解

浅谈对读写锁的理解概念理解读写锁,顾名思义,一个锁,分为两种形态,读状态和写状态,读写锁是专门为大多数读状态情况而设计的。这种情况下,读写锁可以提供比其他锁(比如互斥锁,自旋锁等)更大的扩张性,因为读写锁允许同一时刻多个读任务同时持有锁。增加读任务的并发性。特征:写锁优先级高,写独占,读共享1.写模式加锁时,解锁前,所有对该线程加锁的线程都会被阻塞。2.读模式加锁时,如果线程是读加...

2019-03-03 00:12:18 1449

原创 浅谈对原子锁的理解

对原子atomic操作的理解前言我们知道,当我们修改某一个变量的时候,在汇编层面看来,至少需要细分为“读-&amp;amp;amp;amp;amp;gt;改-&amp;amp;amp;amp;amp;gt;写”三个过程,也就是说,他们访问存储单元两次,第一次读原值,第二次写新值。假设这样一种场景,两个cpu同时对同一个存储器单元做“读-&amp;amp;amp;amp;amp;gt;改-&amp;amp;amp;amp;amp;gt;写”操作的话。首先,两个CPU都试图

2019-03-02 23:33:29 9461

转载 Linux 的启动流程

半年前,阮一峰写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,阮一峰接着往下写了 Linux 的启动流程,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个

2013-08-25 23:52:18 282

Linux2.6协议栈源代码分析

对应《深入浅出Linux TCP/IP协议栈》

2013-08-08

空空如也

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

TA关注的人

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