目前的問題/如何解決
1.每個thread下面的 localdata 要在first packet跟per packet下面做初始化
need to check
struct localdata { uint64_t nextreport; 保留,但須確認有無重複 (next_interval) uint64_t count; 保留,但須確認有無重複 (count_packet_interval)
};
另有以下順序問題
A. Function呼叫順序 / localdata 使用順序如下
init_local : 先 Set up processing callbacks, 再 Set up our reporting callbacks ( localdata 初始化 )
first_packet
fin_local : 在 Set up processing callbacks 的 init_local 之後 ( localdata 釋放記憶體空間 )
per_packet
process_tick (update packet counter and time period)
init_local : 先 Set up processing callbacks, 再 Set up our reporting callbacks ( localdata 初始化 )
report_results (update packet counter and time period)
dump_results (update packet counter and time period)
end_reporter (update packet counter and time period)
dump_results (update packet counter and time period)
Localdata 的 tls ?
*tls : 傳進來的指標,似乎沒有回傳
void tls : 有時候,您只希望儲存記憶體的位址,然後將之與另一個記憶體位址作比較,這時並不需要關心型態的問題,您可以使用void*來宣告指標,
由於void型態的指標沒有任何的型態資訊,所以只用來持有位址資訊,您不可以使用*運算子對void型態指標提取值,必須要先casting轉型之後才可用來取值
哪裡要初始化?哪裡要release? A. 相同@init_local 及 fin_local
新的變數有哪些,要新增什麼在哪裡? 新程式下的local data有何新增?? 和 print出來的東西相同?
https://sites.google.com/a/cnsrl.cycu.edu.tw/glennshih/weekly-report/2017-12-29
A. print出來的參數
interval_number
count_packet_interval
num_total_key
num_distinct_key
num_total_key_stash
num_distinct_key_stash
numprobe
max_probe_len_fix
key_max_probe_len_fix
FLOW_SRAM_TABLE_SIZE
FLOW_CAM_STASH_SIZE
char src[INET_ADDRSTRLEN], dst[INET_ADDRSTRLEN]; uint32_t src_ip_uint, dst_ip_uint; uint16_t src_port, dst_port, ip_len; struct sockaddr_storage src_stor, dst_stor; struct sockaddr *src_ip, *dst_ip; uint8_t proto; libtrace_ip_t *ip; struct timeval ts; int i;1.A.
packet count
byte count
key
next interval
number of final flow
2.兩邊ts變數的定義不同
struct timeval ts;
uint64_t ts;
timedemo.c 左右兩邊都是uint64_t
local->nextreport && ts > local->nextreporterman 左右兩邊都是double
if (next_interval == 0) { next_interval = ts.tv_sec + INTERVAL_SEC;2.A.
struct timeval ts; << 應該要用這個,因為後面程式有用到struct裡面的東西,但是要怎麼用?
ts = trace_get_erf_timestamp(packet); 變成用 trace_get_timeval前者return一個64bits的時間,後者return一個struct timeval
while (local->nextreport && ts > local->nextreport) { 變成用 ts.tv_sec
3.printing timeline
3.A.
report_results 第一次印出
dump_results 每個區間印出
已依照first packet/per packet完成轉移,尚未debug
4. timedemo compile問題
4.A.
sudo gcc -o test_timedemo timedemo.c -Wall -ltrace -lm5. count_packet_all +=1 不知道要搬到哪裡,尚未搬動
5.A.
搬到第二個interval之後
6. 變數搬動及其後續的函數間參數傳遞
ip = trace_get_ip(pkt); >> ip = trace_get_ip(packet); 所有pkt改為packet似乎都是區域變數?
6.A.
皆為Localdata 無需傳遞
7.cross compile時, lp_stash_5t_trace_interval.cc裡面的void per_packet(libtrace_packet_t *pkt) {} 函式要刪掉 ?
7.A.
直接覆蓋掉
8. main 要怎麼修改?
9.每個執行libtrace+DPDK的PID中是怎麼執行的才會導致CPU 100%??
是DPDK polling或是其他原因?
git add . git commit -m "" git push -u origin master