原创 THE HASH

Abstract I offer you a new hash function for hash table lookup that is faster and more thorough than the one you are us

原创 簡析RCU機制

RCU(Read-Copy Update)是數據同步的一種方式,在當前的Linux內核中發揮着重要的作用。RCU主要針對的數據對象是鏈表,目的是提高遍歷讀取數據的效率,爲了達到目的使用RCU機制讀取數據的時候不對鏈表進行耗時的加鎖操作。這

原创 可以殺死的深度睡眠TASK_KILLABLE狀態

深度睡眠與淺度睡眠   衆所周知,Linux的進程睡眠有兩種常規狀態: TASK_INTERRUPTIBLE(淺度睡眠):可以被等待的資源喚醒,也能被signal喚醒; TASK_UNINTERRUPTIBLE(深度睡眠):可以被等

原创 JAVA 成神之路

http://www.hollischuang.com/   http://hollischuang.gitee.io/tobetopjavaer/#/menu   現在是做C的,幾年後能以C還是JAVA加入阿里了?

原创 SLUB DEBUG原理

1. 前言 在工作中,經常會遇到由於越界導致的各種奇怪的問題。爲什麼越界訪問導致的問題很奇怪呢?在工作差不多半年的時間裏我就遇到了很多越界訪問導致的問題(不得不吐槽下IC廠商提供的driver,總是隱藏着bug)。比如說越界訪問導致的死機

原创 Docker 背後的內核知識——Namespace 資源隔離

Docker 這麼火,喜歡技術的朋友可能也會想,如果要自己實現一個資源隔離的容器,應該從哪些方面下手呢?也許你第一反應可能就是 chroot 命令,這條命令給用戶最直觀的感覺就是使用後根目錄 / 的掛載點切換了,即文件系統被隔離了。然後,

原创 與程序員相關的CPU緩存知識

好久沒有寫一些微觀方面的文章了,今天寫一篇關於CPU Cache相關的文章,這篇文章比較長,主要分成這麼幾個部分:基礎知識、緩存的命中、緩存的一致性、相關的代碼示例和延伸閱讀。其中會講述一些多核 CPU 的系統架構以及其原理,包括對程序性

原创 開發內功修煉CPU篇

最近網絡在爆炒一篇標題爲《互聯網不需要中年人》,瘋狂渲染35歲的碼農的前程問題,製造焦慮。本來我覺得這個事情應該只是媒體博眼球的一個炒作而已。不過恰恰最近面試了有70多人,其中有很多工作7,8年以上的的同學。這些人裏基本上可以非常明確地劃

原创 多核Cache一致性 && 僞共享 && atomic的實現和cache相關的部分

經過這麼多篇文章的介紹,我們應該已經對Cache有一個比較清晰的認識。Cache會面臨哪些問題,我們該怎麼處理這些問題。現在我們討論多核Cache一致性問題。在摩爾定律不太適用的今天,人們試圖增加CPU核數以提升系統整體性能。這類系統稱之

原创 Cache和DMA一致性 && iCache和dCache一致性

DMA應該多多少少知道點吧。DMA(Direct Memory Access)是指在外接可以不用CPU干預,直接把數據傳輸到內存的技術。這個過程中可以把CPU解放出來,可以很好的提升系統性能。那麼DMA和Cache有什麼關係呢?這也需要我

原创 Cache的基本原理

對於沒有接觸過底層技術的朋友來說,或許從未聽說過cache。畢竟cache的存在對程序員來說是透明的。在接觸cache之前,先爲你準備段code分析。 int arr[10][128]; for (i = 0; i < 10; i++

原创 Linux用戶態進程的內存管理淺析

相信大家都知道對用戶態的內存消耗對象是進程,應用開發者面對的所有代碼操作最後的落腳點都是進程,這也是說爲什麼內存和進程兩個知識點的重要性,理解了內存和進程兩大法寶,對所有軟件開發的理解都會有了全局觀(關於進程的知識以後再整理和大家分享)。

原创 如何查看 Linux 服務器性能參數指標?

一個基於 Linux 操作系統的服務器運行的同時,也會表徵出各種各樣參數信息。通常來說運維人員、系統管理員會對這些數據會極爲敏感,但是這些參數對於開發者來說也十分重要,尤其當你的程序非正常工作的時候,這些蛛絲馬跡往往會幫助快速定位跟蹤問題

原创 TLB cache 原理

TLB是translation lookaside buffer的簡稱。首先,我們知道MMU的作用是把虛擬地址轉換成物理地址。虛擬地址和物理地址的映射關係存儲在頁表中,而現在頁表又是分級的。64位系統一般都是3~5級。常見的配置是4級頁表

原创 Linux鏈表list_head/hlist_head/hlist_nulls_head的併發性

我們被灌輸過各種高效複雜的數據結構,比如rb tree,skip list等等,但現實中,我們經常用各種List管理我們的數據,因爲它的操作非常簡單。 如果數據量小或者不太在乎時間,選擇list_head。 如果數據量大且對查找性能要求很