0%

本文主要嘗試分析 drbd(9.0) 於 kernel運行時的效能分析,希望藉由 perf 這個 tool 來分析整個程式運行的狀況,藉此觀察其運行時各 function 的比例。

Testing Environment

為了進行效能上的分析,首要條件就是先將 DRBD 給衝到效能瓶頸才有機會去觀察,所以本文採用下列的環境與工具來進行這項作業

Read more »

Introduction

本篇文章主要講述如何再 Ubuntu 16.04 with kernel 4.4.3 的環境下安裝 drbd 9.0 並進行簡單的設定與操作。

Install

這邊為了方便日後的研究,這邊安裝的方式是抓取 source code 下來,然後進行編譯安裝,由於 drbd v8.4.5 後將 module 以及相關的 utils 是分開在不同的 git repostory,所以我們會有兩個 project 來編譯及安裝。
首先到官網的 git 首頁可以看到滿滿的 projects,這邊我們會需要的兩個 project 分別是 drbd-9.0 以及 drbd-utils
接下來就說明這兩個 project 要如何編譯及安裝

Read more »

Introduction

本文主要分析 drbdkernel space 中關於 networking 這一部分用到的所有資料結構,這些資料結構主要分成兩個部分,一部分是通用的,一部分則是 TCP 連線專用的

通用

  • struct drbd_resource
  • struct drbd_connection
  • struct drbd_path
  • struct drbd_listener
  • struct drbd_transport
  • struct drbd_transport_ops
  • struct drbd_transport_class

TCP專用

  • struct drbd_tcp_transport
  • struct dtt_listener
  • struct dtt_socket_container
  • struct dtt_path

Environment

  • Drbd 9.0
  • Using TCP as DRBD Transport
Read more »

Introduction

本文延續之前研究 drbd 9.0 網路的工作流程,這篇文章主要在研究其 kernel space 中的行為與邏輯。

從之前 drbdsetup 那邊可以觀察到,這三個指令的結構如下,其中要特別注意的就是
DRBD_ADM_CONNECT, DRBD_ADM_NEW_PEER 以及 DRBD_ADM_NEW_PATH
這三個數值其實是給 netlink 使用的,在 kernel 端會去註冊遇到三種類型的 netlink 應該要怎麼處理。

1
2
3
4
5
0397     {"connect", CTX_PEER_NODE,
0398 DRBD_ADM_CONNECT, DRBD_NLA_CONNECT_PARMS,
0399 F_CONFIG_CMD,
0400 .ctx = &connect_cmd_ctx,
0401 .summary = "Attempt to (re)establish a replication link to a peer host." },

1
2
3
4
5
0403     {"new-peer", CTX_PEER_NODE,
0404 DRBD_ADM_NEW_PEER, DRBD_NLA_NET_CONF,
0405 F_CONFIG_CMD,
0406 .ctx = &new_peer_cmd_ctx,
0407 .summary = "Make a peer host known to a resource." },
1
2
3
4
5
6
7
8
9
0415     {"new-path", CTX_PEER_NODE,
0416 DRBD_ADM_NEW_PATH, DRBD_NLA_PATH_PARMS,
0417 F_CONFIG_CMD,
0418 .drbd_args = (struct drbd_argument[]) {
0419 { "local-addr", T_my_addr, conv_addr },
0420 { "remote-addr", T_peer_addr, conv_addr },
0421 { } },
0422 .ctx = &path_cmd_ctx,
0423 .summary = "Add a path (endpoint address pair) where a peer host should be reachable." },
Read more »

Architecture

整個 DRBD 分成 kernel space 跟 user space。
主要的功能都在 kernal space,在 9.0 版本中包含了兩個 kernel module(商業版還在多一個RDMA),其中 drbd_transport_tcp.ko專心負責 TCP 連線的部分,剩下的功能都在 drbd.ko 中實現。
而 user space 則是負責提供用戶一個方便的操作,如drbdadm這方面的工具,當用戶執行如 drbdadm up r0 這些指令後,最後會透過 drbdsetup 將必要的資訊透過 netlink的方式送往 kernel space,而先前的 kernel module 則會在 insert 時就註冊許多 netlink event,每種type都有對應的 handler來處理。
如下圖呈現

img

Read more »

Install LXR on Ubuntu 16.04

In this article, I will write down a example to descrip how to setup the LXR(Linux Cross Reference) with multiple projects support. In this configuration, your can view multiple projects’ refernce in one LXR service.
For this article, I use the Ceph and DRBD for my LXR projtects.

Read more »

不久前有一篇文章https://daniel.haxx.se/blog/2017/04/22/fewer-mallocs-in-curl/指出, curl 開發者嘗試將 malloc 呼叫的次數減少,結果對整體的影響帶來的顯著的提升

使用 curl http://localhost/512M 當作第一個比較
原始版本的 curl 關於 malloc 相關數據如下

1
2
3
4
5
6
7
8
Mallocs: 33901
Reallocs: 5
Callocs: 24
Strdups: 31
Wcsdups: 0
Frees: 33956
Allocations: 33961
Maximum allocated: 160385

而修改後的版本為

1
2
3
4
5
6
7
8
Mallocs: 69
Reallocs: 5
Callocs: 24
Strdups: 31
Wcsdups: 0
Frees: 124
Allocations: 129
Maximum allocated: 153247

Read more »

Introduction

  • RDMA (Remote Direct Memory Access) is a mechanism which allow the host to accessing(read, write) memory on a remote host without interrupting CPU.
  • The advantage of RDMA
    1. Zero-copy
      1. Kernel bypass
      2. No CPU involvement`
  • With RDMA, our data can transfer without the involvement of the linux kernel network stack and provide hight performance, low latency, low CPU consumption.
  • This article focus on how to enable the ceph with RDMA, including how to install ceph and enable the RDMA function.
Read more »

314 Binary Tree Vertical Order Traversal

原題目是付費題目,有興趣看到完整的請自行付費觀賞,在此就不提供超連結了。

Introduction

  • 給定一個 binary tree,將此 tree 以 vertical 的方式走過,
  • 輸出時,從最左邊開始輸出
  • 相同 colume 的算同一個 group,若屬於同 row 且同 colume,則從左邊開始算起

    Read more »