xiaozhaoz 最近的时间轴更新
xiaozhaoz

xiaozhaoz

V2EX 第 171840 号会员,加入于 2016-05-05 17:24:12 +08:00
今日活跃度排名 17848
xiaozhaoz 最近回复了
复旦大学附属中山医院,心内心外全国都排前三。
微信小程序可以看看,看能不能远程挂号。
先找个普通门诊挂号检查,结果出来后多花点挂号费找特需。
35 天前
回复了 KJH 创建的主题 程序员 架构师都是怎样炼成的
架构师是一个随着对技术和业务理解的加深,技术人员自然回到的一个岗位选择。

senior engineer 如果还做技术,最终两条路,一个是深度,一个是广度。
在某个技术做的很深,最后可能会成为技术专家,类似 DE 、PE 岗位。技术专家成为公司内某方面技术的权威。
技术广了,对业务理解的更多了,最后可能成为架构师。架构师要做核心技术选型、子系统边界设计、核心模块边界设计。

所以架构师是开发人员对技术广度和业务理解更深刻后,晋升的一个岗位。
@xiaozhaoz 错了,最后一种情况 1 的个数会变。
看到过一个算法,可以算一个 32bits 的 1 个数。
int count(unsigned x) {
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x = x + (x >> 8);
x = x + (x >> 16);
return x & 0x0000003F;
}
根据前一个数 的三种情况:
- 最后一位 0 ,1 的个数 + 1
- 前一个数全 1 ,1 的个数回到 1 ,实现方法:记住前一个数二进制长度,“~前一个数 & ( 0x1<<位数)- 1” == 0
- 其他情况,1 的个数不变
@Zoooooberg
我前面说内核 slab 内存也不太正常,因为 slab 占用了 7G 内存,一般的系统占用 2 ,3G 算比较多的。
看不懂 slabinfo ,也可以用 slabtop 直接看,可以看到哪些内核数据结构占用了较多内存。
你提供的 slabinfo ,可以看出通用 kmalloc 占用内存较多,所以还是怀疑硬件驱动模块 map 了大量内存。

我以前排查的问题是:
1. 系统启动后,内存就用了大概 50G ,应用使用很少。
2. lsmod 看哪些外挂驱动; dmesg 看内核 built-in 驱动。
3. 然后根据硬件驱动 modprobe -r 卸载驱动排查,最后定位到 intel 10G 网卡驱动有问题,再 64k 和 2M page size 的时候,multi rx ,tx queue 会导致占用大量物理内存。
4. 排查 GPU 显卡驱动时,也发现过类似问题。

物理驱动,启动后,都会分配连续内存用于设备和 cpu 交换数据,以前的内核 page size 是 4K ,驱动一般会 pagesize * count 计算要 map 的内存大小,当 pagesize 变成 64K 甚至 2M 的时候,驱动占用的内存就会变得很大。
在操作系统角度来看,物理内存除了分配给用户空间进程使用,还要给内核任务、硬件外设和 cpu 交换( dma )、文件系统 buffer/cache 、内核内存算法还有开销。

所以只看资源管理器或 top 里面的用户进程不一定能查到内存消耗在哪里了。

那个设备的内核内存开销也不正常, cat /proc/slabinfo 看看。
可能有硬件驱动,直接 map 了物理内存,看 directmap 能看出来。

以前碰到过类似的问题,因为 huge page , 网卡驱动有 bug ,ringbuf 占用了大量物理内存。
喜欢写代码的话,不差钱 有很多开源项目都可以去做,开源项目做多了工作自然就找到了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3079 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
Developed with CodeLauncher
♥ Do have faith in what you're doing.