0x00 前言
本文主要结合linux dentry(dentry cache)的实现及机制,讨论下相关的坑,基于内核版本5.4.241
- dentry cache过高导致的卡顿及OOM问题
- dentry cache与fsnotify文件监控机制的问题
struct dentry {
/* RCU 查找涉及的字段 */
unsigned int d_flags; /* 由 d_lock 保护 */
seqcount_t d_seq; /* 每个目录项的序列锁 */
struct hlist_bl_node d_hash; /* 查找哈希列表 */
struct dentry *d_parent; /* 父目录 */
struct qstr d_name; /* 目录项名称 */
struct inode *d_inode; /* 名称所属的位置 - 为 NULL 表示负 */
unsigned char d_iname[DNAME_INLINE_LEN]; /* 短名称 */
//..
union {
struct list_head d_lru; /* LRU 列表 */
wait_queue_head_t *d_wait; /* 仅用于查找中的等待队列 */
};
struct list_head d_child; /* 父列表中的子项 */
struct list_head d_subdirs; /* 我们的子目录 */
/*
* d_alias 和 d_rcu 可以共享内存
*/
union {
struct hlist_node d_alias; /* inode 别名列表 */
struct hlist_bl_node d_in_lookup_hash; /* 仅用于查找中的列表 */
struct rcu_head d_rcu;
} d_u;
} __randomize_layout; // 目录项结构
0x01 dcache 介绍
0x0 dentry cache 过高的典型场景分析
相关内核代码
TODO
0x0 fsnotify与dentry cache的坑
相关内核代码
TODO
0x0 参考
FEATURED TAGS
Latex
gRPC
负载均衡
OpenSSH
Authentication
Consul
Etcd
Kubernetes
性能优化
Python
分布式锁
WebConsole
后台开发
Golang
OpenSource
Nginx
Vault
网络安全
Perl
分布式理论
Raft
正则表达式
Redis
分布式
限流
go-redis
微服务
反向代理
ReverseProxy
Cache
缓存
连接池
OpenTracing
GOMAXPROCS
GoMicro
微服务框架
日志
zap
Pool
Kratos
Hystrix
熔断
并发
Pipeline
证书
Prometheus
Metrics
PromQL
Breaker
定时器
Timer
Timeout
Kafka
Xorm
MySQL
Fasthttp
bytebufferpool
任务队列
队列
异步队列
GOIM
Pprof
errgroup
consistent-hash
Zinx
网络框架
设计模式
HTTP
Gateway
Queue
Docker
网关
Statefulset
NFS
Machinery
Teleport
Zero Trust
Oxy
存储
Confd
热更新
OAuth
SAML
OpenID
Openssl
AES
微服务网关
IM
KMS
安全
数据结构
hashtable
Sort
Asynq
基数树
Radix
Crontab
热重启
系统编程
sarama
Go-Zero
RDP
VNC
协程池
UDP
hashmap
网络编程
自适应技术
环形队列
Ring Buffer
Circular Buffer
InnoDB
timewheel
GroupCache
Jaeger
GOSSIP
CAP
Bash
websocket
事务
GC
TLS
singleflight
闭包
Helm
network
iptables
MITM
HTTPS
Tap
Tun
路由
wireguard
gvisor
Git
NAT
协议栈
Envoy
FRP
DPI
gopacket
Cgroup
Namespace
DNS
eBPF
GoZero
Gost
Clash
Tracee
gopsutil
Linux
HIDS
ELKEID
XDP
TC
Systemd
DDoS
DPDK
netlink
Kernel
BCC
rootkit
bpftrace
AI
eino