自定义博客皮肤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)
  • 收藏
  • 关注

原创 以redis为核心的游戏微服务框架(1)

游戏服务框架设计

2022-07-11 17:48:03 1115 1

原创 虚拟化技术和容器技术

kvmdocker

2022-03-31 16:54:24 985

原创 dpdk22.03.0原理分析

原理分析内核配置需要用户态的glibc库,内核的HUGETLBFS:提高性能,大页放到tlb更少机会失效,因为数量少。大内存页也可以挂到文件系统使用。PROC_PAGE_MONITOR :进程内存页监控HPET 和HPET_MMAP:开启高精度定时器,并允许映射到用户空间VFIO依赖IOMMU的保护,大内存页的映射。如果没有IOMMU,就需要uio,uio不安全并且需要root权限。EAL环境抽象层:dpdk加载和运行,支持多进程多线程,core亲和性程序,系统内存分配释放,原子和锁的操作

2022-03-25 14:06:53 1140

原创 研究dpdk前置知识

网络TAP/TUN虚拟网络设备,TAP工作在二层,TUN工作在三层Linux Bridge(网桥)是工作在二层的虚拟网络设备,功能类似于物理的交换机。普通的网络设备来说,只有两端,网桥可以有多端口。MACVTAP新的网络设备模型,简化虚拟化环境下的桥接网络,代替传统的TAP+Bridge组合,同时支持新的虚拟化网络技术。Open vSwitch虚拟交换机veth pair不同命名空间的网络之间的通信机制,类似管道。bridge-utils包网桥有关的操作,brctl命名+ip

2022-03-23 18:33:24 2000

原创 msquic源码分析

msquic微软开源的quic协议实现,跨平台,纯c写的,不依赖其他库。对比开源比较活跃的其他quic项目:mvfst:c++实现,但是依赖其他库。quic-go:go实现,比较热门quiche:rust实现,比较热门quic特性quic是基于udp和tls实现的用户态可靠协议。其本质是将tcp的大部分功能迁移到udp上,在用户态实现可以更灵活的部署自己更高效的算法,并且支持0RTT的重连。支持的属性:流式传输,流量控制,连接ID,版本协商,加密和传输握手,地址验证(包括路径验证),连接

2022-03-22 17:56:34 1879

原创 tarsCpp源码分析

tarsCpp

2022-03-18 15:21:46 1361

原创 grpc与brpc等rpc框架总结

rpc

2022-03-15 20:05:36 6096

原创 redis源码分析

主流程server.c全局变量server,只有一个,记录本服务的信息。1.spt_init初始化全局环境变量,关联变量environ2.设置时区3.初始化oom_handler4.其他初始化:随机数种子,crc64,acl,服务配置,tls,哨兵模式,帮助,加载配置文件,moduleInitModulesSystem模块系统初始化5.关键函数initServer,初始化核心。6.创建pid文件7.设置cpu亲和性8.执行事件循环核心9.异常情况退出释放结束。initServer1

2022-03-14 16:06:08 2320

原创 nginx源码分析和openresty源码分析

nginxnginx可以作为网关(负载均衡,路由规则,限流,访问控制),缓存服务器,web服务器(可以使用lua开发,openresty框架),反向代理服务器。支持http,https,http/2,grpc,tcp,udp,websocket协议。源码结构src/core (底层核心结构)启动入口和基础的数据结构和算法。nginx.c就是入口,初始化,启动多进程。数据结构ngx_arrayngx_bufngx_conf_fliengx_connectionngx_corengx_

2022-03-11 17:42:09 4013

原创 lvs和keepalived

lvs keepalived

2022-03-09 11:55:52 1343

原创 io_uring:linux异步io

aioio_uring

2022-03-08 15:49:42 179

原创 密码学与编码技术

密码学编码技术

2022-03-07 20:19:04 6443

原创 tcp/ip协议栈总结

tcp接收端流量控制,发送方拥塞控制udpip路由算法igprip基于距离向量的路由选择协议ospf开放最短路径路由算法bgp流媒体协议

2022-03-07 15:18:35 2501

原创 高并发c10m解决方案

c10m问题解决思路内核配置1.修改文件描述符上限sysctl 修改fs.file-max=12000500或者echo 20000500 > /proc/sys/fs/nr_open或者ulimit -n 200000002.sysctl 修改tcp缓冲区大小net.ipv4.tcp_mem=10000000 10000000 10000000net.ipv4.tcp_rmem=1024 4096 16384net.ipv4.tcp_wmem=1024 4096 16384net.

2022-03-05 21:06:00 815

原创 tcp拥塞控制算法总结

经典拥塞控制:tahoe和reno拥塞控制改进new reno,sack,cubic网络辅助信息拥塞控制ecn基于延迟的拥塞控制vagesbbrquic

2022-03-03 19:29:34 1275

原创 bpf性能分析

bpf原理(Berkeley Packet Filter)在操作系统内运行沙盒程序,安全效率的扩展操作系统内核的能力而不需要修改源代码或者加载内核模块。bpf不只是可以用来做性能分析,由于可以执行自己的jit编译的字节码,只要有bpf钩子(或探针)的地方都可以扩展功能(系统调用或者内核函数)。1.将代码生成bpf字节码。2.字节码被内核中的jit编译成二进制指令,不需要重启自动重新加载。3.在attach点执行这段代码。4.使用bpf map,用户空间可以共享内核空间的数据。kprobes钩

2022-03-03 16:23:43 811

原创 linux内核配置与调优与shell

tcp网络调优进程资源限制ulimit,cgroupsoomkiller日志分析shell能力

2022-03-02 18:25:53 2217

原创 cache,dram,sram,磁盘,ssd,分布式存储ceph

cache,mesisram dram磁盘,ssd,san,nas,nfs,分布式存储ceph

2022-03-01 17:51:01 1552

原创 linux操作系统内核总结

处理器架构内存管理进程管理同步与锁操作中断文件系统内核的网络模块进程间通信

2022-02-28 18:43:22 1595

原创 分布式总结

可靠性,可扩展性,可维护性,滚动升级编码pb,json,rpc,rest api复制:高可用延迟可扩展性,单主,多主,无主,写后读,单调读,一致前缀读分区:键范围分区,散列分区,复合主键,二级索引分区(文档分区,本地索引;关键词分区,全局索引),分区负载均衡,并行查询执行引擎事务:脏读,脏写,读取偏差(不可重复读),更新丢失,写偏差,幻读,串行执行,两阶段锁定,可串行化快照隔离(SSI)消息延迟或者丢失,ntp时序,shared nothing线性一致性,因果一致性,全序广播,锁和租约,协调服务

2022-02-27 17:14:20 138

原创 c++开发调试,问题排查工具

gdb

2022-02-27 01:11:09 278

原创 glibc,ptmalloc,tcmalloc与jemalloc

glibc,malloc

2022-02-25 11:30:38 1584

原创 redis总结

redis总结常用命令piplinepub/sub和Keyspace Notificationseval(lua scripting)和调试redis事务(multi exec discard watch)分布式锁(redlock)Redis Keyspace Notifications多级索引streamsmodules模块开发性能分析,延迟分析,内存优化高可用集群(cluster和sentinel)配置和优化其他技巧原理与源码分析常用命令piplinepub/sub和Keyspace Notifi

2022-02-23 20:17:09 688

原创 高性能服务器编程,网络库

网络编程伪共享问题两线程分别需要处理两个内存邻近的变量,看起来是互不干涉,但是即使两线程分别在两个不同的cpu核上执行,两个变量分别放到两个核的cacheL1的一行cache line上,mesi协议更新任意一个都会invalidate所有cpu自己的cacheL1这一行的数据,cache失效导致频繁需要从内存重新加载,性能很差。sendfile零拷贝技术,内核中实现了两个文件描述符的缓冲区拷贝。mmap共享内存splice也是两个文件描述符直接的零拷贝,但是必须有一个是管道文件描述符。te

2022-02-22 19:19:45 855

原创 c++陷阱

技巧1.使用外覆代理类,只有方法和指向要代理对象的一个指针,构造初始化这个指针,这样耦合性很低。代理类可以加上RRID,资源释放即析构。还可以进一步优化使用raii的指针对象,自动释放对象。2.动态多态和静态多态:C++中的动态多态有如下优点: 可以很优雅的处理异质集合。 可执行文件的大小可能会比较小(因为它只需要一个多态函数,不像静态多态那样,需要为不同的类型进行各自的实例化)。 代码可以被完整的编译;因此没有必须要被公开的代码(在发布模板库时通常需要发布模板的源代码实现)。C++

2022-02-21 15:51:08 567

原创 mysql总结

mysql总结

2022-02-20 21:03:30 744

原创 c++20,对象模型,并发编程总结

c++20,对象模型,并发编程总结

2022-02-18 20:00:25 628

原创 c++语言

文章目录普通、标准布局、POD强制转换运算符用于编译时封装的 Pimpl普通、标准布局、POD普通类型(is_trivial)普通类型具有普通默认构造函数、普通复制构造函数、普通复制赋值运算符和普通析构函数。 在各种情况下,“普通”意味着构造函数/运算符/析构函数并非用户提供(=default)。1.没有虚函数或虚基类。2.没有具有相应非普通的 构造函数/运算符/析构函数 的基类。3.没有具有相应非普通的 构造函数/运算符/析构函数 的类类型的数据成员。(注意:成员可以有不同访问权限,pri

2022-01-04 18:15:39 704

原创 linux性能分析工具

linux静态分析性能工具linux性能测试工具linux性能优化工具linux性能监测工具:sarlinux性能监测工具:pertoolslinux bcc/BPF跟踪工具bpftrace/eBPF工具新的BPF性能分析工具c++开发常用开源性能分析工具重点研究这几种1.valgrind很占用内存,测试环境可以使用。Memcheck 检测内存泄漏;Callgrind 分析函数调用,可以用来分析开源项目的源码;Cachegrind 分析cpu的cache L1 L

2021-12-29 12:51:42 2697 1

原创 uwebsockets源码分析(1)

uwebsockets主要由libuv和uskcoets的库加上c++模板代码uwebsockets组成。这个项目应该属于nodejs的生态,因为底层是libuv,项目中可以完全当成addon插件加入到nodejs项目中,libuv直接链接的node的动态库。使用方式:可以以服务端形式独立于node的loop(libuv循环事件主体)收发消息,也可以自己加入客户端代码将fd加入node的loop中使用。第一种方式两个loop线程独立,需要注意自己实现通知机制;第二种方式在同一个loop线程中,没有线程安全

2021-12-26 18:39:47 1799

原创 nodejs服务器cpu,内存,死循环问题排查

内存泄漏排查步骤1.使用addon模块heapdump生成的dump文件并下载。2.打开浏览器开发者工具的memory项导入即可分析3.可以对照两个dump之间增加的内存分析出内存泄漏的地方cpu占用排查步骤1.使用v8-profiler-node8模块startProfiling和stopCpuProfiling生成profile文件并下载2.打开浏览器开发者工具的javascripts 探测器项导入即可分析死循环远程调试排查,使用vscode:pm2 启动配置修改 ...

2021-12-24 14:48:45 1080

原创 使用vscode远程调试nginx

1.编译运行nginx。2.使用vscode远程连接到linux服务器,使用remote-ssh可以远程查看打开目录文件。3.vscode安装c/c++扩展工具包。4.配置launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.

2021-12-24 14:15:22 3072

原创 mongodb总结和问题排查

查询对应db.集合.的oplog条数,慎用db.getCollection(‘oplog.rs’).find({“ts”:{$gt:Timestamp(1620507601,1)},“ns”:/XXX/}).count()本地dump,restoremongodump -d local -c oplog.rs -q “{“ns”:“XXX”}” -o ./backup2mongorestore --oplogReplay --oplogLimit “1619159597:2” backup2

2021-12-21 11:49:18 1844

原创 构建用户态网络协议栈(1)

网络数据到达如果经过内核怎么处理?如果不经过内核怎么处理?用户态协议栈?napi?netmap?dpdk?ovs-dpdk?openflow?sdn?f-stack?nfv?fd.io?传统网络设备驱动包流向和处理流程:网络数据包->网卡->网卡dma拷贝数据到内核缓冲区 -> 网卡发送中断给内核 或者内核自己轮询(napi) -> cpu接管 -> 网卡驱动处理解析数据包 -> 内核协议栈解析ip包 -&g...

2021-12-14 19:25:03 1627

原创 linux5.2内核的ringbuffer(无锁环形缓冲区)原理实现与源码分析(上)

无锁环形缓冲区设计原理目录 无锁环形缓冲区设计原理本文中使用的术语通用环形缓冲区概述主要指针使环形缓冲器lockless(无锁)嵌套写入阅读linux源码首先从理解原理开始,linux文档已经整理的很好了,直接查看源码目录里的Documentation/trace/ring-buffer-design.txt,以下提供本...

2021-12-08 16:58:45 2752

原创 锁,原子操作,volatile,内存屏障,lockdep,死锁的排查检测与避免

锁,原子操作,volatile,内存屏障,死锁的排查检测与避免

2021-12-05 18:02:20 972

原创 后端技术总结(c++)

1.c++,对象模型,设计模式,模版,stl,并发编程2.数据库:mongo,mysql3.缓存:redis4.计算机体系结构,cache,mesi5.linux内核6.分布式消息中间件,分布式框架,分布式算法7.网络协议,tcp/ip,路由,网络编程8.音视频9.通用gpu/cuda加速,云计算,超算10.图形学,3d渲染11.软件架构12.大数据,微服务,云原生13.算法,编译原理14.网络安全,sdn,dpdk,密码学15.kvm虚拟机,容器16.性能调优,运维,调试,线

2021-12-02 21:44:12 3235

空空如也

空空如也

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

TA关注的人

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