- 博客(1793)
- 资源 (19)
- 收藏
- 关注
原创 Linux: rcu: 加速宽限期
本文探讨了大语言模型在解读Linux内核代码时的优势与局限。文章以RCU机制中的"加速宽限期"概念为例,对比了普通宽限期被动等待CPU进入静止状态的特点与加速宽限期主动干预的特性,指出后者通过处理器间中断等方式强制CPU退出临界区,显著缩短了内存回收等待时间。作者强调在理解复杂内核机制时,应精准定位问题核心,而非泛泛提问。大语言模型虽能快速提供专业解释,但其回答质量取决于训练数据的完整性和模型的中立性。
2026-04-13 21:12:49
45
原创 queued_spin_unlock 这里的spin lock,为什么前面加 queued,这个queued代表什么意思,有什么好处?
摘要:排队自旋锁(Queued Spin Lock)通过引入等待队列机制优化了传统自旋锁的性能。与传统自旋锁不同,排队自旋锁让等待CPU在本地变量上自旋而非共享变量,有效减少了多核系统中的总线竞争和缓存颠簸。其核心优势包括:1)降低总线流量和缓存一致性开销;2)提供FIFO公平性避免CPU饥饿;3)提升多核系统的可扩展性;4)使等待时间更可预测。Linux内核的queued_spin_lock/unlock实现了这种高效公平的锁机制,特别适合现代多核处理器架构。
2026-04-11 05:55:26
34
原创 Linux: lock: preempt_count 是一个线程级别的变量
摘要:Linux内核中的preempt_count是线程级别的计数器,用于控制内核抢占和保护临界区。它必须为线程级变量以确保每个线程能独立管理抢占状态,避免全局变量导致的竞态问题。该变量存储在线程的thread_info结构中,通过增减操作实现关键区的原子性保护,同时保持系统的并发性能。代码片段显示preempt_count通过current_thread_info()获取当前线程的私有副本。
2026-04-10 16:34:32
63
原创 RHEL8/9: CONFIG_PREEMPT_COUNT=y
RHEL9启用CONFIG_PREEMPT_COUNT=y而RHEL8未启用,这反映了内核抢占模型的差异。RHEL9通过抢占计数机制实现更细粒度的任务调度,显著提升实时性和响应速度,但可能增加少量上下文切换开销。对于延迟敏感型应用是优化,但对纯计算密集型任务可能略微降低吞吐量。该配置变化体现了RHEL9对实时性需求的增强支持,是性能调优时需要考虑的关键点。
2026-04-10 11:18:49
234
原创 Linux: cpu: its_return_thunk
摘要:本文分析了Linux内核中的its_return_thunk机制,这是针对Intel CPU中"Indirect Target Selection"(ITS)漏洞的缓解措施。通过反汇编代码可见,_raw_spin_trylock等函数会跳转到its_return_thunk执行ret指令返回。该机制需要同时启用RETPOLINE和RETHUNK缓解措施,默认开启用于防御Spectre V2类攻击。相关代码位于arch/x86/lib/retpoline.S中,通过CONFIG_MI
2026-04-10 10:56:35
20
原创 x86-ABI,为什么参数放入栈的顺序是从又到左?
AMD64 ABI草案规定参数从右到左压栈,这简化了可变参数函数的处理。关键优势在于:1)固定参数位置可静态计算,基于其类型确定;2)可变参数可顺序访问。若从左到右压栈,则第一个参数位置会随可变参数数量变化而无法静态确定,导致访问困难。这种设计特别适用于printf类函数,使其能准确解析format字符串后访问后续参数。
2026-04-09 13:52:35
33
原创 C enum的bump
C++和某些C实现允许枚举类型大于int。当枚举值超过int范围时,底层类型会自动提升为unsigned int、long int或unsigned long int。示例代码演示了这一特性:包含大值(10000000000000000)的枚举abc大小为8字节,而较小值(1000000000)的枚举abc1保持4字节。这表明编译器会根据枚举值范围自动选择适当的底层存储类型。
2026-04-09 13:33:36
26
原创 gcc: libstdc++-v3: _GLIBCXX_HAS_GTHREADS
文章摘要:GHTREAD相关代码分析显示,GCC通过gthread抽象层统一处理线程操作,实际依赖底层线程库如pthreads。代码示例展示了condition_variable::wait()如何调用pthread_cond_wait实现同步。pthread_mutex_t支持递归锁,通过PTHREAD_MUTEX_RECURSIVE类型实现,其递归深度理论上可达INT_MAX,但实际使用中需考虑栈溢出和内存限制。gthread并非独立实现,而是对现有线程库的封装,确保GCC跨平台线程功能的一致性。
2026-04-03 07:26:23
199
原创 程序员:exclusive blocking semantics
摘要:独占阻塞语义是一种并发控制机制,确保资源在任何时刻仅被单一进程/线程访问。其核心特性包括独占性(排他访问)和阻塞性(其他请求被挂起),主要应用于数据库、操作系统及多线程编程领域。该机制能有效维护数据完整性,但存在性能开销、死锁风险和并发度降低等缺点,需权衡使用。
2026-04-02 13:08:12
36
原创 glibc: x86: fs/gs
本文介绍了x86架构中基于段寄存器的地址空间机制及其在Linux线程实现中的应用。文章首先说明x86支持通过__seg_fs和__seg_gs声明变量,这些变量访问时会自动添加相应的段前缀。随后详细分析了glibc中线程栈分配过程,包括TCB位置设置和clone系统调用创建线程的流程。内核层面通过set_new_tls设置线程局部存储,其中修改FS段基地址需要特权指令。文章最后指出用户空间可以直接访问FS段内存但修改基地址需内核权限,并解释了arch_prctl系统调用在FS/GS寄存器操作中的桥梁作用。
2026-03-31 14:34:36
445
原创 gcc: builtin: __builtin_expect
摘要:__builtin_expect是GCC提供的内建函数,用于优化分支预测。它通过提示编译器某个条件更可能为真或假(参数c决定),从而生成更高效的代码。典型用法是在性能关键代码中标记高概率分支(c=1)或低概率分支(c=0)。该函数仅影响编译器优化,不改变程序逻辑,但需谨慎使用以避免降低代码可读性。示例展示了如何用它优化条件判断,其中__builtin_expect(x>5,1)提示x>5更可能为真。
2026-03-31 08:35:55
38
原创 Linux:resilience:fault-injection
本文介绍了Linux内核中的故障注入机制,主要包括failslab、fail_usercopy、fail_page_alloc和fail_make_request四种机制。这些机制通过模拟内存分配失败、用户空间复制错误、页面分配故障和块I/O请求失败等场景,帮助测试内核的健壮性和错误恢复能力。每种机制都支持精细的故障注入控制,需要配合CONFIG_FAILSLAB和CONFIG_FAULT_INJECTION_DEBUG_FS等配置选项使用。这些机制在内核文档中有详细说明,为开发人员提供了测试内核在异常条件
2026-03-26 10:06:44
293
原创 C:_Generic:Generic selection
摘要:_Generic_selection是C语言中的类型泛型选择关键字,根据参数类型选择相应的表达式执行。示例代码展示了page_folio宏的实现,它使用_Generic根据输入指针类型(struct page*或const struct page*)选择对应的转换方式,将页面指针转换为对应的folio指针。该转换通过_compound_head完成,使用时需注意并发情况下的数据一致性。
2026-03-26 08:49:40
25
原创 [英语单词] hardware-agnostic
摘要:本文探讨了"hardware-agnostic"(硬件无关)概念及其与相关术语的区分。硬件无关指系统/方法不依赖特定硬件平台,能在多种硬件环境下运行(如不同CPU架构)。文章以硬件无关侧信道攻击为例,说明其利用软件缓存通用行为而非特定硬件特性。与"hardware-free"(完全脱离硬件,不现实)不同,硬件无关仍需要硬件支持。与"hardware-independent"(硬件独立)相比,前者强调硬件适应性,后者侧重与硬件的解耦程度,但二者
2026-03-25 08:07:36
511
原创 Linux: sched: pick_next_task_fair 这个函数的功能
pick_next_task_fair是Linux CFS调度器中负责选择下一个运行任务的函数。主要功能是从CPU运行队列的CFS红黑树中选出vruntime最小的任务实体,处理任务切换时的树操作(卸下旧任务/挂上新任务),若无可用任务则进入idle路径或尝试负载均衡。其流程包括:检查可运行任务数→快速路径(组调度优化)或简单路径(完整遍历)→最终任务处理→必要时触发负载均衡。组织结构上,从CPU的rq出发,通过cfs_rq红黑树和sched_entity调度实体(可能多层嵌套),最终定位到具体的task_
2026-03-24 05:38:57
521
原创 电脑:鼠标
摘要:无线鼠标滚轮失灵可能由灰尘堆积、机械磨损、驱动问题、软件冲突或USB端口故障导致。解决步骤包括:清洁滚轮、更新/重装驱动、调整鼠标设置、更换USB端口测试、关闭后台程序。若问题持续,建议更换鼠标。
2026-03-24 05:34:22
154
原创 Linux: parameter : no_hash_pointers
摘要:内核调试时可通过命令行选项强制显示未哈希处理的真实指针值(%p格式)。默认情况下,内核会哈希处理指针值(%p)以隐藏实际地址,防止非特权用户获取敏感信息,但这增加了调试难度。使用%pK格式的指针仍会被哈希处理。该选项仅限调试使用,禁止在生产环境启用。代码片段展示了根据no_hash_pointers标志决定是否显示原始内存内容(0x%02x)或用"!"替代敏感数据。
2026-03-22 09:08:58
22
原创 Linux:intel:Cache Allocation tech
如果一个“吵闹的邻居”应用程序大量使用缓存,它可能会挤占其他关键应用程序的缓存空间,导致这些关键应用程序的性能下降和不可预测性。在这些环境中,多个应用程序或虚拟机共享处理器的缓存、内存控制器等资源,如果没有适当的管理,一个“吵闹的邻居”可能会占用过多资源,导致其他关键工作负载的性能下降。通过这种方式,CAT 可以防止一个工作负载耗尽所有缓存,从而保护其他关键工作负载的性能,确保它们有足够的缓存可用。它可以将 LLC 划分为不同的逻辑区域,并为特定的应用程序、进程或虚拟机分配专属的缓存空间。
2026-03-19 09:05:12
222
原创 C: 为什么要用双叹号
这段C语言代码使用双叹号(!!)将位运算结果强制转换为标准的布尔值。函数is_vm_hugetlb_page通过vma->vm_flags & VM_HUGETLB检查虚拟内存区域的HUGETLB标志位。第一个叹号将非零值转为0,零转为1;第二个叹号再反转结果,最终将任意非零值转为1(true),零转为0(false)。这种转换确保了返回值严格符合bool类型,提高了代码的可读性和类型安全性。
2026-03-19 08:59:29
67
原创 [安全] Side-channel的经典文章,值得一看
摘要:本文研究通过分析功耗测量数据从防篡改设备中提取密钥的方法。研究指出,系统安全需要各环节协同:若密码设计者、软件开发者与硬件工程师互不审查彼此工作,安全假设就会不完整(如"一眼唐"现象所示)。论文引用关系呈现两种对立的管理模式,而经典研究往往通过文献溯源即可发现。
2026-03-18 06:59:16
27
1
原创 浏览器翻译对比
本文对比了不同翻译工具对"TCP zero-copy"技术说明的翻译效果。原文解释了Linux内核的这一特性,允许数据在内核内存与用户空间或其他设备内存间直接传输而无需额外拷贝。Bing、豆包和千问翻译都准确传达了技术要点,其中Bing和千问使用"无需",豆包采用"避免"表达。而Firefox、Edge和Chrome浏览器的内置翻译功能表现欠佳,存在翻译不完整或失败的情况。结果表明专业翻译工具在技术文本处理上优于浏览器自带功能。
2026-03-15 08:39:59
46
原创 Microsoft store打开是空白页提示需要刷新
摘要:Microsoft Store出现"创建TLS客户端凭据错误(内部状态10013)",解决方法为修复TLS协议配置。具体步骤:1)通过运行命令inetcpl.cpl打开Internet属性;2)在高级选项卡中勾选TLS 1.2和1.3,取消勾选TLS 1.0和1.1。修改后问题成功解决,无需开启Windows update服务。(98字)
2026-03-14 17:11:23
45
原创 Cursor的使用实践
摘要:用户反映在使用Cursor时遇到无响应问题,网络正常但任务无法执行。经尝试通过手动在线升级Cursor后问题解决。用户质疑软件为何不能在版本不匹配时自动升级,仍需人工确认升级操作。建议Cursor改进自动更新机制以提升用户体验。
2026-03-12 15:02:12
35
原创 [AI] 值得一读的注入攻击案例
摘要:开源AI编码工具Cline的GitHub问题分类AI代理存在提示注入漏洞(2025.12.21-2026.2.9),攻击者可通过GitHub Actions缓存投毒窃取发布凭证,可能向数百万开发者分发恶意软件。经多次联系未果,漏洞在公开披露后被修复。目前未发现恶意更新,建议用户暂停自动更新并确认安全性。
2026-03-12 10:02:09
168
原创 值得一读的文章:Breaking Kernel Address Space Layout Randomization with Intel TSX
这篇论文探讨了如何利用Intel TSX(事务同步扩展)技术绕过KASLR(内核地址空间布局随机化)防护机制。作者提出了一种基于TSX的侧信道攻击方法,通过监测事务执行失败的时间差异来推断内核内存布局。该方法无需特殊权限,适用于现代Intel处理器。研究揭示了硬件特性可能被滥用于安全攻击,提醒开发者需要更全面的防护措施。文章技术细节清晰,适合初学者理解高级内存防护机制的潜在弱点。
2026-03-11 06:51:07
32
原创 软件设计,默认行为的选择?
本文讨论了rsyslogd在远端服务器故障时的默认行为选择问题。当远端服务器不可用时,当前默认行为会导致/dev/log日志缓冲区满,进而引发系统死锁等严重问题。相比之下,自动丢弃日志消息的默认策略更为合理,虽然会导致部分日志丢失,但其影响远小于系统死锁造成的危害。文章建议修改默认行为为主动丢弃日志,即使未配置消息队列策略也应如此处理,这样可以将问题严重性从系统级故障降级为单纯的日志丢失问题,显著提高系统稳定性。这种设计选择体现了在系统可靠性和数据完整性之间权衡的工程思维。
2026-03-04 07:44:50
25
原创 Linux: 重新理解调度
本文探讨了Linux内核中的调度机制,重点解析了"schedule"和"调度点"的概念。调度是操作系统分配CPU资源的核心功能,涉及进程选择(基于优先级、时间片等)和可能的上下文切换。文章特别分析了might_sleep()函数的作用,它标记可能睡眠的函数并在安全点添加调度检查(通过cond_reschedule),从而优化系统响应性。这种设计体现了内核在效率和响应性间的平衡:不是强制切换,而是在适当时机让调度器决定最优进程(可能继续运行当前进程或切换)。might_
2026-02-19 14:52:18
507
原创 Linux: errno: EBUSY 一码多义,颗粒度更小的错误码的实现
摘要:当前Linux内核的errno机制存在调试信息不足的问题,传统单线程全局变量设计虽已改进为线程局部存储,但错误信息颗粒度仍较低。例如EBUSY错误无法区分资源占用或vmap未初始化等不同情况,导致调试困难。现有调试方法依赖开发者经验且效率低下。AI技术有望通过静态分析、动态调试和预测性分析三个层面改进:自动关联错误上下文、生成结构化报告及预测错误传播路径。未来或可引入分级错误码系统,将简单数字升级为包含更多调试信息的智能错误标识,实现"错误码即调试线索"的智能调试体验。(149字)
2026-02-19 12:55:53
443
原创 Linux: socket创建之后 interface down 然后再up起来
在 Linux 中,当 raw socket 创建后,手动将其关联的网络接口 down 掉再 up 起来,发送数据时最常见的错误是 ENETDOWN (网络不可用) 或 ENETUNREACH (网络不可达)。linux如果一个raw socket 创建起来,然后手动down掉这个interface,然后接下来在up起来之后,socket发送数据会是什么错误?使用 SO_BINDTODEVICE:如果需要绑定到特定接口,明确使用此选项。监控接口状态:使用 netlink socket 监听接口状态变化。
2026-02-13 14:27:54
293
原创 glibc: 32bit 程序的一个变化
看了一下最新的代码,glibc的代码里有严格的最大值检查。限制了最大申请值,必须小于PTRDIFF_MAX。
2026-02-10 07:22:34
57
原创 执行perf-report命令时,会打开vdso的信息,这个vdso的信息是从哪里读取的?怎么映射的
摘要: perf report中的VDSO信息来自内核记录的MMAP事件,包含映射地址范围和名称(如[vdso])。解析时,二进制内容并非直接从perf.data读取,而是通过当前进程的/proc/self/maps定位[vdso]内存区间,拷贝到临时文件供符号解析使用。具体流程: 记录阶段:内核生成MMAP事件,记录被监测进程的VDSO映射信息。 报告阶段: 通过/proc/self/maps获取当前进程的VDSO地址范围。 将内存内容复制到临时文件(如/tmp/perf-vdso.so-XXXXXX),
2026-02-09 11:12:56
627
原创 [Linux] vdso 32bit vs 64bit
32位与64位系统的vdso(虚拟动态共享对象)存在显著差异。32位系统提供的接口函数如__kernel_vsyscall、__vdso_gettimeofday等,而64位系统则包含更多标准化接口如clock_gettime、gettimeofday等,且函数命名方式不同。64位还额外支持__vdso_sgx_enter_enclave等新功能。这些差异反映了系统调用优化和架构演进,32位保留更多传统接口,64位则更注重标准化和扩展性。具体分析可参考相关技术文章。
2026-02-01 06:35:34
73
原创 Linux: netlink 内核网络数据变化通知应用
本文提出了一种优化IP地址监控的方法,通过Netlink实时监听内核IP变化通知,替代低效的周期性轮询。文章包含一个C语言实现的小程序,能够监听IPv4/IPv6地址的添加/删除事件,并实时打印变更信息。程序使用Netlink套接字订阅RTMGRP_IPV4_IFADDR和RTMGRP_IPV6_IFADDR组,通过非阻塞方式处理内核通知,避免系统阻塞。实现包括信号处理、时间戳打印、IP地址和接口信息解析等功能,为系统IP地址变更审计提供了高效解决方案。
2026-01-22 13:36:41
242
原创 Linux: gdb-minimal
GDB推出最小化安装包gdb-minimal-16.3-2.el9.x86_64,减少了依赖库,方便开发者使用而无需自行编译。该版本保留了基本调试功能,支持C/C++/Fortran/Go等语言,但精简了部分高级功能如C++ map类型输出。如需完整功能,需安装boost-regex、source-highlight等6个附加包。最小化版本适用于不需要完整功能的调试场景。
2026-01-19 09:56:53
173
原创 Linux: user: failure on close: groupdel: cannot remove the primary group of user ‘abc‘
摘要:删除用户组ABC失败,因为用户abc的主用户组是ABC。groupdel命令拒绝删除正在被使用的用户组。该问题是由于操作不当导致的。(50字)
2026-01-08 10:07:26
130
原创 perl: redhat9, perl-interpreter.rpm 一个包分成很多个小包
摘要:Red Hat 8的perl-interpreter软件包包含大量Perl模块文件(如Text/Abbrev.pm、Thread.pm等),而Red Hat 9的同名包仅包含核心二进制文件(/usr/bin/perl)和少量文档,缺失了原有模块。这表明在RHEL9中Perl模块可能被拆分到其他包中。对于手动安装的环境,建议改用dnf自动安装以确保依赖完整,避免因模块缺失导致的问题。
2026-01-06 13:02:39
368
原创 python: DeprecationWarning: Flags not at the start of the expression ‘.*(?i)ABC$‘ but at positi
正则表达式警告提示:(?!)语法应放在表达式开头以避免弃用警告。解决方案有两种:1)将忽略大小写标记(?i)移到正则开头,如'(?i).*_DUPLEX2$';2)使用flags=re.IGNORECASE参数替代内联标记。这两种方法都能消除警告并实现不区分大小写的匹配效果。
2026-01-06 09:06:02
147
原创 Linux: disk: dd 参数bs
dd命令默认使用512字节块大小,但合理设置bs参数可显著提升性能。当处理大文件时,建议将bs设为1M(1048576字节),这能平衡IO效率与内存消耗。典型应用包括磁盘克隆和大文件备份,优化后命令如dd if=src of=dest bs=1M status=progress。相比默认值,1M块大小通常可获得3-5倍性能提升,特别大的文件可尝试4M或8M块大小,但需根据硬件测试确定最佳值。
2026-01-04 13:05:33
630
原创 Linux: network: ipv6: proxy_ndp
这意味着,如果一个主机 A 询问主机 B 的 MAC 地址,而主机 B 不在主机 A 的直接链路上,但有一个启用了 proxy_ndp 的中间设备 C 知道主机 B 的 MAC 地址,那么设备 C 就会代表主机 B 回复主机 A 的请求。桥接 (Bridging):在某些复杂的桥接或虚拟化环境中,如果一个设备(如路由器或主机)需要为连接到其上的其他设备(如虚拟机或物理服务器)代理 NDP 消息,以确保它们能够被网络中的其他节点发现。将其值设置为 1 启用,设置为 0 禁用。
2026-01-04 13:00:35
293
免安装的perf程序,基于内核4.18.0-553.27.1
2024-12-07
Netlink 实际操作代码,实际可以参考iproute源代码做,这里只是方便自己使用的一个样例
2022-03-12
C,删除无用ifdef宏的工具
2023-02-03
MTU 相关知识总结点(一)
2022-10-17
ip添加vlan interface的strace日志
2022-03-29
免安装strace strace.zip
2021-07-20
Net-Interface-1.016.tar.gz
2021-01-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅