天天看點

速寫幾點linux方面的感悟

晚飯後看了remap_file_pages,這個函數主要就是将一個檔案的任何位置映射進任何一個vma(稍微有點限制)的任何地方,man手冊上說的很清楚:

The remap_file_pages() system call is used to create a non-linear mapping, that is, a mapping in which the pages of the file are mapped into a non-sequential order in memory. The advantage of using remap_file_pages() over using repeated calls to mmap(2) is that the former approach does not require the kernel to create additional VMA (Virtual Memory Area) data structures. To create a non-linear mapping we perform the following steps:

1. Use mmap() to create a mapping (which is initially linear). This mapping must be created with the MAP_SHARED flag.

2. Use one or more calls to remap_file_pages() to rearrange the correspondence between the pages of the mapping and the pages of the file. It is possible to map the same page of a file into multiple locations within the mapped region.

是的,節省了vma,這又是一種複用,vma的複用,實際上應該是vma的重用,檔案和vma之間明顯看出了兩個層次,文檔上說這是非線性映射,實際上我覺得這個說法不對,有啥非線性的,難道檔案映射就一定要是線性的嗎?檔案就一定要在vma中保持檔案中的順序嗎?我覺得不必非得這樣,既然映射了,vma接口就不應該知道檔案的任何資訊,我認為檔案在vma的線性的映射僅僅是為了高效而又友善罷了,按照理論沒有必要這樣的。我們在缺頁中斷中可以看到,為了這一種所謂的非線性映射,特意保持了一個獨立的缺頁函數,而且核心中為這個機制提供了一個半複雜的操作,其中就包括我在很早以前寫的一篇文章《關于pgoff_to_pte宏》,理論上沒有必要這麼複雜,但是linux确實總是靠這種美中不足做到了高效。

昨晚本來想寫一篇關于指令級并行的文章的,可是看書太久了,完了一看表就十二點多了,結果還是将思想吞咽到了肚子裡,早上醒來什麼都忘了,郁悶啊,不過還是寫幾筆。馮諾依曼機器上的程式本質上就是串行的,指令的執行順序具有偏序性,并且在動态上唯一的由pc寄存器決定,即使指令并行了,最終還是要将這些并行的結果串行起來的,最終必然有一個瓶頸,指令級的并行就好像兩頭尖中間大的通道,指令級并行度越高,中間越大,然而兩頭卻永遠都不會變大,于是想提高處理器性能必須設定多個馮諾依曼式的串行執行緒,這就是線程級的并行,于是就有了超線程式的cpu,當然在非IA架構上可能不叫超線程。

處理器當然性能越高越好,超線程隻是處理器發展的一條線罷了,可惜這條線最終被證明是一條死胡同,以前根本就沒有什麼多cpu的概念,在單cpu中,通過一橫一縱兩個線索提高cpu性能,一橫就是超标量,一縱就是超流水線,其實這是很顯然的,要想使覆寫體積大,就必須在多個次元拉伸,記住V=l*w*h,流水線技術是個古老的技術,在晶片技術上,越細的流水線使得每一級開閉的電路越少進而實作簡單,這樣就提高了cpu的頻率,指令執行的吞吐率增加了,在橫向上,超标量技術使得一個時鐘周期可以發射多條指令,注意這些指令還是一個線程的,因為其寄存器上下文是一緻的,後來才有了超标量這個線程級的并行,至此,一個單獨的實體晶片的性能已經發展到了極限,于是便有了多處理器技術,大緻分為SMP和CMT,後者占了上風,這個事導緻了超線程其實隻是一個過渡技術和過度産品,多個cpu核心比多個邏輯cpu可以更好的共享緩存,但是趣卻不用由于共享執行邏輯而導緻頻繁沖突。cmt要求程式按照并行的方式進行開發,昨晚看新技術有“幫手線程”和“線程級猜測”,都是很吸引人的技術,可是老婆又在催着睡了,唉..

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273954

繼續閱讀