原创 職責鏈模式(C語言實現)

一. 概述 職責鏈模式: 使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。 二. 舉個例子 員工要求加薪 公司的管理者一共有三級:

原创 CPU綁定和CPU親和性

將進程/線程與cpu綁定,最直觀的好處就是提高了cpu cache的命中率,從而減少內存訪問損耗,提高程序的速度。我覺得在NUMA架構下,這個操作對系統運行速度的提升有較大的意義,而在SMP架構下,這個提升可能就比較小。這主要是因爲

原创 Docker 和一個正常的虛擬機有何區別?

問:  我多次重讀Docker.io文檔,希望搞明白Docker.io和一個完全的虛擬機的區別。Docker是如何做到提供一個完整的文件系統,獨立的網絡環境等等這些功能,同時還沒有如此龐大?  爲什麼部署軟件在一個docker

原创 KVM 內存虛擬化及其實現

概述 KVM(Kernel Virtual Machine) , 作爲開源的內核虛擬機,越來越受到 IBM,Redhat,HP,Intel 等各大公司的大力支持,基於 KVM 的開源虛擬化生態系統也日益完善。而實現 KVM 虛擬化,使

原创 qemu中daemonize爲什麼要兩次fork

      函數void os_daemonize(void) 將當前進程變成後臺進程即放棄終端。一開始不理解爲什麼要兩次fork,後來查網上資料得知,兩次fork是爲了防止第一個子進程打開終端。首次fork使父進程退出,子進程繼承了父進

原创 深入淺出Docker(一):Docker核心技術預覽

1. 背景 1.1. 由PaaS到Container 2013年2月,前Gluster的CEO Ben Golub和dotCloud的CEO Solomon Hykes坐在一起聊天時,Solomon談到想把dotCloud內部

原创 觀察者模式(C語言實現)

一. 概述 Observer 模式要解決的問題爲:建立一個一(Subject)對多(Observer)的依賴關係,並且做到當“一”變化的時候,依賴這個“一”的多也能夠同步改變。 Sbuject 相當於通知者,它提供依賴於它的觀察

原创 虛擬化原理

1、虛擬化概念(Virtualization) 虛擬化是值計算機元件在虛擬的基礎上運行,用邏輯表示資源,擺脫物理的限制。虛擬化在系統中加入一個虛擬化層,虛擬化層將下層資源封裝,抽象爲另一種形式的資源,提供給上層使用。虛擬化可以將一份資源抽

原创 QEMU ARM異常處理流程

precise exception必須考慮暫存器和內存,其中我理解的暫存器爲CPUState,在二進制翻譯中,我們關注的是guest的precise exception。因此必須確保當guest代碼發生異常時,guest的暫存器(CPU

原创 使用monitor command監控QEMU運行狀態

使用 monitor command 監控 QEMU 運行狀態 在虛擬化的研究領域,QEMU 有着舉足輕重的地位。2007 年 2 月發佈的 Linux 2.6.20 內核中,集成了 KVM 作爲其虛擬化的具體實現。而 KVM 是基於

原创 __thread關鍵字

     __thread是GCC內置的線程局部存儲設施,存取效率可以和全局變量相比。__thread變量每一個線程有一份獨立實體,各個線程的值互不干擾。可以用來修飾那些帶有全局性且值可能變,但是又不值得用全局變量保護的變量。  

原创 【虛擬化實戰】VM設計之一vCPU

作者:範軍 (Frank Fan) 新浪微博:@frankfan7 虛擬機需要多少個vCPU呢?是不是個數越多性能越好呢?這方面存在着很多誤區。給VM配置CPU資源的時候,要精打細算才能最大可能的利用已有資源,來滿足商業應用的需要。有

原创 C結構體之位域(位段)

有些信息在存儲時,並不需要佔用一個完整的字節, 而只需佔幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。爲了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱爲“位域”或“位段”。所謂“位域

原创 Docker創建MySQL容器

本文目的是創建一個MySQL的image,並且在新創建出來的容器裏自動啓動MySQL服務接受外部連接 步驟: 1. 首先創建一個目錄並在目錄下創建一個Dockerfile,文件內容如下 FROM centos:centos

原创 pid and lock files

pid files are written by some programs to record their process ID while they are starting. This has multiple purposes