better handling of very large memory maps
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- rust
调研方向
从 src/main.rs 和 src/binary/level_4_entries.rs 中引用的代码开始,然后跟踪 bootloader 针对 BIOS 内存映射区域的 identity-mapping 逻辑。将已经检查过的改进与剩下的两个提案进行比较:避免空洞,以及排除高地址处不可用的保留区域。完成的标准是选择并实现一种安全的映射策略,且不会发生崩溃或产生不必要的启动时工作。
由索引模型根据 Issue 内容生成。
描述
Currently, the bootloader has some issues handling BIOS memory maps that contain very high addresses, such as around the 1TB mark, and/or very large regions (in excess of 500 GB). Depending on the bootloader version and configuration, memory maps with high addresses or large regions may result in crashes or degrade boot performance significantly.
In particular, the following issues have been observed:
- v0.9.x of
bootloadercontains an assertion that may be triggered when the memory map contains an address too big for a single PML4 entry if themap_physical_memoryfeature flag is enabled: https://github.com/rust-osdev/bootloader/blob/42da77b47558478c5a948d27cac80767b484eacc/src/main.rs#L289-L291 (see also phil-opp/blog_os#1138) - v0.10.x of
bootloaderdoesn't contain that assertion, but does have offset selection code that assumes no region will require multiple PML4 entries: https://github.com/rust-osdev/bootloader/blob/ac46d0455b41c11e5d316348d068df1c495ce0af/src/binary/level_4_entries.rs#L172-L174 - v0.10.x of
bootloaderexhibits very long boot times when a memory map contains a reserved region at a ~1TB offset. This is because the bootloader will identity map all pages up to the highest reserved address in the memory map using 4K pages, and does this twice (once for the bootloader itself, and a second time when setting up physical memory mappings for the kernel). This results in a very slow boot process.
These issues are relevant because AMD systems with an IOMMU have a reserved hole close to the 1TB mark. In recent QEMU versions (>= v7.1.0), QEMU will report this region as reserved in its e380 BIOS memory map, resulting in assertion failures or boot performance degradation. I would assume this would cause issues when booting on real AMD hardware, as well.
Some changes that would improve how bootloader handles high addresses in the memory map (many of which were suggested by @phil-opp on Gitter):
- Change the automatic offset selection to support regions that need multiple entries in the level 4 page table (v0.9.x, v0.10.x, and probably v0.11.x)
- Don't identity map reserved regions at all when performing the initial identity mapping for the bootloader itself (v0.10.x and probably v0.11.x)
- The framebuffer would still need to be identity mapped so that the bootloader can write to it.
- Use 2MB rather than 4KB pages when identity mapping the kernel address space, which would improve performance (v0.10.x and v0.11.x)
- Consider not identity mapping holes in the memory map at all, only the reserved regions that would need to be mapped for the kernel. This way, we wouldn't map every page between the second-highest reserved region and the 1TB hole on AMD systems.
- Consider not identity mapping that specific reserved region, at all. It's an unusable hole, not a MMIO region or BIOS structure that the kernel would actually want to access...
- 主要语言
- Rust
- 星标
- 1.7k
- 派生
- 240
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rust-osdev/bootloader 的其他 Issue
-
help wanted
难度 3/5 1-2 天 新手友好度 67/100
rust-osdev/bootloader#581 · 2 条评论 ·
-
难度 4/5 3-5 天 新手友好度 35/100
rust-osdev/bootloader#573 · 5 条评论 ·
-
难度 5/5 一周以上 新手友好度 20/100
rust-osdev/bootloader#555 · 2 条评论 ·
-
难度 5/5 一周以上 新手友好度 30/100
rust-osdev/bootloader#534 ·
-
难度 3/5 1-2 天 新手友好度 38/100
rust-osdev/bootloader#525 ·
查看 rust-osdev/bootloader 的全部 Issue
相似的 Issue
-
`categorize_command` has no `uv` arm, so every `rtk uv …` row counts as `other` in the ecosystem mix未关闭area:api bug good first issue priority:low
难度 1/5 1 小时以内 新手友好度 92/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 92/100
维护者通常 1 天内回复
-
area/cli kind/bug
难度 2/5 1-3 小时 新手友好度 90/100
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 72/100
-
good first issue open-endedness: low type: new feature
难度 2/5 1-3 小时 新手友好度 72/100