
kernel
文章平均质量分 90
动态一时爽,重构火葬场
这个作者很懒,什么都没留下…
展开
-
从automaxprocs库浅窥Linux容器的资源控制
automaxprocs能够自动调整Go程序中的Goroutine数量,以充分利用系统资源并提高程序的性能。automaxprocs通过读取系统信息,如CPU核心数和Cgroups限制,来动态调整Goroutine的数量automaxprocs获取CPU限额的关键方法在可以看到是先获取到cgroup的实现,然后调用实现方法获取限制获取cgroup2实现如下具体算限制方法如下其实就是取cpu.max文件中指定的限额。原创 2024-10-11 22:51:40 · 975 阅读 · 0 评论 -
go内存返还系统相关代码
在go中内存返还系统相关代码主要由sysUnusedOS实现在Linux中默认是通过madvice方法的_MADV_FREE进行释放,在这种释放中内存其实是被延迟回收的。sysUnusedOS被scavengeOne调用,scavengeOne在给定的内存块(chunk)中搜索可回收的连续页面,并尝试回收指定数量的内存值得注意的是,在回收之后内存还是可以再次分配的scavengeOne继而被scavenge调用该过程分块进行,从最高地址开始,一直持续到清除指定字节数(nbytes)或耗尽堆。原创 2024-07-05 21:00:00 · 861 阅读 · 0 评论 -
Linux文件数据写入
结构体fdfd也就是文件描述符,用于标识已经打开的文件、管道、socket等。是进程和内核的桥梁,允许进程执行各种文件操作struct fd { struct file *file; unsigned int flags;};fileLinux内核中表示打开文件的结构体,包含了文件操作所需的各种信息和元数据。这是文件系统操作的核心结构之一,允许内核跟踪每个打开的文件及其相关的状态。struct file { // 用于链接或者引用计数 union { // 链表节点原创 2024-07-02 22:45:00 · 1609 阅读 · 0 评论 -
Linux自旋锁
面对没有获取锁的现场,通常有两种处理方式。本文主要讲述自旋锁自旋锁其实是一种很乐观的锁,他认为只要再等一下下锁便能释放,避免了操作系统进程调度和线程切换。原创 2024-06-17 21:15:00 · 1433 阅读 · 0 评论 -
单核CPU调度
相反,如果一个任务“想”在一个配额的时间片上使用更多的内核,它就会在短时间内使用多于配额的内核,然后进入节流状态,也就是说基本上进入睡眠状态,以保持它的摊销内核使用量低于配额,这对于尾延迟来说是灾难性的。调度类是表示一种特定的调度策略和算法,定义了如何选择下一个要运行的任务,如何将任务插入到运行队列中,以及如何处理任务的唤醒和睡眠等。CFS调度利用红黑树优先调度执行总时间更低的,在每次时间片执行完会对执行的进程累加执行时间,并重新选择最低执行时间的进程进行执行。这也就意味着执行越久,执行优先级越低。原创 2024-05-12 09:14:41 · 805 阅读 · 0 评论