<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wydaicls的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wydaicls</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wydaicls]]></copyright><item><title><![CDATA[什么时候触发负载均衡(kernel 6.12)]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/159617005</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/159617005</guid><author>wydaicls</author><pubDate>Sun, 29 Mar 2026 20:56:03 +0800</pubDate><description><![CDATA[你看到的sched_tick里的代码，只是 Linux 复杂负载均衡宏大版图的三分之一。唤醒负载均衡是“新生儿分班”，尽量一开始就分均匀。空闲负载均衡是“主动抢活干”，绝不让自己闲着。周期性负载均衡（Tick）则是“定期大盘点”，防止出现长期积劳成疾的极端不平衡。这三者结合，才造就了 Linux 在多核时代强悍的调度性能。]]></description><category></category></item><item><title><![CDATA[perfetto中老是看到kworker:1这些，这些是干什么的啊]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/159616297</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/159616297</guid><author>wydaicls</author><pubDate>Sun, 29 Mar 2026 19:28:16 +0800</pubDate><description><![CDATA[下次在 Perfetto 中再看到kworker:1突然占用了一段 CPU 时间，不要慌。它不是恶意进程，也不是系统 Bug，而是Linux 内核的异步任务调度池正在处理某个驱动或子系统交代给它的“脏活累活”。它之所以频繁出现，正是因为现代操作系统的设计极度依赖异步和延迟执行来保证前台的流畅度。]]></description><category></category></item><item><title><![CDATA[使用 CPU 亲和性固定到大核]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/159356286</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/159356286</guid><author>wydaicls</author><pubDate>Sun, 22 Mar 2026 22:21:47 +0800</pubDate><description><![CDATA[【代码】使用 CPU 亲和性固定到大核。]]></description><category></category></item><item><title><![CDATA[记录一个 JWT 登录认证模块]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/159349258</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/159349258</guid><author>wydaicls</author><pubDate>Sun, 22 Mar 2026 12:22:57 +0800</pubDate><description><![CDATA[本文介绍了基于Spring Cloud的JWT认证系统实现方案。系统采用模块化设计，主要包括：1）公共模块(spring-cloud-common)实现JWT工具类和用户上下文；2）认证服务(spring-cloud-auth-service)处理登录/令牌发放；3）网关(spring-cloud-gateway)通过全局过滤器实现统一认证，支持白名单配置；4）各微服务通过拦截器接收用户信息。方案实现了完整的认证流程，包括令牌生成、验证、用户信息传递和统一错误处理，采用ThreadLocal管理用户上下文并]]></description><category></category></item><item><title><![CDATA[kernel 内核中的pd域]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/155245619</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/155245619</guid><author>wydaicls</author><pubDate>Tue, 25 Nov 2025 22:33:39 +0800</pubDate><description><![CDATA[【代码】kernel 内核中的pd域。]]></description><category></category></item><item><title><![CDATA[kernel 6.12 中 select_task_rq_fair 选核的逻辑分析]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154408254</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154408254</guid><author>wydaicls</author><pubDate>Tue, 04 Nov 2025 22:09:46 +0800</pubDate><description><![CDATA[摘要：本文分析了Linux内核CFS调度器的核心函数select_task_rq_fair，该函数负责为唤醒任务选择目标CPU运行队列。函数主要处理三种调度域标志（SD_BALANCE_WAKE/FORK/EXEC）和唤醒标志（WF_TTWU），通过判断CPU负载情况、任务亲和性等条件，分别采用快速路径（优先选择空闲兄弟CPU）或慢速路径（在调度域内负载均衡）进行CPU选择。文章还详细解析了记录任务唤醒关系的record_wakee机制，以及判断CPU过载状态的is_rd_overutilized函数，这些]]></description><category></category></item><item><title><![CDATA[C语言完成Socket通信]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154247561</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154247561</guid><author>wydaicls</author><pubDate>Sat, 01 Nov 2025 18:36:23 +0800</pubDate><description><![CDATA[本文介绍了基于Windows平台的TCP客户端/服务器通信实现。服务器端通过socket()、bind()、listen()和accept()建立连接，使用recv()/send()进行数据收发，监听8080端口。客户端通过socket()创建套接字，connect()连接服务器，并实现交互式消息收发功能。代码采用Winsock API，需链接ws2_32库，使用gcc编译时需添加-lws2_32参数。实现过程包括初始化WSA、创建套接字、地址绑定、连接处理及资源释放等完整流程，支持本地回环测试（127.0]]></description><category></category></item><item><title><![CDATA[用C语言实现时间的打印 time]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154236633</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154236633</guid><author>wydaicls</author><pubDate>Sat, 01 Nov 2025 12:25:11 +0800</pubDate><description><![CDATA[摘要：这段C语言代码展示了如何获取并格式化系统时间。首先通过time()获取UTC时间，然后使用ctime()输出标准时间格式。接着使用localtime()转换为本地时间结构体，并利用strftime()自定义格式化为中国标准时间格式（YYYY-MM-DD HH:MM:SS）。最终输出两种格式的当前时间：默认格式和中国格式的本地时间。]]></description><category></category></item><item><title><![CDATA[C语言 了解一下回调函数(钩子函数)的使用]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154153688</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154153688</guid><author>wydaicls</author><pubDate>Thu, 30 Oct 2025 22:55:42 +0800</pubDate><description><![CDATA[本文分析了Linux内核中cpufreq_add_update_util_hook()机制的作用与实现。该函数用于在CPU调度器和频率调控器之间建立回调机制，当任务负载变化时能及时触发频率调整。文章通过代码示例展示了回调函数的注册流程，包括参数解析（CPU编号、回调指针等）和实际使用方法。模拟实验验证了该机制能正确响应I/O唤醒(UTIL_UPDATE_IOWAIT)等事件，输出结果显示当flags标志位变化时能成功触发预设的回调函数。这种机制实现了调度器与CPUFreq子系统的高效联动，为动态调频提供实时]]></description><category></category></item><item><title><![CDATA[了解一下 sugov_cpu 结构体]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154087712</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154087712</guid><author>wydaicls</author><pubDate>Wed, 29 Oct 2025 21:47:41 +0800</pubDate><description><![CDATA[本文分析了Linux内核中的sugov_cpu结构体及相关调度算法。sugov_cpu是每个CPU核心独立存储的状态结构，包含利用率(util)、I/O等待提升(iowait_boost)等字段，通过per_cpu宏访问。在共享策略下(sugov_next_freq_shared)，算法会遍历所有CPU，获取各自的利用率(包括I/O等待提升处理后)，取最大值作为整体负载依据。其中sugov_iowait_apply函数处理I/O等待提升逻辑：若无I/O事件则衰减提升值，有事件则转换为统一量纲进行比较。这种设]]></description><category></category></item><item><title><![CDATA[学习一下kernel6.12中sugov_iowait_apply的函数逻辑]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154041624</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154041624</guid><author>wydaicls</author><pubDate>Tue, 28 Oct 2025 23:08:09 +0800</pubDate><description><![CDATA[本文介绍了Linux内核中schedutil调频策略的I/O等待加速机制。该机制通过临时提升CPU频率来优化I/O密集型任务的响应速度，解决任务因I/O阻塞后被唤醒时CPU频率滞后的问题。核心函数sugov_iowait_apply()负责管理I/O boost的衰减与重置：当检测到新I/O请求时保持或提升boost值，无新请求时则指数衰减，CPU空闲时重置boost。该机制通过权衡高频I/O任务加速和低频率I/O任务保守处理，有效改善了系统响应性和I/O吞吐性能。]]></description><category></category></item><item><title><![CDATA[了解一下kernel6.12中cpu_util_cfs_boost函数的逻辑]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/154038744</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/154038744</guid><author>wydaicls</author><pubDate>Tue, 28 Oct 2025 22:28:13 +0800</pubDate><description><![CDATA[本文分析了Linux内核中CPU利用率计算的核心函数cpu_util()，重点解析了util_avg（实际CPU利用率）和runnable_avg（可运行任务压力）两个关键指标的区别与联系。util_avg反映任务实际执行时间，而runnable_avg包含等待调度的任务压力。通过max(util_avg, runnable_avg)计算，调度器能准确识别CPU真实负载情况，包括任务排队等隐性压力，避免仅依赖实际利用率导致的调度偏差。这一机制为负载均衡、能效调度和CPU调频提供了精准依据，是确保系统调度高效]]></description><category></category></item><item><title><![CDATA[记录一下Linux 6.12 中 cpu_util函数的作用]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153987592</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153987592</guid><author>wydaicls</author><pubDate>Mon, 27 Oct 2025 22:16:04 +0800</pubDate><description><![CDATA[摘要： cpu_util()是Linux内核中用于估算CFS任务CPU利用率的函数，其返回值与CPU算力单位一致（0~1024）。核心功能包括： 应用场景：支持能效调度（EAS）、CPU调频（schedutil）和负载均衡决策； 计算逻辑：基于PELT的util_avg和util_est，通过任务迁移模拟（增减贡献值）和Boost模式（取util_avg与runnable_avg最大值）动态调整估算； 竞态处理：针对任务迁移中的状态间隙，通过current==p检查减少利用率误判； 参数组合：不同参数配置可]]></description><category></category></item><item><title><![CDATA[dumpsys meminfo 中的 Lost RAM 怎样计算？]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153752596</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153752596</guid><author>wydaicls</author><pubDate>Wed, 22 Oct 2025 22:57:29 +0800</pubDate><description><![CDATA[摘要： dumpsysmeminfo中的LostRAM是系统未明确归类到特定用途的内存，计算公式为：TotalRAM减去已统计内存（进程使用、缓存、内核占用等）。其成因包括统计口径差异（如内核专有驱动内存未计入）、缓存机制或重复计算（可能导致负值）。MTK平台可通过page_owner_full.txt分析内核层内存分配，借助Linux的PageOwner机制（需手动开启）追踪内存页面来源，但需注意性能开销和早期分配漏检问题。该工具适用于调试内存泄漏及“内存黑洞”，尤其针对芯片厂商的预留内存（如ION）或图]]></description><category></category></item><item><title><![CDATA[C语言对单链表的操作]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153586487</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153586487</guid><author>wydaicls</author><pubDate>Sun, 19 Oct 2025 21:42:00 +0800</pubDate><description><![CDATA[本文实现了一个带头结点的单链表数据结构，包含链表的基本操作。首先定义了链表节点结构体，包含数据域和指针域。主要功能包括：初始化空链表、判断链表是否为空、头插法和尾插法插入节点、按位置/值插入/删除节点、按值/位置查找节点、遍历链表以及销毁链表等操作。其中头插法在链表头部插入节点，尾插法在链表尾部追加节点。所有操作都基于带头结点的设计，头结点不存储实际数据，其next指针指向第一个有效节点。最后在main函数中演示了链表的创建和使用方法。]]></description><category></category></item><item><title><![CDATA[Linux memfree 的计算逻辑]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153584819</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153584819</guid><author>wydaicls</author><pubDate>Sun, 19 Oct 2025 20:52:46 +0800</pubDate><description><![CDATA[本文分析了Linux系统中MemFree的计算逻辑及其与内核函数global_node_page_state(NR_FREE_PAGES)的关系。MemFree表示系统当前空闲物理内存，其值主要来源于global_node_page_state对NUMA节点空闲页数的全局统计。文章详细比较了MemFree与/proc/zoneinfo中nr_free_pages的区别，前者是全局汇总值，后者按内存区域细分。内核实现上，MemFree的计算在fs/proc/meminfo.c中完成，通过si_meminfo获]]></description><category></category></item><item><title><![CDATA[Linux 内核伙伴系统在快速路径分配内存时，对一个内存区域（Zone）进行水位线检查和内存压力评估的关键逻辑]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153518932</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153518932</guid><author>wydaicls</author><pubDate>Sat, 18 Oct 2025 11:58:32 +0800</pubDate><description><![CDATA[摘要：本文分析了Linux内核内存分配中的伙伴系统和水位线机制。在伙伴系统中，get_page_from_freelist()函数通过zone_watermark_fast()快速检查zone的水位线，若失败则通过cond_accept_memory()进行二次评估，体现了效率与安全的平衡。水位线计算部分，__setup_per_zone_wmarks()根据min_free_kbytes和zone内存占比计算各水位线，对低端和高端内存采用不同策略，并通过watermark_scale_factor实现动态]]></description><category></category></item><item><title><![CDATA[Linux 系统下 ZONE 区域的划分]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153478123</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153478123</guid><author>wydaicls</author><pubDate>Fri, 17 Oct 2025 21:05:27 +0800</pubDate><description><![CDATA[本文介绍了Linux内存管理中的zone分区和伙伴系统机制。内核将物理内存划分为DMA、DMA32和NORMAL等zone区域，每个zone使用struct zone结构管理。伙伴系统通过free_area数组（包含11个不同大小的空闲链表）来高效管理内存页块，支持2^0到2^10个连续页框的分配。alloc_pages()函数通过快速路径直接查找空闲链表，失败时进入慢速路径触发内存回收等操作。这种机制既能满足多样化的内存需求，又能有效减少内存碎片。]]></description><category></category></item><item><title><![CDATA[当内存紧张时出现mm_vmscan_direct_reclaim 直接回收，需要对其分析]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153422833</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153422833</guid><author>wydaicls</author><pubDate>Thu, 16 Oct 2025 23:07:48 +0800</pubDate><description><![CDATA[Linux内核内存管理中的mm_vmscan_direct_reclaim路径负责同步直接页面回收，当系统空闲内存低于低水位线时触发。该过程会阻塞申请进程，通过try_to_free_pages()函数执行回收，可能导致性能抖动。关键监控指标包括pgscan_direct、pgsteal_direct和allocstall。调优建议包括调整lowmem_reserve_ratio参数优化内存域保留页比例。try_to_free_pages()作为核心回收函数，通过scan_control结构体控制回收行为，]]></description><category></category></item><item><title><![CDATA[lmkd.cpp 部分逻辑]]></title><link>https://blog.youkuaiyun.com/wydaicls/article/details/153420959</link><guid>https://blog.youkuaiyun.com/wydaicls/article/details/153420959</guid><author>wydaicls</author><pubDate>Thu, 16 Oct 2025 22:23:05 +0800</pubDate><description><![CDATA[摘要：这段代码展示了Android LMKD（低内存杀手守护进程）的核心决策逻辑，用于在内存压力下选择终止进程。系统通过监测内存水位线、PSI压力指标、交换空间使用率和内存抖动等多项指标，判断当前内存状态并触发相应操作。决策过程采用分级策略，优先终止低优先级进程（oom_score_adj值高），同时保护用户可感知的应用（adj≤200）。典型终止原因包括：内存回收后仍低于阈值、系统响应延迟、交换空间不足伴随内存抖动等。该机制通过多维度监控和智能决策，在保障系统稳定的同时最大限度减少对用户体验的影响。]]></description><category></category></item></channel></rss>