3 个不稳定版本
0.1.1 | 2020年2月22日 |
---|---|
0.1.0 | 2019年12月29日 |
0.0.0 | 2019年12月27日 |
#6 in #优化
每月下载 86 次
在 5 个 crate 中使用 (通过 cuneiform-fields)
16KB
198 行
此 crate 提供进程宏属性,以改进内存数据访问时间。
Cuneiform 的主要宏可以在属性位置接受各种参数
hermetic = true|false
(默认为true
当#[cuneiform]
)- Hermetic 允许 cuneiform 从具有 API 以获取的系统检测缓存大小。
- 目前,hermetic 参数仅适用于 Linux 内核 2.6.32 及以上版本。
- 如果系统与支持的系统不同,则回退到
slab
。
slab = "board_or_architecture_name
(例如#[cuneiform(slab = "powerpc_mpc8xx")]
)- Slabs 是嵌入式系统板或其他特定架构。
- Slab 检查有两个阶段
- 首先,它会检查给定的板/架构是否存在。
- 如果不存在,slab 将回退到 Rust 支持的架构。
- 如果仍未检测到架构,它将回退到默认值。
force = u8
(例如#[cuneiform(force = 16)]
)- 强制给定缓存对齐。覆盖上述所有其他系统。
[dependencies]
cuneiform = "0.1"
示例
基本使用可以
// Defaults to `hermetic = true`
#[cuneiform]
pub struct Varying {
data: u8,
data_2: u16,
}
针对特定架构
#[cuneiform(slab = "powerpc_mpc8xx")]
pub struct SlabBased {
data: u8,
data_2: u16,
}
覆盖默认缓存对齐
#[cuneiform(force = 16)]
pub struct Forced {
data: u8,
data_2: u16,
}
字段级缓存优化
查看cuneiform-fields以获取字段级别的优化。
设计选择
- Cuneiform没有特定的指令或架构特定代码。
- 与如
#![no_std]
这样的crates兼容。简化您的缓存优化痛苦。有了分配器,您还可以在板上编译。 - 不基于假设。基于Linux树、操作系统检查、提供者手册和相关文档。
在提交PR之前
- 如果是big.LITTLE架构,在slabs中将两部分分开。应用命名约定。
- 在提交PR之前检查现有的slabs。请在添加时更新它。
- 如果您提出了无指令检测的密封对齐。请确保包含测试且不会破坏现有平台。
现有Slabs
- powerpc_mpc8xx
- powerpc64bridge
- powerpc_e500mc
- power_7
- power_8
- power_9
- exynos_big
- exynos_LITTLE
- krait
- neoverse_n1
依赖项
~1.3–9MB
~78K SLoC