0%

有鑑於之前有誤打誤撞不小心看完 ceph 整個底層 networking 實作的程式碼,就順便學習了一下 RDMA 這個概念,因此在這邊分享我所學習到關於 RDMA 的認知。
這系列文章主要會分成兩篇來講述,第一篇比較偏向科普的方式來介紹 RDMA,而第二篇則是會比較偏向程式設計師的角度,瞭解 RDMA 與傳統的 BSD Socket API 的差異。

Read more »

相信不少開始學習 SDN 的人一定都有聽過 mininet 這套軟體,甚至大量使用過。
之前於 Mininet 運作原理 有分析過 mininet 的原始碼,並瞭解其運作原理。
而今天這篇文章要講述的是如何透過 ip 指令配上 OpenvSwitch 在自己的系統上建造出一個類似 mininet 的環境。

Read more »

This page is used to record tips mentioned inHow to Stop Worrying and Start Living

Fundamental Facts You Shoukld Know About Worry

Rule 1

If you want to avoid worry, do what Sir William Osler did: live in “DAY-TIGHT COMPARTMENTS”.
Don’t stew about the future, just live each day until bedtime.

Rule 2

Try the magic formula of Willis H. Carrier:

  • Ask yourself, “What is the worst that can possibly happen if I can’t solve my problem?”
  • Prepare yourself mentally to accept the worst - if necessary.
  • The calmly try to improve upon the worst - which you have already mentally agreed to accept.

Rule 3

Remind yourself of the exorbitant price you can pay for worry in terms of your health. “Those who do not know how to fight worry die young”

Read more »

之前曾經發過一篇文章LXR Server With Multiple Projects,主要介紹如何在 Ubuntu 上面安裝 lxr 並且支援多個 projects。由於整個 lxr 的安裝過程複雜,除了本體外還牽扯到不少第三方程式套件,如 perl, database, www server,且大部份都是安裝完畢後就再也不會更動,唯一的更動應該就是更換要被 indexing 的 project而已。

上述這種使用情境我覺得非常適合使用 docker 來建置一個 image, image 將所有相關的套件都全部安裝完畢,並且套用一個預設的設定檔當作基礎設定。

接下來每次運行的時候,只要將 source code 的位置以及相關的版本資訊都帶入到 docker run 的參數中,就可以跑起一個 www server 並且提供該 project 的網頁服務。

Read more »

blktrace is a block layer IO tracing mechanism which provide detailed information about request queue operations up to user space.

blkparse will combine streams of events for various devices on various CPUs, and produce a formatted output the the event information.
It take the output of above tool blktrace and convert those information into fency readable form.

In the following, We will use those tools blktrace and blkparse to help us to observe sector numbers which has been written by fio requests.
We will use the fil to generate two diffenrt IO pattern requests, sequence write and random write.

Read more »

AsyncConnection 此物件代表整個 connection,裡面提供了收送(Write/Read)兩個主要介面供應用層(OSD/MON等)使用外,裡面也處理了整個 Ceph Node收送封包的邏輯處理,這部分比較像是一個 finite state machine(FSM),當前狀態是什麼時候,收到的封包是什麼,就切換到什麼狀態來處理。
每個 AsyncConnection 會像底層的 Event Engine註冊一個 call back function,當該 connection 接收到封包後,就會觸發該 function,而此 function就是 Process,所以接下來會從此 function 當作下手點,主要研究雙方連線建立的過程,特別是從 Service side 去觀察 Accept 封包後的流程。

Read more »

Introduction

這篇延續上一篇Docker image for Hexo (一),要使用上次的概念來打造一個屬於我自己的 hexo docker image,至於這邊為什麼是說屬於我自己的?
目前網路上其實也有不少關於 hexo 相關的 docker image,在使用上大致上可以分成兩類

  • docker image 當成一次性的使用,可能提供了 setup local server 或者是 deploy to git 之類的服務
    • 在這種架構下,通常都是把整個 blog 的 source 放在外面的 host 上,再透過 docker run 的時候,將這些檔案透過 volume的方式掛載到 container 內,然後 container 內就使用已經安裝好的 hexo 環境幫你產生一次性的 generate, deploy 之類的指令。
    • 這種 image 我覺得大概跟我差不多,都是為了練習而產生的,實際上使用沒有特別方便,原因在於 hexo 本身就是透過 npm 管理了,所有使用到的 modules 也都存放在自己本身的資料夾內,這種情況下根本沒有真的幫助使用者減少多少時間,畢竟 hexo 本身的安裝就一兩行就結束了。
    • 此外,這種模式最大的麻煩就是,因為你 hexo 的安裝都是在 image階段就結束了,你若有想要安裝額外的 npm modules 就會沒有辦法,所以其實使用上也不夠靈活
Read more »

Introduction

Async 希望在與底層kernel socket進行I/O處理時是以 Async 的方式去運行,而不是像 Simple 一樣每條 connetion 都要開兩個 threads 來負責處理 read 跟 write。
而現在普遍人在撰寫 Network Programming 時,幾乎都會採用 event-driven 類型的方式來處理,如 select.

Async 中負責進行上述這類型 event-driven I/O 處理的就是 Event 物件
Event 是一個抽象的介面,提供API給上層的 Worker 使用,而各種不同的類型的 I/O 都必須要繼承Event物件,並且實作所有的API。
目前的Event物件中有提供下列實作

  • DPDK
  • EPOLL
  • KQUEUE
  • SELECT
Read more »

延續上篇文章 (Ceph Network Architecture 研究(一))[https://www.hwchiu.com/ceph-network-i.html#more],本文將繼續探討 Async 這種網路類型底層真的架構與概念,所以本文章也不會有太硬的程式碼解讀,反而會比較偏向概念性的分析。

從上一篇文章中我們可知道,底層網路實現提供了包含 Messenger, Connection 等介面供上層應用層去使用。
接下來

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AsyncConnection.cc
AsyncConnection.h
AsyncMessenger.cc
AsyncMessenger.h
Event.cc
Event.h
EventEpoll.cc
EventEpoll.h
EventKqueue.h
EventSelect.cc
EventSelect.h
PosixStack.cc
PosixStack.h
Stack.cc
Stack.h
net_handler.cc
net_handler.h

從上述的檔案來看,我們大致上可以猜到 AsyncMessenger 以及 AsyncConnection的涵義,而 Event 一系列的檔案應該就是最底層的 I/O 的處理。

Read more »

本 blog 目前是採用 hexo 作為主要開發,然而 hexo 我覺得最大的缺點就是屬於靜態網頁類型,所以只要每次換一個開發裝置,譬如桌電,筆電等,就必須要將整個環境重新建置。
整個 hexo 是由 nodejs 所組成的,所以其實在安裝上也不會有什麼太大的麻煩,但就是覺得相同的事情做過很多次,其實還滿蠢的。
所以決定採用 docker 的方式,將該開發環境做成一個 docker image,之後有需要直接抓取該 image 下來使用即可。

因此本文接下來將著重在如何使用 docker 指令創立一個 image,並且將其上傳到 docker hub上。

Read more »