linux
文章平均质量分 82
dillanzhou
这个作者很懒,什么都没留下…
展开
-
linux内核ip_forward参数详解
linux服务器经常被用来提供防火墙、路由器、NAT等功能,在这些场景下,linux内核需要将网卡上收到的报文转发给其他网络设备。linux内核提供了ip_forward参数用于开关内核的报文转发功能,只有这个开关被打开时,内核才会执行报文的转发。网上能找到不少文章介绍ip_forward参数的基本用途和配置方式,但没有什么文章具体介绍这个参数配置后具体会对内核的网络行为产生哪些影响,以及在内核中是如何实现的。而这些问题的答案对转发功能的使用方式会产生很大的影响。原创 2022-10-20 00:26:26 · 8315 阅读 · 1 评论 -
网络虚拟化——vhost
在上一篇文章(网络虚拟化——virtio)中,我们讨论了virtio技术的由来、原理和实现。virtio为虚拟IO设备提供了一套标准的接口和实现。同时由于其半虚拟化的特质,virtio驱动在设计和实现时尽可能减少了主要操作路径上会触发host后端操作(vmexit)的指令以提升IO效率。但在执行IO操作时,仍会不可避免的需要触发后端操作。例如virtio-net驱动发包时,在向tx virtqueue写入buffer后必然要kick后端来处理buffer,这个kick就是一个IO写操作。当后端在用户态q原创 2021-10-10 22:29:14 · 5948 阅读 · 0 评论 -
网络虚拟化——virtio
前言在上一篇文章(网络虚拟化——QEMU虚拟网卡)中,讨论了经典的网络设备全虚拟化技术。这种技术不需要guest内核对虚拟网络设备有任何的感知和特殊处理,但性能较差,一次读写操作可能会产生多次需要Hypervisor模拟实现的行为。为了改善虚拟网络设备的性能,各类Hypervisor都提供了自己的半虚拟化网络技术。在这种模式下,guest内核中使用的网络设备和驱动是为虚拟化场景特殊设计和实现的,驱动的实现特别适配了Hypervisor的一些特性,尽量减少了需要Hypervisor介入进行模拟实现的指原创 2021-09-28 00:39:27 · 10427 阅读 · 0 评论 -
网络虚拟化——QEMU虚拟网卡
写在前面网络虚拟化曾经只是内核虚拟化功能开发者才会关注的技术。但随着云计算模式和云原生概念的推广,云上业务的部署形态都已转向了虚拟机和容器,而两者都依赖网络虚拟化技术提供高性能网络功能,因此虚拟网络已经是云环境下的主流网络形态。而云上的虚拟机和容器对网络虚拟化技术的易用性、功能和性能都提出了更高的要求。对于云上环境的网络基础设施开发者来说,网络虚拟化已经成为了一种必须掌握的技术。但在学习网络虚拟化技术时,笔者没能找到一个能够完整介绍网络虚拟化技术类型、原理和实现的信息源,特别是中文资料。因此,笔者计原创 2021-09-10 01:06:19 · 7954 阅读 · 0 评论 -
io_uring技术的分析与思考
io_uring是Linux 5.1中引入的一套新的syscall接口,用于支持异步IO。近来这套机制颇受关注,很多人认为它代表了与内核实现高性能交互的一种模式。本文将对io_uring的原理和实现进行分析,了解其相对于原有IO机制的优势,并尝试预测其应用场景和发展趋势。异步IO机制在介绍io_uring之前,需要先了解一下其实现的异步IO机制,以及io_uring之前的异步IO是如何实现的。在linux下,目前绝大部分程序中的IO操作都是同步的,最后通过read/write系列的系统调用实现对原创 2020-12-03 00:56:18 · 9037 阅读 · 0 评论 -
bash中的点(".")命令
在看docker的启动脚本时,看到其中有一行". /etc/sysconfig/docker"。这"."是什么意思?百度得知,"."命令就是"source"命令的另一种写法,是bash内建的命令。source命令比较常用,就是在当前bash环境下运行目标脚本内容。https://www.jb51.net/article/103657.htm中解释的比较清楚。贴一个bash的manual...原创 2019-09-07 20:31:46 · 1335 阅读 · 0 评论 -
使用ebpf分析网络报文传输时延
最近需要分析某个链路上的单向网络延迟,数据的发送端使用一个用户态协议栈,而接收端则使用linux内核协议栈。获取延迟的方式是在发送端在发送报文的尾部添加一个发送时间戳,在接收端获取报文后将接收端时间戳与发送时间戳进行对比,从而获得中间的延迟时间。由于发送端和接收端位于同一设备(使用不同的网卡),又分别处于用户态和内核态,因此使用了两端都能高性能访问的tsc时钟作为时间戳来源。为了在接收端尽可能...原创 2019-08-31 23:13:06 · 2371 阅读 · 1 评论 -
tcpdump与libpcap原理分析
tcpdump是linux上常用的网络报文抓取分析工具,主要功能是抓取系统中的网络报文,根据条件过滤出需要的报文,最后将报文打印或保存到文件中。本文将对tcpdump的实现原理进行分析,由于报文解析展示和保存的逻辑比较直观,本文主要关注报文获取和过滤部分。为了兼容各类平台和不同版本的内核,tcpdump的代码中有大量用于兼容的逻辑和分支,本文只介绍面向最新版本linux平台接口的分支逻辑。...原创 2019-07-30 23:41:27 · 2325 阅读 · 0 评论 -
TCP keepalive机制分析
TCP keepalive是由TCP协议栈提供的连接存活性检测功能。如果打开这个功能特性,如果一条已建立的TCP连接一段时间没有收到报文,就会开始发送TCP keepalive报文,如果keepalive报文多次没有获得响应,则判定连接的对端已经断开,本地协议栈会将连接关闭。TCP keepalive一般用于服务器软件中,目的是避免客户端异常断开连接造成服务端大量无效连接残留,消耗过多资源。...原创 2019-07-29 00:29:02 · 1135 阅读 · 0 评论 -
fuse用户态文件系统下ls命令的执行过程分析
关于fuse文件系统的基本概念,可以参考https://blog.csdn.net/ty_laurel/article/details/51685193这篇文章。在这篇文章里,较详细了介绍了fuse文件系统的代码结构和原理,以及工作流程。本文从一次实际的文件系统访问操作出发,分析在fuse文件系统下,ls命令的执行过程。通过这次分析,对系统命令、文件系统、fuse文件系统实现进行一次剖面的微观...原创 2018-10-10 16:13:13 · 4313 阅读 · 0 评论 -
在Ubuntu中使用8192eu无线网卡的AP功能
前段时间买了一个瑞昱8192芯片的无线网卡,想在Ubuntu系统下作为AP给手机提供热点。安装时却发现厂家只提供了windows下的驱动和控制端软件,在Linux下只有一个芯片的官方驱动,作为普通wifi是可以的,但AP模式却无法生效。通过调整驱动代码、手动配置网卡和ap服务程序,终于成功启用了网卡的AP功能,具体步骤如下: 重新编译8192eu的驱动,在config/autoconf....原创 2018-09-28 14:34:06 · 1479 阅读 · 0 评论 -
/proc/self/目录的意义
我们都知道可以通过/proc/$pid/来获取指定进程的信息,例如内存映射、CPU绑定信息等等。如果某个进程想要获取本进程的系统信息,就可以通过进程的pid来访问/proc/$pid/目录。但是这个方法还需要获取进程pid,在fork、daemon等情况下pid还可能发生变化。为了更方便的获取本进程的信息,linux提供了/proc/self/目录,这个目录比较独特,不同的进程访问该目录时获得的信...原创 2018-09-28 09:50:06 · 14761 阅读 · 2 评论 -
PCI设备驱动切换方法
在linux系统中,有时会为同一类设备同时加载多个驱动,用于测试或者不同使用方式。例如做数据报文处理的服务器上可能会同时加载普通的网卡驱动和DPDK的igb_uio驱动来使用通讯网卡和数据处理卡。在这种情况下,需要一种方式能够让指定设备在多个驱动间切换,从而实现同类设备使用不同驱动的目的。linux为PCI设备驱动预留了sys文件系统接口来实现这个功能。方法如下:echo "0000:02...原创 2018-09-28 09:20:06 · 726 阅读 · 0 评论 -
perf常用用法简介
perf是linux内核自带的性能分析工具,由于其和对应的内核版本同步发布,不需要单独安装,同时功能又很强大,因此成为了笔者的主要性能分析工具。本文主要从笔者的实际使用情况出发,介绍一下perf工具的常用命令和使用场景。perf常用参数-C 指定统计的CPU核心编号,不指定时统计全部核心(等价于-a)-e 指定统计事件-p 只统计特定pid指定的进程中产生的事件-t 只统计特定...原创 2018-09-27 15:19:46 · 18083 阅读 · 0 评论 -
linux系统调用原理及实现
linux系统调用系统调用是linux内核为用户态程序提供的主要功能接口。通过系统调用,用户态进程能够临时切换到内核态,使用内核态才能访问的硬件和资源完成特定功能。系统调用由linux内核和内核模块实现,内核在处理系统调用时还会检查系统调用请求和参数是否正确,保证对特权资源和硬件访问的正确性。通过这种方式,linux在提供内核和硬件资源访问接口的同时,保证了内核和硬件资源的使用正确性和安全性。...原创 2018-09-18 10:08:29 · 7129 阅读 · 0 评论