Linux, 工作, 生活, 家人

Linux

Iperf 在 Linux 使用 -P 參數, 會出現 pthread_create failed 的問題.

最近要測試打出 Multi thread session 去測試速度, 可是在 Linux 下, Iperf 大概最多只能建 180, 最多最多不超過 360 個 Session.
可是 ulimit 中的 Max user processes 也改了 /proc/sys/kernel/thread-max 最高上限都是 30000 條以上
結果還是有問題, 查遍了 Google 也沒有答案.

最後試出來的結果是, pthread_create 預設會使用很大的 stack size, 在 create thread 時, 調整 stack size 就可以達到目地.
不過我測試的結果是不太穩定, 只能說, 大概往這個方向找解答就對了.
因為接下來我暫時無法分出時間來解決這個問題, 所以先在這邊寫我測試的進度.

首先, 要修改 iperf 的 source code , 縮小 Pthread 的 Stack Size.
找到 iperf source 下的 compat/Thread.c function thread_start , 加上以下的 Code

pthread_attr_t pthread_attr;
pthread_attr_init(&pthread_attr);
pthread_attr_setstacksize(&pthread_attr,409600);

再將 pthread_create function 那一行改成

if ( pthread_create( &thread->mTID, &pthread_attr, thread_run_wrapper, thread ) != 0 ) {

接下來請修改系統參數

ulimit -n 8192 (可同時開 8192 個 File)
ulimit -s 65535 (將 Stack Size 開到 64MByte)

至於 thread max , 如果是 PC 應該都很高

我自己測試的結果是 1024-1500 左右應該都可以執行, 但是要超過 2000 條就不行了.
所以…… 還在找 Bug.
只是我最近沒空, 怕過一陣子忘了怎麼追這個問題的.

發佈留言