Job

看广告前先尝试回答如下入门问题

Linux下内核分页,i386是10-10-12这样的二级分页,X86_64则是9-9-9-9-12四级分页,那么为什么64位下要设计成9而不是10呢?

-

-

-

-

-

-

-


更新日期:2021-04-06

阿里云虚拟化组,2021年度社招&应届招聘开始啦,正在招人中

有意者将基本介绍发送到 oenhan AT Gmail

阿里云智能事业群-神龙系统虚拟化研发专家-北京/杭州(Px~P9)

团队介绍:

我们团队负责阿里云虚拟化hypervisor的架构设计,研发和维护。 我们基于阿里云神龙硬件平台, 通过软硬件协同设计开发的理念,结合系统软件栈上的创新,打磨出了一套轻薄而又高效的Dragonfly Hypervisor,再配合一系列端到端的优化和系统解决方案, 从性能、稳定性、体验、成本等几个维度持续不断的提升我们产品的竞争力。

职位描述:

该职位工作包括下列内容中的一项或多项:
各类新硬件平台的虚拟化产品研发。
Arm系列产品研发。
虚拟化下容器方案研发。
虚拟化各种软硬件隔离方案研发或优化。
神龙硬件平台加速与卸载方案研发。
热迁移/热升级/热插拔技术的持续优化。
质量,运维,发布,监控,数据相关研发。
虚拟化安全可信方案的研发。
客户性能优化或其他稳定性相关支持工作。
控制面研发和优化。
专有云/边缘云解决方案研发。
下一代Dragonfly Hypervisor的架构设计和研发。

职位要求:(需满足一条或多条)

熟悉x86或arm体系结构; 熟悉PCI-E, CCIX, CXL等互联技术者优先。
熟悉系统虚拟化中 CPU虚拟化 (vt-x), 内存虚拟化(ept, shared virtual memory), 中断虚拟化(interrupt remapping, msi/msi-x, posted interrupt),IO虚拟化 (iommu/smmu, vfio, sriov, scalable iov), 等核心虚拟化模块工作原理。 有XEN,KVM, QEMU等开源虚拟化项目开发经验者优先。
熟悉Linux内核调度器、内存管理、cgroups隔离, RAS 等模块工作原理,有丰富的内核态开发和debug经验。
熟悉软硬件协同设计开发。 有智能网卡/加速卡/卸载卡/dpdk/spdk 开发经验者优先。
熟悉安全、可信领域相关工作。 有TPM/vTPM,SGX等解决方案经验者优先。
熟悉容器,安全容器或其他云原生底层技术。 有docker, gvisor, kata, rust vmm,firecracker经验者优先。
精通c/c++或python编程, coding能力强; 参与过openstack,libvirt等控制面开发者优先。
熟悉Linux,Windows,系统虚拟化或硬件性能调优。
学习能力好,能快速上手新东西; 勇于面对新挑战,有较强的抗压能力; 有比较好的沟通和协作能力。

--- end ---

17 thoughts on “Job”

    1. @RAY 待遇要自己谈,虚拟化开发主力都在国内,口语要求一般,低于商务。

  1. 回复一下分页问题:因为在x86_64下,目前实际使用的48bits地址,四级分页使用 9 * 4= 36bits,最后的12bits用来表示页内offset(linux默认页面4K页,正好是12bits)。5分钟内回答出来,没有查代码及网上说明。

    1. @大虾 “最后的12bits用来表示页内offset(linux默认页面4K页,正好是12bits)”,这是对的;但是为什么实际使用的是48bit呢,就是因为4级页表,每级别是9bit;所以你是从结果推算原因。

      1. @OENHAN 不具体知道原因。纯猜测。48bit的使用无非是CPU硬件实现的一个trade off。说是64位地址,但是实现世界哪里有这么大的单机物理内存,硬件使用64bit地址纯属浪费,所以硬件设计取了一个折中。另外有一些原子操作,也依赖某些高位地址是不使用的。

  2. Page size = 4k , x86_64 和 x86 with PAE 的address 表示都需要 8byte, 4k/8 = 512 = 2^9, 所以用9bit 當一個level (Page table 可以用1 page 存完)
    每個1st level 的addr mapping 最多只需一次page fault就可拿到

  3. 是因为地址位宽:x86是32bit=4B, 一页可存放4K/4B=1024条地址,即10bit;x86_64是64bit=8B, 一页可存4K/8B=512条,即9bit.
    另,x86已经采用5-level page table了。

  4. 关于X86_64使用9-9-9-9-12四级分页原因分析是,这样正好可以对应的页为4k、2M、1G,分别使用pte、pmd、pud。这样理解对不对?

  5. 9 BIT 能表示512个ENTRIES,4KB页面,刚好8个字节一个ENTRY,512个刚好4KB,ENTRY中放64位物理地址,当然里面可以有一些状态标志位。

  6. 这并不是必然的和固定的,Arm及Intel的Page管理技术,保护模式下只是为了更合理高校利用资源和数据隔离,从最初高效利用虚拟内存到内存碎片优化,线性-二级页表-三级页表-ept等等,都是为了目标而不断优化,隔离-高效访问/利用内存空间。

oenhan进行回复 取消回复