温度感知的调度算法研究与实现
发布时间:2020-09-22 20:03
随着目前处理器功耗的增大,芯片的性能遇到了瓶颈。过高的温度降低了处理器的性能、可靠性和寿命。现代处理器用调节电压和降低频率作为缓解功耗与温度问题的首选措施。但是这些措施有着开销大、不灵活等缺点。从软件的观点看,操作系统的调度策略能够更有效地降低处理器的功耗。 国际上对于温度感知的软件调度的研究方法归结起来有基于硬件性能计数器的和基于传感器的。前者通过采集CPU内部的性能计数器来推算出处理器当前的功耗以及温度,进而决定如何调度。后者则直接从传感器读取温度来作出调度的决策。两种方法可以互相结合起来使用。 本文提出了温度感知的多核处理器调度算法,主要利用了读取传感器的方法。包括轮转调度算法和基于门限温度的调度算法。这两个调度算法都在Linux内核中进行了实现。轮转调度算法均匀地让多个任务在两个核上轮流执行,以达到平衡多核处理器的温度,降低极端温度的效果。基于门限温度的调度算法把热的进程从一个超过门限的处理器核上迁移到相对较冷的处理器核上去,达到降低极端温度的效果。实验表明,新开发的调度算法有效地降低了处理器的温度,弥补了Linux原有的调度程序在温度管理方面的不足。新的调度算法在延迟和吞吐量的损失上并不明显。
【学位单位】:上海交通大学
【学位级别】:硕士
【学位年份】:2009
【中图分类】:TP332
【部分图文】:
图 3 优先级数组结构Fig.3 Structure of Priority Arra序器的主要函数。他的任务是从运行队分配给这个进程。schedule()中,当前被调度上来的进程表示为 next。列有没有就绪的进程。如果没有,同一个调度域中的其他运行队列上然没有就绪进程在当前运行队列上进行进程切换(直接跳到步骤 5)。组上有无进程。如果没有,就将两个
则可使得该处理器的温度有所下降。下面将先提出内核中少量进程的迁移算法,然后具体阐述新设计的两个调度算法。5.1 少量进程的迁移算法5.1.1 单进程的迁移设计与实现在 Linux 的负载平衡程序中,进程的迁移可以通过 pull_task()函数来实现。该函数把进程从给定优先级数组中删除,然后重新插入到另一个目的优先级数组中。但是如果需要迁移的进程正在执行,则不能简单调用 pull_task()函数。需要先把该进程从 CPU 上切换下来,然后实施进程的迁移。假设在系统上除了后台系统进程之外,只运行有一个进程。那么可以把单进程的迁移设计为:当两个核的温度不同时,把进程从温度较高的核迁移到温度较低的核上。那么迁移一个热的进程 (比如将其命名为 hot task)需要三个步骤,如图 6 所示。
可以避免进程在双核处理器上的频繁的来回迁移。最后需要把 swap_state 重新置为 0,表示迁移完毕。(7) 由于 issue_migration()函数访问了运行队列等全局的数据结构,为了防止并发访问,必须加上两个运行队列的锁。这可以通过调用如下代码来实现。double_rq_lock(rq0, rq1); /*对两个队列加锁*/issue_migration();double_rq_unlock(rq0, rq1); /*释放两个队列的锁*/5.1.2 双进程的互换设计与实现和单进程的迁移设计一样,双进程的互换设计也是建立在把当前进程切换下来,然后再实施进程迁移的基础上。假设系统上除了后台进程,只有两个进程在运行。两个进程运行过程中释放的热量不一样,分别设定为 hot 进程和 cool 进程。和单个进程一样,两个进程的互换也需要三个步骤,如图 7 所示。
本文编号:2824857
【学位单位】:上海交通大学
【学位级别】:硕士
【学位年份】:2009
【中图分类】:TP332
【部分图文】:
图 3 优先级数组结构Fig.3 Structure of Priority Arra序器的主要函数。他的任务是从运行队分配给这个进程。schedule()中,当前被调度上来的进程表示为 next。列有没有就绪的进程。如果没有,同一个调度域中的其他运行队列上然没有就绪进程在当前运行队列上进行进程切换(直接跳到步骤 5)。组上有无进程。如果没有,就将两个
则可使得该处理器的温度有所下降。下面将先提出内核中少量进程的迁移算法,然后具体阐述新设计的两个调度算法。5.1 少量进程的迁移算法5.1.1 单进程的迁移设计与实现在 Linux 的负载平衡程序中,进程的迁移可以通过 pull_task()函数来实现。该函数把进程从给定优先级数组中删除,然后重新插入到另一个目的优先级数组中。但是如果需要迁移的进程正在执行,则不能简单调用 pull_task()函数。需要先把该进程从 CPU 上切换下来,然后实施进程的迁移。假设在系统上除了后台系统进程之外,只运行有一个进程。那么可以把单进程的迁移设计为:当两个核的温度不同时,把进程从温度较高的核迁移到温度较低的核上。那么迁移一个热的进程 (比如将其命名为 hot task)需要三个步骤,如图 6 所示。
可以避免进程在双核处理器上的频繁的来回迁移。最后需要把 swap_state 重新置为 0,表示迁移完毕。(7) 由于 issue_migration()函数访问了运行队列等全局的数据结构,为了防止并发访问,必须加上两个运行队列的锁。这可以通过调用如下代码来实现。double_rq_lock(rq0, rq1); /*对两个队列加锁*/issue_migration();double_rq_unlock(rq0, rq1); /*释放两个队列的锁*/5.1.2 双进程的互换设计与实现和单进程的迁移设计一样,双进程的互换设计也是建立在把当前进程切换下来,然后再实施进程迁移的基础上。假设系统上除了后台进程,只有两个进程在运行。两个进程运行过程中释放的热量不一样,分别设定为 hot 进程和 cool 进程。和单个进程一样,两个进程的互换也需要三个步骤,如图 7 所示。
【引证文献】
相关硕士学位论文 前2条
1 尹晓静;面向众核温度感知的Linux调度器的研究与实现[D];上海交通大学;2011年
2 叶经纬;基于多核温度感知的Linux进程调度器研究与实现[D];上海交通大学;2010年
本文编号:2824857
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/2824857.html