暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

闩(latch)

原创 贾勇智 2020-04-15
900

简介
对于对称多处理机系统,在同一时间点,所有CPU都可以请求修改同一内存。在理想状态下,“请求”“更改”操作是由单个CPU独立完成的,而不会被拆分成多个时间片处理。在特殊情况下,“请求""更改”操作将被拆分成多个时间片处理,这时操作系统就会使用上下文结构来保护内存数据的完整性。
Oracle闩(Latch)的作用与上下文类似,主要是用于保护Oracle内存结构被独占访问、修改,以防止非法的内存数据篡改,保证内存数据的完整性。
Latch Level
范围0~16
用于调度保护内存结构,缓解修改内存结构时产生的Latch争用。
Latch获取模式
自旋(spin):spin表示自旋,即当Latch被某个Process独占时,另外一个Process也想获取该Latch,由于独占特性使用得另一个Process处于Spin状态:自旋等待。Latch Spin阈值由参数spin_count决定。
休眠(sleep):当Process Spin等待达到Spin_count阈值时,Process就会放弃获取Latch资源,进入短暂的休眠状态。当Latch资源被释放后,系统将唤醒(Wake-Up)该Process继续获取该Latch。
上下文切换(Context Switch):对于多任务处理系统而言,CPU需要处理所有的程序操作。当用户进程来回切换程序时,需要记录主些进程执行的状态信息。上下文切换记录、恢复处于正在运行状态的程序,保证程序间能够顺利完成上下文切换操作。
在上下文切换过程中,CPU会停止处理当前处理的程序,并保存当前程序的运行状态信息以便后续断点支行。在操作系统中,上下语切换过程中的“页码”信息保存在进程控制块(PCB)中。
上下文切换发生场景:
中断处理
多任务处理
用户状态切换
在中断处理中,其他程序“打断”了当前正在运行的程序,当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换
在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换
对一些特殊的操作系统,当进行用户状态切换时也会进行一次上下文切换。

Latch获取的两种模式:
1.No-Wait模式
No-Wait模式适用场景:当Process请求获取Latch时,Latch资源池中有空闲的Latch资源。在这种模式下,获取Latch的主要步骤如下:
1)Oracle Process尝试获取一个Latch,这个过程不需要Spin和Sleep
2)更新CPU上下文内容,实现上下文切换
3)当请求获取的Latch没有被其他Process占有(FREE)时,那么就可以立即获取到该Latch
4)当获取的Latch已经被其他进程抢占了(Busy),那么就要搜索下一个空闲的Latch,直到找到符合步骤3)Latch。
2.Willing-To-Wait
Willing-To-Wait模式适用场景:当Process请求获取Latch时,Latch资源池中没有空闲的Latch资源,在这种情况下,需要使用Willing-To-Wait模式获取Latch资源。Willing-To-Wait模式分为两种获取类别:
Immediate Get:一次快速获,不需要Spin
Spin Get:需要Spin等待
当Latch获取失败后,将会不断地重试获取,Spin或者Sleep等待。
在等待Latch释放的过程中,处于Spin或者Sleep状态
在未达到spin_count阈值前,等待时间累积增加
在达到spin_count阈值时,如果仍然没获取到Latch,则会记录Latch Miss信息。在这种情况下,需要人为干预进行优化调节。
Latch获取等待命中率
当Latch获取等待超过阈值后,就会将Latch Miss记录到系统统计信息中因此需要关注Latch获取等待的命中率。
一般而言,如果Spin获取命中率超过90%,那么Latch获取就是比较优化的。同时也要关注Latch获取等待休眠率。

Latch资源的清理回收
当Latch资源被释放或者在Latch持有时系统发生异常,Oracle将会对Latch资源进行清理回收:
正常情况下,Latch调用自己特有的清理方法完成Latch资源清理回收
在异常的情况下,如果Process在获取Latch过程中由于某些原因“死掉”,那么受到该Latch保护的内存结构可能会出现异常,这时PMON进程会介入,进行清理操作
PMON清理操作将恢复异常状态的内存结构
当清理操作结束后,PMON释放Latch资源供其他Proces获取

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论