V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xiaozhaoz  ›  全部回复第 1 页 / 共 2 页
回复总数  34
1  2  
@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 占用了大量物理内存。
喜欢写代码的话,不差钱 有很多开源项目都可以去做,开源项目做多了工作自然就找到了。
17 天前
回复了 cryboy007 创建的主题 投资 炒股风波
大家不要嘲笑了,这是新手的正常反应。每个人都是这样过来的。

炒股考验综合能力,心理承受能力也是其中之一。
个人经验,把炒股当作一个风险更大的理财方式,买入全亏不心痛的额度。然后慢慢在市场中找感觉和适合自己的方法。没人能给你经验和指点,每人性格和心理承受能力不同。

新手一上来就赚钱不是好事,没有交学费学不到东西。
@PTLin 写入 reserved memory address ,然后如你所说的 gp 上捕获异常,写一级目录和 cr3. 这个方法老的 linux 版本上试过,可以走通但没什么用。
问一下,这个证有什么用。
我第一年有这个考试的时候,好像是 09 年吧,过了拿了证。一直在吃灰。
当年没书没题没范围,因为做了好几年架构设计,没准备去考感觉很容易就过了,以为这个证没啥用,这几年看好像很多人考。
@PTLin
我觉得也不是 cpu 设计的原因,是操作系统实现的原因。
如果说的是 userspace process , 没必要一级页表也要动态分配,因为程序总是要用内存的。一级页表开销也不大。
如果真的要实现 userspace process 一级页表也要动态分配,以前尝试过 cr3 放一个 reserved address ,然后触发 sigbus 后再分配 pdbr
2017-11-07 19:58:45 +08:00
回复了 xilixjd 创建的主题 程序员 前端月薪天花板大概是多少
天花板,嗯,想想 Zuckerberg 吧, 一开始也是玩前端. 年收入大概 1B ¥...
满意了吧..
2016-12-20 16:12:09 +08:00
回复了 cctv323 创建的主题 职场话题 帝都 985 研究僧,明年找工作,现在转前端来得及吗
去一家写代码的做无人机公司。
建议别转前端。

做飞行控制等算法是你的优势, 编码技能只是点缀而已。

所以去大疆或者很多国外的新起的无人机公司。
2016-11-19 21:32:49 +08:00
回复了 Antidictator 创建的主题 程序员 看技术文档 PDF 之类的比较适合是 Kindle 吗?
kindle dxg 谁用谁知道。
2016-11-04 18:35:20 +08:00
回复了 wuruxu 创建的主题 Linux 大家平时对 Linux 桌面的性能优化有需求吗?
lz 是想做这行吗?

08 年底调试过一年多的显卡驱动, 芯片里面的东西很多靠猜和试。做过了包括 mesa opengl 实现, glsl compiler ,和 里面的 video, encoder, decoder 优化和测试。

只能说当年 intel 坑太多,现在想起都会做噩梦。
2016-10-31 11:18:27 +08:00
回复了 Fload 创建的主题 职场话题 BAT 工作经历,能否洗白非计算机科班的专业出身呢?
看公司, 我们去名校, TOP10 , 就喜欢招非科班出生的。 心理学,临床医学的也招过。 只要技术过硬就行。

有个说法, google 里,看到高中学历的, 肯定是大牛。 要不然不会和你坐在一起。 学历劣势反衬技术牛。
2016-10-25 20:12:21 +08:00
回复了 linuxzpf 创建的主题 问与答 求教:在同一台电脑上如何做到开发一个项目的两个分支?
上面已经有几个同学说了。

git workdir ,新版本叫 git worktree, 自己查一下就知道了。
一个 worktree 对应一个 branch ,每个 worktree 下面的.git 是指向同一个地方。

所以你的开发模式就是,多个 worktree , 每个 worktree 对应一个 branch ,两个 iterm 中使用不同的 worktree ,所有 worktree 指向同一个 git repo. 不要用 clone 多分 repo 的方法,避免重复和各种同步问题。
2016-10-25 18:29:41 +08:00
回复了 linuxzpf 创建的主题 问与答 求教:在同一台电脑上如何做到开发一个项目的两个分支?
去理解 git 的 workdir 功能, git 源码中一个创建 workdir 的脚本。
创建两个 workdir ,每个开发不同分支,但 git local repo 是一个。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   6182 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 02:36 · PVG 10:36 · LAX 19:36 · JFK 22:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.