首页
关于
Search
1
2023 年保研经验贴 [计算机-末九Rank50%-入北计清深-北计直博]
1,127 阅读
2
FreeBSD Kernel-编译环境搭建
434 阅读
3
Linux Kernel-THP阅读分析[Hang up]
424 阅读
4
Linux Kernel-编译调试环境搭建
335 阅读
5
Linux Kernel-源码阅读环境搭建
322 阅读
内核
源码分析
阅读笔记
Rust
语法
习题
读书笔记
深入理解计算机系统
论文
技术之外
开发
rcore-arm
登录
Search
yyi
累计撰写
49
篇文章
累计收到
2
条评论
首页
栏目
内核
源码分析
阅读笔记
Rust
语法
习题
读书笔记
深入理解计算机系统
论文
技术之外
开发
rcore-arm
页面
关于
搜索到
49
篇与
的结果
2024-09-25
sec19-ERIM: Secure, Efficient In-process Isolation with Protection Keys (MPK)
Insight面对在共享内存中隔离进程关键数据的需求,ERIM提供了一个利用Intel MPK机制来近乎零开销的隔离组件的机制。使用MPK比现有SoTA开销低3-13倍,但是MPK本身不安全,因为写PKRU寄存器是无权限控制的。ERIM提供了一个保护安全性的机制。Background这里要介绍一下MPK,MPK提供了16个保护键,每个页面都可以与其中一个关联。提供了一个每个核心独立的寄存器PKRU,PKRU决定了当前核心在每个域的访问权限。并且这种权限检查是无开销的。PKRU使用用户态命令WROKRU和XRSTOR两条指令,但是这两条指令本身并没有被很好的保护起来,ERIM提出的机制正是为了保护指令避免被恶意攻击使用。DesignERIM的前提是系统的一些基础保护,如NX、DEP等保护已经开启,并且可以访问核心区的代码必须是完全可信的。design principleERIM通过限定WRPKRU和XRSTOR的出现条件实现对指令的保护,其要求相关指令在执行后必须进入预定几个几个流程之一对于WRPKRU,要么进入预定的入口点,这样即使权限错误,也只会进入到可信的代码后续操作未访问隔离内存,并且会结束进程对于XRSTOR后续指令必须是一段检查eax寄存器的代码,因为如果eax没有被控制,PKRU不会被错误的设定call gateERIM为可信代码设计了预定的入口点,在入口点调整PKRU,并将控制流转交可信代码,在可信代码完成之后,再调整PKRU。调用门有所限制。binary inspection二进制扫描包含WRPKRU字节序列的页面是否安全,这需要提前获得指定的入口点列表。通过二进制扫描来确保是否符合给定条件。
2024年09月25日
21 阅读
0 评论
0 点赞
2024-09-25
OSDI14- Arrakis: The Operating System is the Control Plane
Wordsmediate v. 调节,斡旋negligible adj. 微不足道的Insight传统服务器通过内核协调进程隔离和网络、磁盘等IO设备的安全性,本文实现了一个操作系统,允许应用程序IO跳过内核。也就是所谓的控制平面和数据平面分离。Achievement一个典型NoSQL场景下的存储延迟优化了2-5倍,吞吐量提高了9倍提出了一种分工架构,并实现了一个原型操作系统,在此基础上测量了一部分现实服务的性能Breakdown Analysis从网络开始,传统Linux接受一个网络包的时间在微秒级别,通常是3us、6us两个时间级别,差别在于收包进程是否在idle,并且相差的开销以schedule带来的开销为主。而在3us中,主要的时间都浪费在了网络栈上。主要的开销集中于以下四点网络栈开销调度器开销内核切换开销数据包复制开销除此之外,多核导致的缓存和锁也会增加开销Arrakis可以完全消除调度器和内核切换的开销,并且极大的消除了网络栈和数据包复制的影响。同时文章分析了在存储侧系统调用带来的影响,以1KB为例,ext4的CPU开销大概要在30us级别,btrfs在70us级别,而RAID缓存的写延迟大概25us,闪存低至15us,这意味着文件系统带来的开销甚至要比硬件写入的开销更大。后续的阅读中我可能没再关注网络侧的内容,主要关注Storage,以及他们提出的这种硬件模型所提供的能力及用途。Design&Imp文章描述了一个基于一类特定的(主要是硬件级别支持虚拟化的)IO设备的架构。现有设备和控制器只能在某些方面实现他们提出的这种硬件模型。访问层级主要分为App、LibOS、VSIC、VSA和Device。App通过定制的UserSpace Lib来访问VSIC,即虚拟存储界面控制器,同时,硬件设备需要将物理段映射为多个虚拟存储区域VSA,VSA和VSIC是一个多对多的映射关系,VSIC由App创建。App通过API可以通过VSIC中的命令队列读取、写入VSA中任意偏移和大小的磁盘,完成使用doorbell通知。整个用户访问文件的流程不需要操作系统介入。那么问题就到了文件是如何共享和访问控制的。Arrakis分离了文件的命名和实现。App可以任意的通过VSA存储metadata和文件等内容。并可以将文件、目录名导出到vfs中,仍由原App管理,外部的访问不会被内核干预。外部访问可以通过RPC把原APP当做一个Server访问,或者源程序提供一个可以独立运行的进程。VSA也可以映射到多个进程中,此时访问APP需要能读到原APP的metadata,并能有适当的库解析文件内容。访问控制控制整个VSA是否可见。用户可以直接导出文件为标准格式。我感觉这三个方案都有点过于牵强了。
2024年09月25日
14 阅读
0 评论
0 点赞
2024-09-14
OSDI24-Nomad: Non-Exclusive Memory Tiering via Transactional Page Migration
Wordsadvent n. 出现accommodate v. 容纳、使适应;顾及;帮助;迎合;调解demonstrate v. 证明thrashing n. 击败, v. 抽打,这里应该是抖动的意思。 recency v. 新进,崭新。 facilitate v. 促进、推动Background分层内存系统效果比较好、现有方案通过页面迁移管理分层内存,把Hot数据放在快速内存、把溢出的Cold内存放在低速内存。在Fast memory under pressure时,性能下降很厉害,页面是独占的,即要么在快速内存,要么在慢速内存,通过迁移来交换。页面迁移总是会发生在程序的关键路径上。导致用户感知带宽降低。作者首先测试了TPP及其Baseline(不分级,完全使用慢速内存)的性能,证明了TPP发生迁移的时候会严重影响内存性能,在WSS过大时更加显著的拖慢性能。TPP认为慢速内存中的页面不可以访问,并在page fault时决定是否提升Novelty提出一种非独占的页面迁移机制,保留最近从慢内存迁移到快内存的副本,并使得迁移异步。换句话说,我认为这可能是用低速内存空间换页面迁移时间的方法。Achievement在抖动的前提下,达到SoTA的6倍性能,在不抖动时也相较于Memtis快130%.更进一步的描述成果:Hot数据 < 高速内存 : 预热时Nomad接近Memtis,优于TPP、稳定时Nomad与TPP相近(无论读写)Hot数据 = 高速内存: 预热时Nomad接近Memtis,优于TPP、稳定时Nomad显著超过TPP,但是写时可能会不如MemtisHot数据 > 高速内存:预热时Nomad虽然劣于Memtis,但是仍然可以超过TPP,稳定时读性能显著超过Nomad,写时不如MemtisDesign首先核心思想就是Novelty中所提到的那样,使得即使是在使用分层内存的前提下,也可以同时在高低速缓存中同时保存副本(也就是传统Cache“包含”的关系)整体设计思路还是比较清晰,在不破坏现有的页面迁移决策的基础上,异步的在可能得情况下对应该进行迁移的页面进行迁移。并且极大的缩短迁移时用户被页面错误阻断的时间。当页面downgrade时,由于低速内存保留了原来的副本,如果PTE显示页面未被dirty,则直接remap即可,不需要进行一次多余的Copy当页面upgrade时,系统仍然保留原有低速内存的页表,所以用户进程就可以直接访问低速内存,同时Copy页面到高速内存,如果拷贝过程中页面被dirty,直接放弃拷贝,直到某次拷贝成功,重新remap到高速内存,并仍然保留低速内存。也因此(我理解是类似于数据库事务,copy在dirty的情况下会被rollback,直到成功再提交)这个方法被他们称为Transactional Page Migration事务性页面迁移。
2024年09月14日
32 阅读
0 评论
0 点赞
2024-04-13
My Terminal
sudo apt install zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" curl -sS https://starship.rs/install.sh | sh git clone https://github.com/rupa/z.git $HOME/.oh-my-zsh/custom/plugins/z git clone https://github.com/zsh-users/zsh-autosuggestions $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting git clone https://github.com/MichaelAquilina/zsh-you-should-use $HOME/.oh-my-zsh/custom/plugins/zsh-you-should-use git clone https://github.com/zsh-users/zsh-history-substring-search $HOME/.oh-my-zsh/custom/plugins/zsh-history-substring-search plugins=(z git zsh-autosuggestions zsh-syntax-highlighting zsh-you-should-use zsh-history-substring-search)我的花里胡哨的Starship,基于Pastel Powerline Presetcommand_timeout = 1500 format = """ [](#9A348E)\ $os\ $username\ [](bg:#DA627D fg:#9A348E)\ $directory\ [](fg:#DA627D bg:#FFCCFF)\ $git_branch\ $git_status\ [](fg:#FFCCFF bg:#86BBD8)\ $c\ $elixir\ $elm\ $golang\ $gradle\ $haskell\ $java\ $julia\ $nodejs\ $nim\ $rust\ $scala\ [](fg:#86BBD8)\ $docker_context\ """ right_format = """ $cmd_duration\ [](fg:#86BBD8 bg:#33658A)\ $time\ [ ](fg:#33658A)\ """ # Disable the blank line at the start of the prompt # add_newline = false # You can also replace your username with a neat symbol like or disable this # and use the os module below [username] show_always = true style_user = "bg:#9A348E" style_root = "bg:#9A348E" format = '[$user ]($style)' disabled = false # An alternative to the username module which displays a symbol that # represents the current operating system [os] style = "bg:#9A348E" disabled = false # Disabled by default [directory] style = "bg:#DA627D" format = "[ $path ]($style)" truncation_length = 3 truncation_symbol = "…/" # Here is how you can shorten some long paths by text replacement # similar to mapped_locations in Oh My Posh: [directory.substitutions] "Documents" = " " "Downloads" = " " "Music" = " " "Pictures" = " " # Keep in mind that the order matters. For example: # "Important Documents" = " " # will not be replaced, because "Documents" was already substituted before. # So either put "Important Documents" before "Documents" or use the substituted version: # "Important " = " " [c] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [docker_context] symbol = " " style = "bg:#06969A" format = '[ $symbol $context ]($style)' [elixir] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [elm] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [git_branch] symbol = "" style = "#808080 bg:#FFCCFF" format = '[ $symbol $branch ]($style)' [git_status] style = "#808080 bg:#FFCCFF" format = '[$all_status$ahead_behind ]($style)' [golang] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [gradle] style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [haskell] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [java] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [julia] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [nodejs] symbol = "" style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [nim] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [rust] symbol = "" style = "#8B0000 bg:#86BBD8" format = '[ $symbol ]($style)' [scala] symbol = " " style = "bg:#86BBD8" format = '[ $symbol ($version) ]($style)' [time] disabled = false time_format = "%R" # Hour:Minute Format style = "bg:#33658A" format = '[ ♥ $time ]($style)'
2024年04月13日
173 阅读
0 评论
0 点赞
2024-04-07
Rustlings Solution
可以参见我的Repo: Github Repo
2024年04月07日
171 阅读
0 评论
0 点赞
1
2
...
10