自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

金荣的个人技术博客

开放、自由、分享

  • 博客(91)
  • 资源 (2)
  • 收藏
  • 关注

原创 陈老师Linux内核进程管理导学

陈老师学堂在线《Linux内核分析与应用》导学第三章 : 进程管理

2019-10-08 17:49:08 1223

原创 陈老师Linux内核内存寻址导学

陈老师学堂在线《Linux内核分析与应用》导学第二章 : 内存寻址

2019-10-08 17:44:50 1408 1

原创 陈老师Linux内核概述导学

陈老师学堂在线《Linux内核分析与应用》导学第一章 : 概述

2019-10-08 17:40:26 4751

原创 解决ssh: connect to host github.com port 22: Connection refused

解决ssh: connect to host github.com port 22: Connection refusedvim ~/.ssh/configHost github.com User xxxxx@xx.com Hostname ssh.github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa Port 443

2022-05-09 20:14:30 5465 3

原创 Linux内核学习资料

1. 书籍1.1 入门《Linux内核设计与实现》《深入理解Linux内核》1.2 提高《深入Linux内核架构》1.3 方向深入Linux子系统内存——《深入理解Linux虚拟内存管理》网络——《深入理解LINUX网络内幕》驱动方向《Linux设备驱动程序》2. 网站2.1 官方下载内核源代码、补丁、跟踪内核bughttps://www.kernel.org/Linux新闻https://lwn.net/Linux内核开发邮件列表http://vger.kernel

2021-11-09 15:46:55 783

原创 Linux进程虚拟地址空间

提及Linux的内存虚拟地址空间,还要从程序说起。我们编写好一个应用程序时,以C程序为例,经过预处理、编译、汇编、链接后,生成Linux中的可执行文件ELF文件。当我们运行可执行文件时,进程就出现了,可以理解为进程就是运行中的程序。在32位Linux系统中,每个进程都有4GB的虚拟地址空间,其中0-3GB是用户空间,3-4GB是内核空间。每个进程都以为自己独占整个4GB的地址空间,但实际上1GB的内核空间是所有进程共享的,独占的3GB用户空间也只是虚拟的。那么进程的虚拟地址空间是怎么管理的呢?我们知道,

2021-08-31 22:14:54 1366

原创 Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建

Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建1. 前言2. 安装三个Ubuntu2.1 三个机器都关闭防火墙2.2 三个机器都关闭swap2.3 三个机器都关闭selinux3. 部署Kubernetus集群3.1 安装 kubeadm、kubelet和kubectl3.2 安装 Docker3.3 初始化 Master Node3.4 集群中添加 Worker Node4. 安装Cilium4.1 安装Helm4.2 安装Cilium4.3 验证Cilium5. 总结1

2021-05-11 18:32:57 1771 4

原创 Kubernetus自传

Kubernetus自传1. 前言2. Kubernetus介绍3. Kubernetus组件3.1 Master Node3.2 Work Node4. Kubernetus重要术语4.1 Pod4.2 Volume 数据卷4.3 Container 容器4.4 Deployment 和 ReplicaSet(简称 RS)4.5 Service 和 Ingress4.6 namespace 命名空间5. 总结1. 前言笔者论文是在Kubernetus场景下对网络进行优化,那么熟悉整个Kubernetu

2021-04-27 17:58:03 396

原创 基于 eBPF 的 prometheus 监控方案

从最新资源构建二进制文件:$ go get -u -v github.com/cloudflare/ebpf_exporter/...cp -ip go/bin/ebpf_exporter /usr/local/bin/ebpf_exporter运行一个示例:$ sudo ebpf_exporter --config.file=src/github.com/cloudflare/ebpf_exporter/examples/bio.yaml输出结果如下:浏览器访问9435端口,输出结

2021-04-13 17:23:25 4759

原创 vimplus 安装、配置和使用

1. 安装Ubuntu 安装:git clone https://github.com/chxuan/vimplus.git ~/.vimpluscd ~/.vimplus# 不加 sudo 执行 install.sh ./install.sh 官方地址 https://github.com/chxuan/vimplus2. 配置2.1 设置Nerd Font为防止vimplus显示乱码,需设置linux终端字体为Droid Sans Mono Nerd Font。2.2 多用

2021-04-08 23:23:00 3224

原创 共享库报错问题及解决方案

报错:/lib/x86_64-linux-gnu/libtinfo.so.5: version `NCURSES_TINFO_5.0.19991023' not found (required by /lib/x86_64-linux-gnu/libbcc.so.0)解决:sudo ln -s libncursesw.so.6 libncursesw.so.5报错:/lib/x86_64-linux-gnu/libtinfo.so.5: version `NCURSES_TINFO_5.0.1

2021-04-08 20:53:12 2513

原创 go语言学习笔记

go语言学习笔记一、变量的使用1.1 什么是变量1.2 声明变量1.3 注意事项二、常量的使用2.1 常量声明2.2 iota三、打印输出3.1 fmt包3.2 导入包3.3 常用打印函数四、键盘输入4.1 fmt包读取键盘输入4.2 bufio包读取五、基本数据类型5.1 布尔型bool5.2 数值型5.3 字符串型5.4 数据类型转换:Type Convert六、复合类型(派生类型)七、运算符7.1 算术运算符7.2 关系运算符7.3 逻辑运算符7.4 位运算符7.5 赋值运算符7.6优先级运算符优先

2021-04-08 11:08:30 1805

原创 Node_exporter+Prometheus+Grafana 快速实现Linux系统性能数据提取、存储和可视化展示

Node_exporter+Prometheus+Grafana 快速实现Linux系统性能数据提取、存储和可视化展示1. 前言2. Node_exporter2.1 安装 node_exporter2.2 运行 node_exporter3. Prometheus3.1 安装Prometheus3.2 运行Prometheus3.3 配置 prometheus 的监控数据源为 node_exporter3.4 Prometheus UI 查看监控数据4. Grafana4.1 安装 Grafana4.2

2021-04-06 19:00:12 3476

原创 Linux内核网络性能优化

1. 前言2. Linux网络协议栈3. DPDK4. XDP5. CPU负载均衡5.1 NAPI5.2 RSS5.3 RPS5.4 RFS5.5 XPS6. 网络套接字7. 总结参考链接:https://blog.selectel.com/introduction-dpdk-architecture-principles/https://medium.com/@jain.sm/express-data-path-xdp-introduction-d41b77ffbabf

2021-03-30 17:26:36 1262

原创 “sudo: go:找不到命令”完美解决方案

当我们配置好go环境,可以正常使用go命令,但是使用 sudo 权限执行 go 命令,出现“sudo: go:找不到命令”时:解决方案:sudo vim /etc/sudoers在这行加入go的bin路径:保存退出后,再次使用sudo go :问题完美解决!...

2021-03-25 11:17:52 6581 4

原创 BPF Tools 参考链接

链接1:http://www.brendangregg.com/bpf-performance-tools-book.html链接2:https://github.com/iovisor/bcchttps://github.com/iovisor/bpftrace链接3:https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h链接4:https://github.com/iovisor/bcc链接5:https://

2021-03-17 14:22:04 433

原创 使用BPF跟踪Linux内核

1. 前言我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。本文将介绍保证BPF程序安全的BPF验证器,然后以BPF程序的工具集BCC为例,介绍常见BPF程序,具体为kprobes和tracepoints类型的BPF程序的使用及程序编写示例。2. BPF验证器BPF

2021-03-11 19:17:51 1997

原创 BPF程序类型

1 前言根据BPF程序的主要目的,可以将其分为两类。一类是跟踪,一类是网络。1.1 跟踪跟踪类程序可以提供系统行为和系统硬件的直接信息。它们可以访问特定内存区域,从运行进程中提取执行跟踪信息。还可以直接访问为每个特定进程分配的资源,包括文件描述符、CPU和内存。1.2 网络网络类程序可以检测和控制系统的网络流量。它们可以对网络接口的数据包进行过滤,甚至可以完全拒绝数据包。可以将BPF程序附加到网络驱动程序接受数据包的网络事件上,也可以将BPF程序附加到数据包传递给用户空间的网络事件上。2. BP

2021-03-09 15:12:49 1185

原创 运行python程序ModuleNotFoundError?pip下载速度太慢?

当运行python程序遇到ModuleNotFoundError时:可以使用pip安装module来解决:可是速度太慢了怎么办?可以加参数使用国内镜像来解决:国内镜像包括:清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:http://pypi.hustuniqu

2021-03-03 16:14:28 138 2

原创 openEuler系统配置yum镜像源

编辑配置文件:vim /etc/yum.repos.d/openEuler_x86_64.repo加入以下内容:[20.03-SP1]name=20.03-SP1baseurl=http://119.3.219.20:82/openEuler:/20.03:/LTS:/SP1/standard_x86_64/enabled=1gpgcheck=0priority=1清除缓存中的软件包及旧的headers:yum clean all重新建立缓存:yum makecache大功

2021-03-03 14:58:50 5247

原创 如何写好科研论文思维导图分享

根据mooc《如何写好科研论文》绘制的思维导图,分享给大家,希望对大家有所帮助。

2021-03-03 08:49:42 3381

原创 docker镜像加速

目前主流 Linux 发行版均已使用 systemd 进行服务管理,这里介绍如何在使用 systemd 的 Linux 发行版中配置镜像加速器。请首先执行以下命令,查看是否在 docker.service 文件中配置过镜像地址:systemctl cat docker | grep '\-\-registry\-mirror'如果该命令有输出,那么执行systemctl cat docker 查看 ExecStart= 出现的位置,修改对应的文件内容去掉 --registry-mirror 参数及其

2021-01-18 14:32:53 330 1

原创 初探云原生和微服务

1. 云计算的发展虚拟化技术是云计算的基础,它在硬件级别分离应用程序。随着虚拟化技术的发展,出现了容器,它在操作系统级别分离硬件程序。也就是说,虚拟化为每个应用提供自己的操作系统,而容器共享服务器的操作系统。容器化的优点是消除了虚拟机低效利用资源的问题,降低了存储成本,提高了可扩展性和可移植性;缺点是安全性不够高,因为应用程序在服务器内没有被物理隔离。随着容器技术的发展,云计算进入Kubernetes时代,主流路线演变成Kubernetes+Docker。

2020-12-15 17:27:32 2844

原创 提交PR后修改内容并合并commit

解决的问题PR提交后,发现PR内容需要进一步修改,但是希望避免出现多次commit记录。# git clone 个人仓git clone https://gitee.com/ljrcore/xxx# 将fork源仓作为上游源cd xxxgit remote add base 上游源同步最新代码同步上游源仓最新代码至 ljrcore/xxx 仓,这一步可能会出现文件冲突,如有冲突需手工解决git pull --rebase base master 本地解决冲突 (可选)修改内容现在

2020-12-10 11:29:01 4394

原创 hugo采用gitalk添加留言功能

第一步申请GitHub Application,获取clientID和clientSecret第二步新建仓库lkt_gitalk第三步在主题目录下,新建模板E:\gitee\website\themes\hugo-universal-theme\layouts\partials/comments.html,添加以下内容:<!-- gitalk 评论框 end -->{{ if (.Site.Params.gitalk) }}<div id="gitalk-container

2020-12-08 18:45:42 866

原创 Linux内核网络数据发送(六)——网络设备驱动

Linux内核网络数据发送(六)——网络设备驱动1. 前言2. 驱动回调函数注册3. `ndo_start_xmit` 发送数据4. `igb_tx_map`1. 前言本文主要介绍设备通过 DMA 从 RAM 中读取数据并将其发送到网络,主要分析dev_hard_start_xmit 通过调用 ndo_start_xmit来发送数据的过程。2. 驱动回调函数注册驱动程序实现了一系列方法来支持设备操作,例如:发送数据(ndo_start_xmit)获取统计信息(ndo_get_stats64

2020-11-23 16:22:13 4953

原创 Linux内核网络数据发送(五)——排队规则

Linux内核网络数据发送(五)——排队规则1. 前言2. `qdisc_run_begin()` and `qdisc_run_end()`:仅设置 qdisc 状态位3. `__qdisc_run()`:真正的 qdisc 执行入口4. `qdisc_restart`:从 qdisc 队列中取包,发送给网络驱动4.1 `dequeue_skb()`:从 qdisc 队列取待发送 skb4.2 `sch_direct_xmit()`:发送给网卡驱动4.3 `handle_dev_cpu_collision

2020-11-09 16:33:43 2855

原创 Linux内核网络数据包发送(四)——Linux netdevice 子系统

Linux内核网络数据包发送(四)——Linux netdevice 子系统1. 前言2. `dev_queue_xmit` and `__dev_queue_xmit`2.1 `netdev_pick_tx`2.2 `__netdev_pick_tx`2.2.1 Transmit Packet Steering (XPS)2.2.2 `skb_tx_hash`3. 继续`__dev_queue_xmit`4. `__dev_xmit_skb`5. 调优: Transmit Packet Steering

2020-11-02 15:29:49 2857 1

原创 Linux内核网络数据包发送(三)——IP协议层分析

Linux内核网络数据包发送(三)——IP协议层分析1. 前言2. `ip_send_skb`3. `ip_local_out` and `__ip_local_out`3.1 netfilter and nf_hook3.2 目的(路由)缓存4. `ip_output`5. `ip_finish_output`Path MTU Discovery6. `ip_finish_output2`7. `dst_neigh_output`7.1 `neigh_hh_output`7.2 `n->output

2020-10-26 18:22:58 2246

原创 网络bcc程序测试方案

网络bcc程序测试方案1. 具体做法1.1 准确性测试1.2 性能测试2. 数据模拟工具3. 传统工具举例3.1 iftop实时流量监控工具(此工具可用来测试网络流量指标程序)3.2 netperf3. iperf网络组指标有四个,分别是网络流量、网络延时、丢包率、错包率,主要测试准确性和性能两个方面。准确性测试主要测试程序对于要提取的网络数据是否准确,可以用模拟工具模拟要提取的数据,例如使用tc命令设置网络延时和丢包,然后使用我们编写的程序采集数据,并且使用传统工具进行对比,测试我们的程序采集的数

2020-10-10 16:10:49 1336

原创 Linux内核网络数据包发送(二)——UDP协议层分析

Linux内核网络数据包发送(二)——UDP协议层分析1. 前言2. `udp_sendmsg`2.1 UDP corking2.2 获取目的 IP 地址和端口2.3 Socket 发送:bookkeeping 和打时间戳2.4 辅助消息(Ancillary messages)2.5 设置自定义 IP 选项2.6 多播或单播(Multicast or unicast)2.7 路由2.8 `MSG_CONFIRM`: 阻止 ARP 缓存过期2.9 uncorked UDP sockets 快速路径:准备待发送

2020-10-08 11:06:51 2378 1

原创 Ubuntu下bpf纯c程序的编写与运行

1. 前言2. 搭建bpf程序运行环境2.1 下载源码3. bpf代码分析及运行4. 总结

2020-10-07 21:20:01 6781 9

原创 Linux内核网络数据包发送(一)

Linux内核网络发送数据之socket层1. 前言2. 数据包发送宏观视角3. 协议层注册4. 通过 socket 发送网络数据4.1 `sock_sendmsg`, `__sock_sendmsg`, `__sock_sendmsg_nosec`4.2 `inet_sendmsg`5. 总结1. 前言本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过 socket 发送网络数据的过程。2. 数据包发送宏观视角从宏观上看,一个数据包从用户程序

2020-09-28 14:33:22 1967

原创 Linux内核网络中数据报在协议层的处理

1. 前言协议层注册接下来我们看协议层注册自身的实现。本文会拿 IP 层作为例子,因为它最常用,大部分读者都很熟悉。2. IP协议层IP 层在函数 inet_init 中将自身注册到 ptype_base 哈希表。net/ipv4/af_inet.c:dev_add_pack(&ip_packet_type);struct packet_type 的变量 ip_packet_type 定义在 net/ipv4/af_inet.c:static struct packet_type ip_

2020-09-21 19:05:44 1574

原创 内核网络中的GRO、RFS、RPS技术介绍和调优

内核网络技术GRO、GSO、RSS、RPS、RFS、XPS0. 前言1. GRO(Generic Receive Offloading)2. GSO3. RSS4. RPS(Receive Packet Steering)0. 前言本文主要介绍内核网络中GRO、GSO、RSS、RPS、RFS、XPS等技术,并针对其对应的规则进行网络调优。1. GRO(Generic Receive Offloading)Large Receive Offloading (LRO) 是一个硬件优化,GRO 是 LRO

2020-09-15 17:48:08 3981

原创 Linux网络设备子系统

本文主要介绍Linux网络设备子系统的数据处理,从网络设备子系统的初始化开始,从硬中断到软中断,分别介绍了NAPI 和 `napi_schedule`、数据在网络设备子系统的监测和调优以及网络数据的处理。

2020-09-01 19:05:04 1848

原创 Linux内核网络中的软中断ksoftirqd

1. 前言之前分享过Linux内核网络数据包的接收过程,当执行到网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了,CPU会根据中断表,调用已经注册的中断函数,这个中断函数会调到驱动程序(NIC Driver)中相应的函数。驱动先禁用网卡的中断,表示驱动程序已经知道内存中有数据了,告诉网卡下次再收到数据包直接写内存就可以了,不要再通知CPU了,这样可以提高效率,避免CPU不停的被中断。由于硬中断处理程序执行的过程中不能被中断,所以如果它执行时间过长,会导致CPU没法响应其它硬件的中断,于是内核引入软

2020-08-24 18:34:03 7450 1

原创 bcc Reference Guide 中文翻译

bcc Reference Guide文章目录bcc Reference GuideBPF CEvents & Arguments1、kprobes2、kretprobes3、Tracepoint4、uprobes5、uretprobes6、USDT probes7、Raw Tracepoints8、system call tracepoint9、kfuncs10、kretfuncsData1、bpf_probe_read()2、bpf_probe_read_str()3、bpf_ktime_ge

2020-08-21 20:02:04 4070

原创 如何放出Linux内核中的链表大招

前言上回,我们说到Linux内核中max()宏的终极奥义,Linux内核链表也不甘示弱,那么接下来,让我们看看Linux内核中的链表大招。如何放出Linux内核中的链表大招前言一、链表简介(1)单链表(2)双链表(3)循环链表二、Linux内核中的链表数据结构1、内核链表的定义2、内核链表的使用(1)声明和起始化(2)插入链表(3)删除链表三、内核链表的使用案例4、一、链表简介链表(Lin...

2020-08-20 20:53:03 703

原创 Linux内核网络设备驱动

本文首先从宏观上介绍数据包的接收过程,然后详细介绍了Linux网络设备驱动的工作过程,最后介绍网卡监控与调优,包括网络数据包总数、丢包、错包数量的相关统计。1. 接收数据包过程概述介绍数据包收包过程,有助于我们了解Linux内核网络设备在数据收包过程中的位置,下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程:加载网卡驱动,初始化数据包从外部网络进入网卡网卡(通过DMA)将包拷贝到内核内存中的ring buffer产生硬件中断,通知系统收到了一个包驱动调用 NAP

2020-08-17 19:05:17 2018

Linux内核实验指导手册.pdf

从 0 开始学习内核,学习最新开发工具,如 Vim 8 和 Git;内容循序渐进,深入浅出学习 Linux 内核;70 多个创新实验,突出动手能力;融入最新开源社区开发理念和资源等

2019-11-02

《Linux内核分析与应用》课件(个人整理)

《Linux内核分析与应用》课件,概述、内存寻址、进程管理、内存管理、中断、系统调用、内核同步、文件系统、设备驱动等共九章

2019-10-15

空空如也

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

TA关注的人

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