首页 > 其他分享 >CPU调度器实现提示:针对特定体系结构代码【ChatGPT】

CPU调度器实现提示:针对特定体系结构代码【ChatGPT】

时间:2023-12-11 20:12:59浏览次数:29  
标签:调用 resched switch need ChatGPT CPU 体系结构

《CPU调度器实现提示:针对特定体系结构代码》

Nick Piggin,2005

上下文切换

  1. 运行队列锁定 默认情况下,调用switch_to体系结构函数时会锁定运行队列。除非switch_to需要获取运行队列锁,否则通常不会出现问题。这通常是由上下文切换中的唤醒操作引起的。请参阅arch/ia64/include/asm/switch_to.h以获取示例。

要求调度器在运行队列未锁定的情况下调用switch_to,您必须在头文件中(通常是定义switch_to的文件)使用#define __ARCH_WANT_UNLOCKED_CTXSW。

在CONFIG_SMP情况下,无锁上下文切换对核心调度器实现只会引入非常小的性能损失。

CPU空闲

您的cpu_idle例程需要遵守以下规则:

  1. 抢占现在应该在空闲例程中禁用。只有在调用schedule()时才应启用,然后再次禁用。

  2. need_resched/TIF_NEED_RESCHED只会被设置,直到运行任务调用schedule()之前永远不会被清除。空闲线程只需要查询need_resched,可能永远不会设置或清除它。

  3. 当cpu_idle发现(need_resched() == 'true')时,应调用schedule()。否则不应调用schedule()。

  4. 检查need_resched时唯一需要禁用中断的情况是,如果我们将处理器置于休眠状态直到下一个中断(这不提供对need_resched的保护,而是防止丢失中断):

    4a. 这种类型的休眠常见问题似乎是:

    local_irq_disable();
    if (!need_resched()) {
    		local_irq_enable();
    		*** resched interrupt arrives here ***
    		__asm__("sleep until next interrupt");
    }
    
  5. TIF_POLLING_NRFLAG可以由不需要中断唤醒的空闲例程设置,当need_resched变为高时。换句话说,它们必须定期轮询need_resched,尽管可能合理地进行一些后台工作或进入低CPU优先级。

    5a. 如果设置了TIF_POLLING_NRFLAG,并且我们决定进入中断休眠,那么需要清除它,然后发出内存屏障(随后需要禁用中断进行need_resched的测试,如第3点所述)。

arch/x86/kernel/process.c中有轮询和休眠空闲函数的示例。

可能的体系结构问题

我发现的可能的体系结构问题(尝试修复或未修复):

ia64 - safe_halt调用与中断存在竞争条件吗?(它会休眠吗?)(见#4a)

sparc - 此时是否开启IRQ?将local_irq_save更改为_disable。

    TODO:需要辅助CPU来禁用抢占(见#1)

标签:调用,resched,switch,need,ChatGPT,CPU,体系结构
From: https://www.cnblogs.com/pengdonglin137/p/17895445.html

相关文章

  • Overlay Filesystem 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/overlayfs.html#overlay-filesystemOverlayFilesystem本文档描述了在Linux中提供叠加文件系统功能的新方法的原型(有时称为联合文件系统)。叠加文件系统试图呈现一个文件系统,该文件系统是在另一个文件系统之上叠加而成的结果......
  • 早期用户空间支持 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/early-userspace/early_userspace_support.html#early-userspace-support早期用户空间(Earlyuserspace)是一组库和程序,提供了在Linux内核启动过程中非常重要的功能,但不需要在内核本身内运行的功能。它包括几个主要的基础组......
  • 用户空间 I/O HOWTO【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/uio-howto.html#the-userspace-i-o-howto用户空间I/OHOWTO作者Hans-JürgenKochLinux开发者,Linutronix日期2006-12-11关于本文档翻译如果您知道本文档的任何翻译,或者有兴趣翻译它,请发送电子邮件至hjk@hansjkoch.......
  • relay interface (formerly relayfs) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/relay.html#relay-interface-formerly-relayfsRelayInterface(formerlyrelayfs)介绍Relay接口提供了一种方式,让内核应用能够通过用户定义的“中继通道”高效地将大量数据从内核传输到用户空间。一个“中继通道”是一种......
  • TEE subsystem 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/staging/tee.html#tee-subsystem这篇文档介绍了Linux中的TEE(可信执行环境)子系统。TEE是在一些安全环境中运行的受信任操作系统,例如ARMCPU上的TrustZone,或者一个单独的安全协处理器等。TEE驱动程序处理与TEE通信所需的细节。......
  • DMAengine controller documentation 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/dmaengine/provider.html#dmaengine-controller-documentationDMA引擎控制器文档硬件介绍大多数从DMA控制器都具有相同的操作原则。它们具有一定数量的通道用于DMA传输,并具有一定数量的请求线。请求和通道基本上是正交的......
  • GPIO子系统驱动程序 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/gpio/drivers-on-gpio.htmlGPIO子系统驱动程序在Linux内核中,有许多标准的GPIO任务的驱动程序,它们提供了适当的内核空间和用户空间的API/ABI,并且可以通过硬件描述(如设备树或ACPI)与其他内核子系统轻松连接:leds-gpio:driver......
  • GPIO映射 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/gpio/board.htmlGPIO映射本文档解释了如何将GPIO分配给特定的设备和功能。请注意,这仅适用于基于新描述符的接口。有关已弃用的基于整数的GPIO接口的描述,请参阅“LegacyGPIOInterfaces”(实际上,使用旧接口无法进行真正的映......
  • GPIO 驱动接口 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/gpio/driver.htmlGPIO驱动接口这份文档是GPIO芯片驱动程序编写者的指南。每个GPIO控制器驱动程序都需要包含以下头文件,该头文件定义了用于定义GPIO驱动程序的结构:#include<linux/gpio/driver.h>GPIO的内部表示......
  • GPIO描述符消费者接口 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/gpio/consumer.htmlGPIO描述符消费者接口本文档描述了GPIO框架的消费者接口。请注意,它描述了新的基于描述符的接口。有关已弃用的基于整数的GPIO接口的描述,请参阅“LegacyGPIOInterfaces”。GPIO消费者的指南不能在没有......