自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

~~ LINUX ~~

~~ LINUX ~~

  • 博客(603)
  • 资源 (8)
  • 收藏
  • 关注

转载 如何阅读 Redis 源码?

在这篇文章中, 我将向大家介绍一种我认为比较合理的 Redis 源码阅读顺序, 希望可以给对 Redis 有兴趣并打算阅读 Redis 源码的朋友带来一点帮助。第 1 步:阅读数据结构实现刚开始阅读 Redis 源码的时候, 最好从数据结构的相关文件开始读起, 因为这些文件和 Redis 中的其他部分耦合最少, 并且这些文件所实现的数据结构在大部分算法书上都可以了解到, 所以从这些文件开始读是最轻松的、难度也是最低的。下表列出了 Redis 源码中, 各个数据结构的实现文件: 文件

2021-09-08 10:08:59 1004 1

原创 REDIS 源码阅读

https://redissrc.readthedocs.io/en/latest/datastruct/dict.html

2021-09-08 09:52:09 505

转载 Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单

大家好,我是 Kaito。这篇文章我想和你聊一聊 Redis 的最佳实践。你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题: 我的 Redis 内存为什么增长这么快? 为什么我的 Redis 操作延迟变大了? 如何降低 Redis 故障发生的频率? 日常运维 Redis 需要注意什么? 部署 Redis 时,如何做好资源规划? Redis 监控重点要关注哪些指标? 尤其是当你的项目越来越依赖 R

2021-09-08 09:49:12 755

转载 Redis,唯快不破!

我们都知道Redis很快,可达到 10万QPS。可 Redis为什么会这么快呢?这篇文章将带大家一探究竟。1. 基于内存的实现众所周知「内存读写」比「磁盘读写」快很多。Redis是基于内存存储实现的数据库,相对于数据存在磁盘中的数据库,就省去了磁盘I/O的消耗。此外,MySQL等磁盘数据库通常建立索引来加快查询效率,而Redis 的数据存放在内存中,可直接操作内存,所以很快。2. 高效的数据结构我们知道,MySQL索引为了提高效率,选择了B+树的数据结构。其实合理的...

2021-09-08 09:04:17 256

原创 华为的手册和官网视频,学习网络基础

https://support.huawei.com/hedex/hdx.do?docid=EDOC1100196171&lang=zh&idPath=24030814%7C9856750%7C22715517%7C9858933%7C15837https://support.huawei.com/enterprise/zh/doc/EDOC1100196835?idPath=24030814%7C24030874%7C24031380%7C22318840%7C15833

2021-09-06 20:51:44 246

转载 结合中断分析TCP/IP协议栈在LINUX内核中的运行时序

目录:1.Linux网络子系统的分层2.TCP/IP分层模型3.Linux网络协议栈4.Linux网卡收包时的中断处理问题5.Linux网络启动的准备工作6.Linux网络包:中断到网络层接收7.总结Linux网络子系统的分层Linux网络子系统实现需要:l 支持不同的协议族 ( INET, INET6, UNIX, NETLINK...)l 支持不同的网络设备l 支持统一的BSD socket API需要屏蔽协议、硬件、平台(API)的...

2021-09-02 09:31:49 393

转载 25 张图,一万字,拆解 Linux 网络包发送过程

半年前我以源码的方式描述了网络包的接收过程。之后不断有粉丝提醒我还没聊发送过程呢。好,安排!在开始今天的文章之前,我先来请大家思考几个小问题。 问1:我们在查看内核发送数据消耗的 CPU 时,是应该看 sy 还是 si ? 问2:为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多? 问3:发送网络数据的时候都涉及到哪些内存拷贝操作? 这些问题虽然在线上经常看到,但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位,我们对性

2021-08-11 15:01:38 736 1

转载 read 文件一个字节实际会发生多大的磁盘IO?

在日常开发中一些看似司空见惯的问题上,我觉得可能大多数人其实并没有真正理解,或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码:上图中的代码仅仅只是对某个文件读取了一个字节,基于这个代码片段我们来思考: 1、读取文件 1 个字节是否会导致磁盘 IO ? 2、如果发生了磁盘 IO,那发生的是多大的 IO 呢? 大家平时用的各种语言 C++、PHP、Java、Go 啥的封装层次都比较高,把很多细节都给屏蔽的比较彻底。如果想把上面的问题搞清楚,需要剖开 Linux 的内部来看

2021-08-11 14:46:27 364

转载 图解Linux网络包接收过程

因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。我们今天用图解的方式,来深度理解一下在Linux下网络包的接收过程。还是按照惯例来借用一段最简单的代码开始思考。为了简单起见,我们用udp来举例,如下:int main(){ int serverSocketFd = socke..

2021-08-11 14:04:46 374

转载 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的!

进程在 Linux 上是一个开销不小的家伙,先不说创建,光是上下文切换一次就得几个微秒。所以为了高效地对海量用户提供服务,必须要让一个进程能同时处理很多个 tcp 连接才行。现在假设一个进程保持了 10000 条连接,那么如何发现哪条连接上有数据可读了、哪条连接可写了 ?我们当然可以采用循环遍历的方式来发现 IO 事件,但这种方式太低级了。我们希望有一种更高效的机制,在很多连接中的某条上有 IO 事件发生的时候直接快速把它找出来。其实这个事情 Linux 操作系统已经替我们都做好了,它就是我们所熟知的.

2021-08-11 13:09:46 434 1

转载 存储基础 — 文件描述符 fd 究竟是什么?

前情概要通过上篇Go 存储基础 — 文件 IO 的姿势, 我们看到有两种文件读写的方式,一种是系统调用的方式,操作的对象是一个整数 fd,另一种是 Go 标准库自己封装的标准库 IO ,操作对象是 Go 封装的file结构体,但其内部还是针对整数 fd 的操作。所以一切的本源是通过 fd 来操作的,那么,这个 fd 究竟是什么?就这个点我们深入剖析。fd 是什么?fd是File descriptor的缩写,中文名叫做:文件描述符。文件描述符是一个非...

2021-08-11 11:38:30 4985

原创 NAT框架

随着Internet的发展和网络应用的增多,IPv4地址枯竭已成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足问题,但目前网络设备和网络应用大多是基于IPv4的,因此在IPv6广泛应用之前,一些过渡技术的使用是解决这个问题最主要的技术手段。作为一种过渡方案,NAT通过地址重用的方法来满足IP地址的需要,可以在一定程度上缓解IPv4地址空间枯竭的压力,从而保证IPv4的用户和业务能平稳过渡到IPv6。NAT(Network Address Translation)是一种IP..

2021-08-11 11:00:53 353

转载 深入理解Linux socket

socket fd 长什么样子?什么是 socket fd ?粗糙的来讲,就是网络 fd,比如我们最常见的 C/S 客户端服务端的编程模式,就是网络通信的一种方式。撇开底层和协议细节,网络通信和文件读写从接口上有本质区别吗?其实没啥区别,不就是读过来和写过去嘛,简称 IO 。我们先看一下 socket fd 是什么样子的?随便找了个进程root@ubuntu:~#ll/proc/1583/fdtotal0lrwx------1rootroot64...

2021-08-11 10:48:17 622

转载 理解Linux高性能网络架构的那些事

通过本文你将会了解到以下内容: IO事件和IO复用 线程模型和事件驱动模型的架构 基于事件驱动的Reactor模式详解 同步IO和异步IO简介 1. IO事件和IO复用1.1 什么是IO事件IO指的是输入Input/输出Output,但是从汉语角度来说,出和入是相对的,所以我们需要个参照物。这里我们的参照物选择为程序运行时的主存储空间,外部通常包括网卡、磁盘等。有了上述的设定理解起来就方便多了,我们来一起看下:IO的本质是数据的流动,数据可以从网

2021-08-01 15:38:29 230

转载 TCP/IP拥塞控制总结...

一.先唠唠嗑按照计划,今天该出分布式一致性系列的第四篇-Paxos算法,但是又鸽了。Paxos这个算法要很好地表达写出来并不容易,所以到现在还没有完成,于是就有了这篇组装的带有丝丝标题党感觉的干货文章,全小区最强TCP/IP总结...逃...在正式开始文章技术点之前,想先聊一下我对面试中的TCP/IP问题的一些拙见,希望对盆友们有所帮助。在招聘岗位描述中,几乎必然有一条熟悉、掌握、精通TCP/IP协议、Http协议、网络编程技术。对于我们求职者来说,肯定知道的越多越好,但是就像过日子一样

2021-08-01 13:25:34 573

转载 CPU使用率到100%了?

以下文章来源于涛歌依旧,作者点击关注????????最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果虚惊一场。这位同事看到的100%,并非指整个CPU使用率到了100%,而是指CPU某些核的使用率到了100%.趁此机会,我来聊聊与CPU相关的概念,对很多软件开发和运维人员来说,这些概念是必须要掌握的: CPU主频 多个CPU 多核CPU 逻辑核(超线程) 大

2021-07-13 09:11:45 258

原创 FUSE简介

一、FUSE简介 FUSE(用户空间文件系统)是这样一个框架:它使得FUSE用户在用户态下编写文件系统成为可能,而不必和内核打交道。 FUSE由三个部分组成:linux内核模块、FUSE库 以及mount 工具。 用户关心的只是FUSE库和mount工具,内核模块仅仅提供kernel的接入口,给了文件系统一个框架,而文件系统本身的主要实现代示位于用户空间中。FUSE库给用户提供了编程的接口,而mount工具则用于挂在用户编写的文件系统。 FUSE起初是为了研究AVFS...

2021-06-17 15:46:25 3170

原创 好网站,可以看各种数据结构的动态

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

2021-06-17 11:03:19 220

转载 FUSE文件系统

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文件系统。由于其主要实现代码位于用户空间中,而不需要重新编译内核,这给开发者带来了众多便利。Google在Android 11上,为了实现scoped storage,也引入了fuse。下面我们从Fuse的架构设计以及具体的实现细节来谈一谈fuse文件系统。一、Fuse架构设计...

2021-06-17 10:56:12 475

转载 红黑树原理浅谈(附Linux内核源码注释)

引言:红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在 O(log n) 时间内做查找,插入和删除,这里的n是树中元素的数目。——摘自维基百科红黑树的性质:红黑树是每个节点

2021-06-10 11:15:55 543

转载 字节序(byte order)和位序(bit order)

https://blog.csdn.net/aflyeaglenku/article/details/76209236最近在阅读 ipc发送音视频流的代码,偶然发现如果用到了位域,那么发送和接收的“字节”的值不一样!!所以在想是不是除了字节序之后,比特位的顺序也有大端小端之分。带着疑问查阅了度娘,看到如下一篇博客。作者也遇到了和笔者我相同的问题。感谢原作者的分享!博客地址如下:http://blog.csdn.net/liuxingen/article/details/45420455/字节序(byt

2021-06-10 11:10:29 507

转载 PPTP协议详解及报文解析

https://blog.csdn.net/chen1415886044/article/details/111405874mark下

2021-05-07 10:19:18 602

转载 Tarjan 算法

Tarjan 算法一.算法简介Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度。我们定义:如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。例如:在上图中,{1 , 2 , 3 , 4 } , { 5 } , { 6 } 三个区..

2021-04-24 11:27:08 282

转载 FAT 32 文件系统学习

1、本文的目标 本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式。虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT32由于其兼容性原因,还是有一定的学习价值。为了能做出一个窗体程序提供直观的感觉,本文的代码采用c#编写,对应的c++代码也会附上。2、本文目录1、本文的目标2、什么是FAT322.1 FAT32的构成3、引导区3.1 读取引导扇区3.2 BPB参数3.3 程序实现2、什么是FAT32...

2021-04-09 18:20:06 2459 2

转载 一口气搞懂「文件系统」

前言不多 BB,直接上「硬菜」。正文文件系统的基本组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。Linux 文件系

2021-04-07 14:41:05 2002

转载 TCP SYN洪水 (SYN Flood) 攻击原理与实现

TCP协议是 TCP/IP 协议栈中一个重要的协议,平时我们使用的浏览器,APP等大多使用 TCP 协议通讯的,可见 TCP 协议在网络中扮演的角色是多么的重要。TCP 协议是一个可靠的、面向连接的流协议,由于 TCP 协议是建立在 IP 协议这种面向无连接的协议,所以 TCP 协议必须自己来维护连接的状态。三次握手过程TCP 协议通过一种名为 三次握手 的过程来建立客户端与服务端的连接,三次握手 过程的原理如图1:(图一 三次握手过程)建立连接三次握手过程如下: 客户端需要发

2021-04-07 14:13:10 3280

转载 Linux I/O 原理和 Zero-copy 技术全面揭秘

作者:allanpan,腾讯 IEG 后台开发工程师两万字长文从虚拟内存、I/O 缓冲区,用户态&内核态以及 I/O 模式等等知识点全面而又详尽地剖析 Linux 系统的 I/O 底层原理,分析了 Linux 传统的 I/O 模式的弊端,进而引入 Linux Zero-copy 零拷贝技术的介绍和原理解析,将零拷贝技术和传统的 I/O 模式进行区分和对比,帮助读者理解 Linux 内核对 I/O 模块的优化改进思路。全网最深度和详尽的 Linux I/O 及零拷贝技术的解析文章导言如

2021-04-07 11:06:26 402

转载 OpenSSL 介绍和使用

一、SSL 简介按照我的理解来解释下,为了让网络通信更安全,需要认证和加密,认证是说明你是要找的人,加密是为了让截获中间报文第三者无法得到消息内容。为此有人设计了SSL,即套接字上的安全层,简单来说就是在TCP之上做一个安全通信层,HTTP on SSL 即是HTTPs,现在几乎所有的银行网站访问都是基于HTTPS协议的。认证是通过证书+非对称加密算法来解决的,具体我也不搬迁了大家去看看https交互过程SSL交互过程还是很复杂的,牵扯到非对称加密和对称加密,以及复杂的交互过程,为此有人写了op

2021-04-07 10:20:13 1417

原创 AES-GCM加密算法

AES是一种对称加密算法,它的相关概念在此不赘述。GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码。在详细介绍AES-GCM之前,我们先了解一些相关概念。下文中出现的符号:Ek 使用秘钥k对输入做对称加密运算 XOR 异或运算 Mh 将输入与秘钥h在有限域GF(2^128)上做乘法 ECB( Electronic Mode 电子密码本模式)当我们有一段明文,需要...

2021-04-07 10:10:08 7271 1

原创 generic_netlink_howto

generic_netlink_howtoThis document gives a brief introduction to Generic Netlink, some simple examples on how to use it and some recommendations on how to make the most of the Generic Netlink communications interface. While this document does not require

2021-04-02 10:10:55 126

转载 Generic Netlink内核实现分析(二):通信

前一篇博文中分析了Generic Netlink的消息结构及内核初始化流程,本文中通过一个示例程序来了解Generic Netlink在内核和应用层之间的单播通信流程。示例程序:demo_genetlink_kern.c(内核模块)、demo_genetlink_user.c(应用层Demo程序)、demo_genetlink.h程序主要功能:应用层程序接收用户的输入“字符串”和“数据”向内核发送,内核接收后回发应用层,应用层通过终端打印输出。代码路径:https://github.com/lu

2021-04-02 10:04:03 985

转载 Netlink 内核实现分析(二):通信

在前一篇博文《Netlink 内核实现分析(一):创建》中已经较为详细的分析了Linux内核netlink子系统的初始化流程、内核netlink套接字的创建、应用层netlink套接字的创建和绑定流程,本文来详细的分析一下内核是如何实现netlink消息在内核和应用进程之间全双工异步通信的。一、netlink通信数据结构1、netlink消息报头:structnlmsghdrstruct nlmsghdr { __u32 nlmsg_len; /* Length of...

2021-04-02 10:01:21 555

转载 Netlink 内核实现分析(一):创建

Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,同时它也以用于进程间通信(Netlink更多用于内核通信,进程之间通信更多使用Unix域套接字)。在一般情况下,用户态和内核态通信会使用传统的Ioctl、sysfs属性文件或者procfs属性文件,这3种通信方式都是同步通信方式,由用户态主动发起向内核态的通信,内核无法主动发起通信。而Netlink是一种异步全双工的通信方式,它支持由内核态主动发起通信,内核为Netlink通信提供.

2021-04-02 09:59:29 844

转载 图解DES加密算法

DES——美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法,它也是是分组加密算法的典型代表。相关名词解释;对称加密:通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。双方通信前共同拟定一个密钥,不对第三方公开。分组加密:将明文分成固定长度的组,每一组都采用同一密钥和算法进行加密,输出也是固定长度的密文。密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。DES加密算法导图第一步:i

2021-03-30 00:51:25 639

转载 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的!

进程在 Linux 上是一个开销不小的家伙,先不说创建,光是上下文切换一次就得几个微秒。所以为了高效地对海量用户提供服务,必须要让一个进程能同时处理很多个 tcp 连接才行。现在假设一个进程保持了 10000 条连接,那么如何发现哪条连接上有数据可读了、哪条连接可写了 ?我们当然可以采用循环遍历的方式来发现 IO 事件,但这种方式太低级了。我们希望有一种更高效的机制,在很多连接中的某条上有 IO 事件发生的时候直接快速把它找出来。其实这个事情 Linux 操作系统已经替我们都做好了,它就是我们所熟知的.

2021-03-29 12:25:36 235

原创 Using GNU C __attribute__

One of the best (but little known) features of GNU C is the__attribute__mechanism, which allows a developer to attach characteristics to function declarations to allow the compiler to perform more error checking. It was designed in a way to be compatible..

2021-03-26 09:42:06 101

转载 AES加密算法介绍与实现

AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:下面简单介绍下各个部分的作用与意义: 明文P 没有经过加密的数据。 密钥K 用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥.

2021-03-06 14:34:04 1685

原创 《算法图解》之狄克斯特拉算法

前言在学习广度优先搜索的时候,你找出了从A点到B点的路径。这是最短路径,因为段数最少——只有三段,但不一定是最快路径。如果给这些路段加上时间,你将发现有更快的路径。如果你要找出最快的路径,该如何办呢?为 ... 前言 在学习广度优先搜索的时候,你找出了从A点到B点的路径。 这是最短路径,因为段数最少——只有三段,但不一定是最快路径。如果给这些路段加上时间,你将发现有更快的路径。 如果你要找出最快的路径,该如何...

2021-03-03 15:08:32 296 1

转载 动态规划(DP)的原理、实现及应用

文章目录1. 由一个例子说开: 斐波那契(fibonacci)数列 性能测试 原因分析 2. 记忆化搜索 3. 动态规划(Dynamic Programming,DP) 最优子结构 总结一下这几个解法: 几个例题 LeetCode 70 Climbing Stairs 4. 动态规划的核心:状态与状态转移方程 LeetCode 343 Integer Break LeetCode 198 House Ro

2021-02-24 14:11:10 1764

转载 DPDK收发包流程分析(一)

一、 前言】 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK接收与发送报文的流程,包括CPU与网卡DMA协同工作的整个交互流程、数据包在内存、CPU、网卡之间游走的过程。 ...

2021-02-24 09:27:30 1774

汇编语言 王爽

汇编语言 王爽写的好书,学习汇编不错的入门书籍

2013-07-30

ARM硬件结构

学习ARM的硬件体系结构,可以入门看看,或者给别人讲解使用

2013-07-30

基于ARM的嵌入式程序设计

学习ARM体系、学习基于ARM的嵌入式程序设计方法,入门

2013-07-30

ADS集成开发环境的使用

学习ARM架构的,编写程序的ADS集成开发环境的使用简介

2013-07-30

ARM指令系统

ARM汇编指令系统,学习ARM汇编指令,也可以复习下RISC架构的汇编

2013-07-30

ARM体系结构

ARM体系结构介绍,用于学习ARM体系结构

2013-07-30

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料,大家可以参考下

2011-03-15

18B20温度传感器

18B20温度传感器,搞这个的可以看看,介绍了温度传感器的应用

2010-08-21

空空如也

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

TA关注的人

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