V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xiaozhaoz  ›  全部回复第 1 页 / 共 3 页
回复总数  43
1  2  3  
46 天前
回复了 kinkin666 创建的主题 程序员 上周末的软考大家情况如何
栈溢出,栈溢出只是内存写超过 ebp ,破坏了栈内容。 只有被破坏的内容导致了错误的虚存地址,地址对应的页表错误才会出发 cpu 异常。
46 天前
回复了 sbldehanhan 创建的主题 Linux Linux 内核的学习路径是什么样的?
@sbldehanhan 业务类型的内核开发,岗位主责是业务开发,只是技术可以覆盖深入到系统和内核领域,大厂会专门配一些系统专家岗位,主责是系统维护和内核优化。

手机,汽车,iot 等岗位主责是系统和内核移植,外设驱动开发,技术好的覆盖到内核核心子系统。

内核核心子系统开发,岗位少但位子稳,薪资高。
驱动开发岗位多,门槛比业务高,过去二十年来看,工作经验越长越吃香,且技术迭代较慢。
46 天前
回复了 sbldehanhan 创建的主题 Linux Linux 内核的学习路径是什么样的?
@sbldehanhan 国内的大厂主要是跟踪,读懂内核,根据内核特性优化系统和业务,解决涉及到操作系统和内核的问题,实际大部分都不是内核问题,都是业务问题。比如经常要排查网络吞吐波动很大,业务网络通信有丢包,业务拿锁速度慢,系统调度延迟大等各种和内核有关的问题。

手机,车企厂商,内核开发人员大部分都是驱动相关,包括内核移植到新硬件(不是新 arch )。

当然这些公司里面也有一些内核开发的志愿者,会参加社区的核心子系统开发,这部分人比较少。

国内内核核心子系统开发,主要集中在 huawei ,intel ,阿里,企鹅和百度、手机大厂也有一些,但不多。
46 天前
回复了 sbldehanhan 创建的主题 Linux Linux 内核的学习路径是什么样的?
2000 年开始做内核开发,内核也提交了一些代码。

内核开发岗位少,要求高。先学一两年驱动,先找个工作,再慢慢在项目中深入,后面找个子系统深入进去,每天跟踪 mailist 相关邮件,先从解决小问题开始。 内核开发看似资料很少,其实很多资料,只不过专业,更新快,零散在 mailist 里面。
46 天前
回复了 LxnChan 创建的主题 Linux 求问链路聚合
网口 bonding 有 0~6 ,7 种模式,你想实现一个链路上行带宽聚合,要用 mode = 0.

mode 0 的风险是包会乱序,如果是 udp 某些业务处理可能有问题。
这玩意现在这么难吗?

2009 年第一届考架构师,考试范围,书什么都没有。时间到了直接去考,好像不太难,考考就过了。
复旦大学附属中山医院,心内心外全国都排前三。
微信小程序可以看看,看能不能远程挂号。
先找个普通门诊挂号检查,结果出来后多花点挂号费找特需。
108 天前
回复了 KJH 创建的主题 程序员 架构师都是怎样炼成的
架构师是一个随着对技术和业务理解的加深,技术人员自然回到的一个岗位选择。

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

所以架构师是开发人员对技术广度和业务理解更深刻后,晋升的一个岗位。
pthread_init_attr()
pthread_attr_getstack()
看默认栈大小。

不同的 libc 实现,线程栈大小不同,glibc 默认 2M 。
ulimit -s 也会限制栈大小。

可以统一通过 pthread_create 第二个参数设置栈大小。
@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 占用了大量物理内存。
喜欢写代码的话,不差钱 有很多开源项目都可以去做,开源项目做多了工作自然就找到了。
252 天前
回复了 cryboy007 创建的主题 投资 炒股风波
大家不要嘲笑了,这是新手的正常反应。每个人都是这样过来的。

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

新手一上来就赚钱不是好事,没有交学费学不到东西。
@PTLin 写入 reserved memory address ,然后如你所说的 gp 上捕获异常,写一级目录和 cr3. 这个方法老的 linux 版本上试过,可以走通但没什么用。
问一下,这个证有什么用。
我第一年有这个考试的时候,好像是 09 年吧,过了拿了证。一直在吃灰。
当年没书没题没范围,因为做了好几年架构设计,没准备去考感觉很容易就过了,以为这个证没啥用,这几年看好像很多人考。
@PTLin
我觉得也不是 cpu 设计的原因,是操作系统实现的原因。
如果说的是 userspace process , 没必要一级页表也要动态分配,因为程序总是要用内存的。一级页表开销也不大。
如果真的要实现 userspace process 一级页表也要动态分配,以前尝试过 cr3 放一个 reserved address ,然后触发 sigbus 后再分配 pdbr
1  2  3  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 22:05 · PVG 06:05 · LAX 14:05 · JFK 17:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.