- 主题:CPU能否为操作系统优化呢?
微内核增加了额外的ipc开销,ipc需要context switch
【 在 bihai 的大作中提到: 】
:
: 具体就是,微内核到底慢在哪里?能否优化CPU使得微内核不在那里慢?
:
: 【 在 Xaoyao 的大作中提到: 】
: : 不明白你是什么意思
#发自zSMTH@NOP-AN00
--
FROM 116.224.249.*
是多余的ipc和context switch,多了的东西,优化不掉,优化掉就是宏内核了,那还折腾什么。
至于慢不慢,context switch是不可能比乘法指令快的。宏内核的内核也是跑在多个核上的,跑在一个核上岂不是更慢?
【 在 bihai 的大作中提到: 】
: 我现在的理解是context switch很慢。比如一个进程调用一个功能,如果是宏内核,就是一个调用,几个时钟。如果是进程,据说是50-80个时钟。
:
: 可不可以多个CPU核心,有一个专门负责这个功能的。但是如果有多个客户来调用,那还是得等,比同一个CPU核心进行context switch还慢。
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
操作系统的context和cpu线程没啥关系吧,又不是只关联几个通用寄存器和PC。再说了,一个核一个线程还不跑了?
【 在 hgoldfish 的大作中提到: 】
: CPU 内部的超线程就是 context switch,内部有多套寄存器相互切换。如果 CPU 能够把这个功能暴露出来给操作系统,而不是由 CPU 自动切换,那么你说的加速就有了。
:
: 【 在 bihai 的大作中提到: 】
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
wild的想法,你看来要把线程context保存在芯片里面了,那还要不要超标量乱序执行了,流水线状态也一起保存吗?那你准备支持几个线程呢,准备为此还有调度逻辑等花费多少面积,这cpu能跑到多高频率?如果保存到ram里面?那好了,我们就差不多回到了软件context switch了。
再者,为了context信息已经花费这么多了,干嘛还要运行和暂停,一直并行运行不好吗,那这不就是现在cpu的多线程嘛。
【 在 hgoldfish 的大作中提到: 】
: 如果暴露出来当然得改 CPU 设计了。
:
: 按我说的设计的话,CPU 在操作系统看来会有无限多个核心。所谓调度线程,在操作系统看来,不过是把一个 CPU 核心标志为运行和暂停,不用保存寄存器,每次切换都可以省下大量的 CPU 时钟周期。
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
有什么特别之处吗,这不就是现在普遍的多线程吗?
【 在 rockyzhang 的大作中提到: 】
: MIPS Multi-threading extention
: 【 在 yangtou 的大作中提到: 】
: : wild的想法,你看来要把线程context保存在芯片里面了,那还要不要超标量乱序执行了,流水线状态也一起保存吗?那你准备支持几个线程呢,准备为此还有调度逻辑等花费多少面积,这cpu能跑到多高频率?如果保存到ram里面?那好了,我们就差不多回到了软件context switch了。
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
你把操作系统调度那么复杂的逻辑放在芯片里面,你觉得你能把芯片做多大(小),能跑多高频率?当年可是指令集都要用risc,x86内部仅仅把指令集翻译成类risc就费多大力了。。
【 在 hgoldfish 的大作中提到: 】
: 没错啊。CPU 直接模拟成无限核心。操作系统只管往 CPU 里面调度线程。
:
: 但是线程碰到文件 IO,或者两个线程进入临界区,它得暂停线程的执行,这也没错。这时候操作系统给 CPU 一个特别的指令什么的暂停执行,检测某个寄存器位才继续。
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
每个thread当然要有自己的context,但是这些只是cpu的或者hardware context,而不是操作系统的context。至于那些指令,估计只是名字吓人,并不是和os的那些功能对应的替代。我猜测就是一些对粗粒度多线程的优化而已,仍然没有超出现在普通cpu的多线程概念。我对此了解不多,猜测大胆了一点。
【 在 rockyzhang 的大作中提到: 】
: 每个thread有自己的context
: 有fork/yield指令
: 可以wait到I/O semaphore,让出pipeline
: ...................
--来自微微水木3.5.12
--
FROM 116.224.249.*
不管粗粒度/细粒度/同时多线程,都是普通的多线程cpu,数量是有限的只有几个。可不是楼上那个把os线程放硬件里面。
【 在 rockyzhang 的大作中提到: 】
: context是在CPU一组硬件的GPR,这样可以进行硬件的调度,MIPS之前可以支持9组
: 这个名字就叫Fine-Grianed HW Multi-thrading
:
--
FROM 116.224.249.*
我不是做硬件的,我理解寄存器组是应该是非常昂贵东西,要做的快又做的大又那么多是很难的。再比如对于超标量+OOO乱序处理的cpu,加上CMT/HT是件非常“自然“”简单“的事情,因为功能单元/寄存器窗口/OOO算法已经在那儿了,CAAQA好像把SMT成为利用多线程发掘IPC。如你所说的加上大量context应该不会是很简单事情了。
现在有细粒度/粗粒度线程,有SMT,但是线程数量都是很有限的,里面的context也都只是一些GPR而已。intel的HT每个核心就俩线程,power6的SMT也是。细粒度/粗粒度线程每个核心更多一些,以前了解的sun T1 T2有4线程。T1这种是没有OOO的,单线程性能都非常悲剧。
再者,没听说哪些操作系统会利用处理器的线程context来实现操作系统的线程调度,只是把他们作为普通的cpu核/线程来处理。
【 在 hgoldfish 的大作中提到: 】
: 这种类型的指令不过是让 CPU 处理器换个寄存器组而已。不用多少晶体管。
: 我猜没什么人做的原因是因为需要操作系统支持。和现有的操作系统不搭,没什么人用。
:
--
FROM 116.224.249.*
既然你提到了寄存器重命名,我就不强调超标量乱序处理器了,但是我仍然不同意你说它不昂贵。
简单点说,你的想法类似可参考粗粒度多线程的sun t1/ 2,看看这些处理器的性能多么惨,这还是只有4个线程,更多的线程可能意味着更惨的单线程性能。
【 在 hgoldfish @ [CSArch] 的大作中提到: 】
:
: 那东东不值钱。现在的 CPU 本来就搞寄存器重命名。又不是让这些寄存器同时参与运算。运算单元和调度单元仍然只有一套。
:
: 【 在 yangtou 的大作中提到: 】
: : 我不是做硬件的,我理解寄存器组是应该是非常昂贵东西,要做的快又做的大又那么多是很难的。再比如对于超标量+OOO乱序处理的cpu,加上CMT/HT是件非常“自然“”简单“的事情,因为功能单元/寄存器窗口/OOO算法已经在那儿了,CAAQA好像把SMT成为利用多线程发掘IPC。如你所说的
#发自zSMTH@NOP-AN00
--
FROM 117.143.125.*