Fw: [問題] Linux Socket Performance
※ [本文轉錄自 C_and_CPP 看板 #1QyTR0gb ]
作者: carylorrk (carylorrk) 看板: C_and_CPP
標題: [問題] Linux Socket Performance
時間: Wed May 9 00:56:28 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu 16.04
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc-5.5
問題(Question):
先承認這是作業文
小弟對網路程式不熟悉
第一次使用 Linux TCP socket 實作簡單的 RPC
但是不知道是哪裡的問題
performance 大概只有原本使用 gRPC 的一半
可能只是很蠢的操作方式錯誤
又或者是哪裡 implement 太慢
還請各位鞭小力一點
整個系統的架構是
每臺電腦之間都會互相溝通
主要程式部分是 multithread
可能會同步呼叫通訊部分的函式
並且每次傳送數百 bytes 到 mega bytes 不等的內容
次數頻繁,可能是一秒就好幾次呼叫
通訊部分架構
我一開始就把每臺之間的 socket 創好
用一個 bind & listen & accept 的 thread
加上 connet 到所有比自己後面的機器取得 sockets
並建立兩個 thread 分別負責傳送和接收(init.h)
傳送的 thread 是一個 task queue
有人需要傳送時先把資料加到 queue 裡
這個 thread 就負責一直從 queue 裡拿資料
然後利用 send 把資料傳到對應 socket 去 (sender.cc)
接收的 thread 則是利用 epoll
來等待所有 sockets 的訊息進來
讀進來之後會根據 command
創一個 thread call 相對應的 handler function (receiver.cc)
目前測量應該不是 serialize 方面的問題
也有試過在 receiver 創 thread 的部分使用 thread pool
但是暫時還沒有找到效能的問題點
不知道有沒有先進能給點意見?感謝~
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://gist.github.com/CaryLorrk/12726181cd3ebd79a1c6ccdedeb8c29f
不是完整的程式碼
不過網路部分都有出來了
我知道架構很醜,傷眼了 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.234.91
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1525798592.A.AA5.html
※ 轉錄者: carylorrk (122.116.234.91), 05/09/2018 09:24:20
→
05/09 15:22,
6年前
, 1F
05/09 15:22, 1F
→
05/09 15:24,
6年前
, 2F
05/09 15:24, 2F
其實主要是想問問看在這種架構下一般的做法是什麼
我目前有寫一個比較小的測試範本,用 perf 去量
發現有可能是當每秒 call send_message(enqueue) 次數增加時造成的問題
但是目前還看不出個所以然,先補上程式碼,再努力看看 XD
https://github.com/CaryLorrk/tcp_socket.git
→
05/09 21:15,
6年前
, 3F
05/09 21:15, 3F
出了 scope 之後就自己會 unlock 了~
※ 編輯: carylorrk (122.116.234.91), 05/09/2018 22:43:50
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章