2015-07-21 96 views
1

關於whole core to process,我想知道真正的好處。例如,我有多進程的Qt C++應用程序,比如7個進程,包括大量的科學計算和可視化。該應用程序運行在最新的Ubuntu和8核CPU(4個真實和4個虛擬)上。提示:幾乎所有的進程都是單線程的。 在這種情況下,將單個進程分配給專用內核會帶來任何性能優勢嗎?理想情況下,我會將所有進程分配給專用內核,但我有一個多線程進程並驅動一個設備。將核心分配給進程的好處

+2

措施,並告訴我們你發現了什麼? –

+0

請注意,您沒有「4個虛擬內核」。所有8個內核都是虛擬的,但每對虛擬內核共享一個物理內核。新的Linux內核知道這種區別,並在將線程分配給內核時考慮到這一點。 – MSalters

回答

0

調制解調器cpu不能以恆定速度運行。有很多因素,包括調度器的選擇(可能取決於CPU溫度和風扇噪聲),熱升壓/多級步進水平等等。理論上講,讓所有CPU核心「最大輸出」(因此無需升壓)並不意味着您正在完成更多的工作。它可能是,但你需要測量。

現在假設我們想「最大限度地」爲CPU綁定任務的所有CPU核心。現代的ubuntu有正常的調度程序來防止核心之間不必要的線程傳輸,這會導致各種開銷,包括跨CPU同步和TLB擊落。所以只要所有的線程都使用自己的核心,他們通常會堅持下去,除非調度器對CPU頻率進行調整。

TL; DR;系統通常有更好的想法來利用機器,讓調度程序做出決定,並且它通常會將你的cpu綁定線程粘到特定的內核上,除非有時間冷卻它。

要指定要處理的內核的時間是爲系統預留一個內核來執行I/O操作。

1

有一個好處,是的,但只有當您還將其他進程遠離您的專用內核。問題是你真的需要它,否則,你會覺得你的情況?
內核在爲核心分配進程方面並不錯,但它試圖平衡負載並且沒有意識到你的優先級,所以有時你必須強迫它的手。
好處是您的進程將受到緩存未命中和上下文切換的影響。但是如果你做了很多系統調用,比如說IO,你會有上下文切換,我不確定你會有多大的區別。
專用內核通常用於時間關鍵型線程,您不想被其他任何事情打斷。並且經常只在shm和/或非內核IO上進行通信。

0

在這種情況下,將單個進程分配給專用內核會帶來任何性能優勢嗎?

它可能會如果你的工作記憶集足夠小。假設每個內核都有專用的L1 32K D-和32K I-cache,然後按每個模塊(雙核)L2 256K D-和256K I-cache進行說明,然後共享6M L3緩存。

從核心轉移到核心意味着拋出緩存並將其重新加載到不同的核心上。如果給定的workind內存足夠小,這可能很重要。如果您在16GB內存集追三分球,很有可能你不會看到任何東西

但是你要衡量真正