Giter Club home page Giter Club logo

guider's Introduction

Build Status license Coverity PyPI version Download guider Join the chat at https://gitter.im/guiderchat/Lobby

Guider_Logo_mini

Table of contents

Guider

Guider is a comprehensive performance analysis tool designed to meet all your system performance needs. With features like monitoring, profiling, tracing, visualization, control, logging, networking, testing, and utilities, Guider provides you with everything you need to measure, analyze, and verify your system's performance.

Some of the key features of Guider include:

  1. Accurate measurements: Guider provides measurements in units of count, time (in microseconds), and size (in bytes) for precise results.
  2. Comprehensive functionality: Guider offers a range of functions for analysis and experimentation.
  3. Detailed reports: Guider provides in-depth reports with as much information as possible.
  4. Browser-based visualization: Guider outputs visualizations in SVG format for easy viewing in a browser.
  5. Easy to use: Guider is designed to be simple and straightforward, with no need for installation or setup.

Guider supports a wide range of platforms based on the Linux kernel, including distros like Ubuntu, CentOS, and RHEL, as well as Android, ccOS, webOS, Tizen, and AGL. Limited support is also available for Windows and MacOS. In terms of architecture, Guider can work on x86, x64, ARM, AArch64, RISC-V.

Output

$ python3 guider/guider.py top -a

[Top Info] [Time: 4588832.570] [Inter: 1.0] [Ctxt: 314463] [Life: +0/-0] [IRQ: 26606] [Core: 4] [Task: 498/625] [Load: 0/0/0] [RAM: 125.7G] [Swap: 4.0G]
           [Cycle: 8.3G / Inst: 5.7G / IPC: 0.69 / CacheMiss : 13.7M(23%) / BrcMiss: 25.7M(1%) / Clk: 38.7G / MinFlt: 358 / MajFlt: 0]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|MemAvl( Per/ User/Cache/Kern)| Swap( Per/ In/Out)| PgRclm  | BlkRW | NrFlt | PrBlk | NrSIRQ | PgMlk | PgDirt |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  | 10 %( 1 / 6 / 0 / 0 )|124649(  96/  453/ 5690/1787)|    0(   0/  0/  0)|   0/0   |  0/0  |   0   |   0   | 15889  | 4616  |   20   |    2K/0    |
----------------------------------------------------------------------------------------------------------------------------------------------------------
CPU [#####                                     ]    MEM [###                                       ]    SWAP [                                          ]|
----------------------------------------------------------------------------------------------------------------------------------------------------------
Core/0 |100 %(66 /34 / 0 / 0 )|###################################################################|   powersave   |  0-0   |  24 C | 2874 Mhz [1171-3515]|
Core/1 |  7 %( 0 / 6 / 0 / 0 )|####                                                               |   powersave   |  0-1   |  22 C | 2307 Mhz [1171-3515]|
Core/2 |  0 %( 0 / 0 / 0 / 0 )|                                                                   |   powersave   |  0-2   |  23 C | 2165 Mhz [1171-3515]|
Core/3 |  0 %( 0 / 0 / 0 / 0 )|                                                                   |   powersave   |  0-3   |  22 C | 2170 Mhz [1171-3515]|
==========================================================================================================================================================
     Process (    PID/   PPID/  Nr/ Pri)| CPU(Usr/Ker/Dly)| VSS( RSS/Txt/Shr/Swp)| Blk(  RD/  WR/NrFlt)| SID | USER | FD | LifeTime|       Parent        |
----------------------------------------------------------------------------------------------------------------------------------------------------------
      screen (   2451/      1/   1/C  0)| 100( 66/ 34/  0)|  11(   6/  0/  2/  0)|   0(   -/   -/    0)| 2451|peacel|  64|53d:00:22|           systemd(1)|
         yes (1341199/1340350/   1/C  0)|  99(  0/ 99/  0)|   5(   0/  0/  0/  0)|   0(   -/   -/    0)| 2452|peacel|  64| 00:00:03|          vi(1340350)|
kworker/u80: (1341030/      2/   1/C  0)|  90(  0/ 90/  0)|   0(   0/  0/  -/  -)|   0(   -/   -/    0)|    -|  root|  64| 00:15:46|          kthreadd(2)|
kworker/u80: (1340705/      2/   1/C  0)|  26(  0/ 26/  0)|   0(   0/  0/  -/  -)|   0(   -/   -/    0)|    -|  root|  64| 02:04:59|          kthreadd(2)|
kworker/u80: (1340966/      2/   1/C  0)|  21(  0/ 21/  0)|   0(   0/  0/  -/  -)|   0(   -/   -/    0)|    -|  root|  64| 00:20:56|          kthreadd(2)|
                               [ TOTAL ]| 344.0(  72/ 271)|RSS:   1G / Swp:    0)| 0.0(   -/   -/    0)|      Yld: -|       Prmt: -|            Task: 498|
----------------------------------------------------------------------------------------------------------------------------------------------------------
     [Z]bash ( 820918/ 820917/   1/C  0)|   0(  0/  0/  -)|   0(   0/  0/  0/  -)|   0(   -/   -/    0)|    -|     -|   -| 3d:06:10| tmux: server(820917)|
----------------------------------------------------------------------------------------------------------------------------------------------------------
$ python3 guider/guider.py top -R 5 -o
$ cat guider.out

[Top Summary Info]
==========================================================================================================================================================
 IDX  |          Interval           | CPU |   Avl/User/Cache   |  BlkRW  | Blk | SWAP | NrPgRclm  | NrFlt | NrCtx  | NrIRQ  |  NrTask  | Core | Network  |
==========================================================================================================================================================
    1 |        START -   497231.500 |  98 |  124442/962/3854   |   0/0   |   0 |    0 |    0/0    |     0 |    631 |  10660 |  482/701 |  40  |  2K/156  |
    2 |   497231.500 -   497232.520 |  98 |  124440/963/3854   |   0/0   |   0 |    0 |    0/0    |     0 |    646 |  10506 |  482/701 |  40  |  1K/104  |
    3 |   497232.520 -   497233.540 |  98 |  124440/964/3854   |   0/0   |   0 |    0 |    0/0    |     0 |    741 |  10562 |  482/701 |  40  |  2K/104  |
    4 |   497233.540 -   497234.570 |  98 |  124440/964/3854   |   0/0   |   0 |    0 |    0/0    |     0 |    629 |  10489 |  482/701 |  40  |  1K/104  |
    5 |   497234.570 -   497235.590 |  98 |  124440/964/3854   |   0/0   |   0 |    0 |    0/0    |     0 |    699 |  10602 |  482/701 |  40  |  2K/208  |
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Top CPU Info] (Unit: %)
==========================================================================================================================================================
    COMM     (  PID  / PPID  / Nr / Pri)| Min/Avg/Max  |      1      2      3      4      5 
==========================================================================================================================================================
   [CPU]     (      -/      -/   -/   -)|  98/98.0/98  |     98     98     98     98     98 
----------------------------------------------------------------------------------------------------------------------------------------------------------
  FahCore_a8 (  55469/  55465/  41/C 19)| 384/387.0/389|    384   3898   3898   3860   3883 
----------------------------------------------------------------------------------------------------------------------------------------------------------
      guider (  55767/   9591/   1/C  0)|   1/1.6/3    |      1      1      2      3      1 
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Top RSS Info] (Unit: MB)
==========================================================================================================================================================
    COMM     (  PID  / PPID  / Nr / Pri)|  Max  |      1      2      3      4      5 
==========================================================================================================================================================
 [FREE/MIN]  (      -/      -/   -/   -)|124440 | 124442 124440 124440 124440 124440 
----------------------------------------------------------------------------------------------------------------------------------------------------------
  FahCore_a8 (  55469/  55465/  41/C 19)|   548 |    548    548    548    548    548 
----------------------------------------------------------------------------------------------------------------------------------------------------------
      guider (  55767/   9591/   1/C  0)|    34 |     33     34     34     34     34 
----------------------------------------------------------------------------------------------------------------------------------------------------------
$ python3 guider/guider.py ttop

[Top Info] [Time: 194025.590] [Interval: 1.0] [Ctxt: 4995] [Life: +0/-0] [OOM: 0] [IRQ: 1879] [Core: 8] [Task: 333/1188] [Load: 3.1/1.9/0.9] [RAM: 62.8G]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|  Avl(Diff/ User/Cache/Kern)|  Swap(Diff/ In/Out)| PgRclm  | BlkRW | NrFlt | PrBlk | NrSIRQ | PgMlk | PgDrt  |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  3 %( 1 / 0 /23 / 0 )|59874(  -3/ 3110/15153/ 355)|     0(   0/  0/  0)|   0/0   |  0/5  |   0   |   2   |  313   | 1607  | 939290 |    0/0     |
==========================================================================================================================================================
          Thread (  TID/  PID/  Nr/ Pri)| CPU(Usr/Ker/Dly)|  VSS(RSS/Txt/Shr/Swp)| Blk(  RD/  WR/NrFlt)| Yld | Prmt | FD | LifeTime|       Process       |
----------------------------------------------------------------------------------------------------------------------------------------------------------
          guider ( 8160/ 8160/   1/C  0)|   3(  2/  0/  0)|   66( 33/  2/  6/  0)|   0(   -/   -/    0)|    1|     0|2048| 00:00:02|         guider(8160)|
 gnome-terminal- ( 4864/ 4864/   4/C  0)|   1(  0/  0/  -)|  627( 57/  0/ 40/  0)|   0(   -/   -/    0)|    -|     -| 128| 2d:05:52|gnome-terminal-(4864)|
            Xorg ( 1525/ 1525/   2/C  0)|   1(  0/  0/  -)|  431( 84/  0/ 48/  0)|   0(   -/   -/    0)|    -|     -| 128| 2d:05:53|           Xorg(1525)|
                               [ TOTAL ]|     5(   2/   0)|RSS: 174M / Swp:    0)| 0.0(   -/   -/    0)|      Yld: 1|       Prmt: 0|              Task: 3|
----------------------------------------------------------------------------------------------------------------------------------------------------------
[D]kworker/u16:0 ( 7784/ 7784/   1/C  0)|   0(  0/  0/  -)|    0(  0/  0/  -/  -)|   0(   -/   -/    0)|    -|     -|   -| 00:07:07|                    -|
         [D]pool ( 8024/ 2450/  13/C  0)|   0(  0/  0/  -)| 1025( 82/  1/  -/  -)|   0(   -/   -/    0)|    -|     -|   -| 00:04:31|                    -|
  [D]usb-storage ( 7825/ 7825/   1/C  0)|   0(  0/  0/  -)|    0(  0/  0/  -/  -)|   0(   -/   -/    0)|    -|     -|   -| 00:06:38|                    -|
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py utop -g yes -H

[Top Usercall Info] [Time: 82094.260000] [Interval: 1.001784] [NrSamples: 955] [yes(7202): 28%(Usr/27%+Sys/0%)] [SampleTime: 0.000100]
==========================================================================================================================================================
 Usage  |                                                                 Function [Path]                                                                 
==========================================================================================================================================================
  35.6% | _IO_file_xsputn@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                  
           100.0% |  <- fputs_unlocked@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/usr/bin/yes.coreutils] <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
  17.8% | fputs_unlocked@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                   
           100.0% |  <- ??[/usr/bin/yes.coreutils] <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
  16.1% | __libc_start_main@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                
----------------------------------------------------------------------------------------------------------------------------------------------------------
  14.7% | memcpy@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                           
           100.0% |  <- _IO_file_xsputn@GLIBC_2.17[/lib/libc-2.24.so] <- fputs_unlocked@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/usr/bin/yes.coreutils]
                     <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
  12.3% | strlen@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                           
           100.0% |  <- fputs_unlocked@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/usr/bin/yes.coreutils] <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
   3.0% | _IO_file_write@GLIBC_2.17 [/lib/libc-2.24.so]                                                                                                   
           100.0% |  <- ??[/lib/libc-2.24.so] <- _IO_do_write@GLIBC_2.17[/lib/libc-2.24.so] <- _IO_file_xsputn@GLIBC_2.17[/lib/libc-2.24.so]
                     <- fputs_unlocked@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/usr/bin/yes.coreutils]
                     <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py utop -g node -H -q JITSYM

[Top Usercall Info] [Time: 7249986.900] [Interval: 1.015] [Samples: 442] [SYS: 2%/120G] [node(1068318): 50%(U46%+S3%)/897M] [guider(1068338): 53%/256M] [Freq:
==========================================================================================================================================================
 Usage  | Function [PATH] <Sample>
==========================================================================================================================================================
  18.6% | write@GLIBC_2.28 [/usr/lib/x86_64-linux-gnu/libpthread-2.31.so] <Cnt: 82>
           100.0% |  <- 0x13250[/usr/lib/x86_64-linux-gnu/libuv.so.1.0.0] <- uv_fs_write[/usr/lib/x86_64-linux-gnu/libuv.so.1.0.0]
                     <- 0x573090[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- JIT[JIT] <- LazyCompile:*writeSync fs.js:551[JIT]
                     <- Builtin:ArgumentsAdaptorTrampoline[JIT] <- LazyCompile:*writeOrBuffer _stream_writable.js:365[JIT]
                     <- LazyCompile:*log console.js:199[JIT] <- Builtin:ArgumentsAdaptorTrampoline[JIT] <- Builtin:JSEntryTrampoline[JIT] <- JIT[JIT]
                     <- 0xab0110[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- 0xab0720[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::O
                     <- v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- 0x630d40[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- JIT[JIT] <- LazyCompile:* /home/peacelee/test/test.js:1[JIT]
                     <- Builtin:InterpreterEntryTrampoline[JIT] <- Builtin:JSEntryTrampoline[JIT] * 8 <- JIT[JIT]
                     <- 0xab0110[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- 0xab0720[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::O
                     <- v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- 0x52cae0[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- node::LoadEnvironment(node::Environment*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- node::Start(v8::Isolate*, node::IsolateData*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char
                     <- node::Start(int, char**)[/usr/lib/x86_64-linux-gnu/libnode.so.64] <Cnt: 82>
----------------------------------------------------------------------------------------------------------------------------------------------------------
   3.8% | LazyCompile:*writeOrBuffer _stream_writable.js:365 [JIT] <Cnt: 17>
            64.7% |  <- LazyCompile:*log console.js:199[JIT] <- Builtin:ArgumentsAdaptorTrampoline[JIT] <- Builtin:JSEntryTrampoline[JIT] <- JIT[JIT]
                     <- 0xab0110[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- 0xab0720[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::O
                     <- v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- 0x630d40[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- JIT[JIT] <- LazyCompile:* /home/peacelee/test/test.js:1[JIT]
                     <- Builtin:InterpreterEntryTrampoline[JIT] <- Builtin:JSEntryTrampoline[JIT] * 8 <- JIT[JIT]
                     <- 0xab0110[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- 0xab0720[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::O
                     <- v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- 0x52cae0[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- node::LoadEnvironment(node::Environment*)[/usr/lib/x86_64-linux-gnu/libnode.so.64]
                     <- node::Start(v8::Isolate*, node::IsolateData*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char
                     <- node::Start(int, char**)[/usr/lib/x86_64-linux-gnu/libnode.so.64] <- main[/usr/bin/node]
                     <- __libc_start_main@GLIBC_2.2.5[/usr/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 11>
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py systop -g yes -H

[Top Syscall Info] [Time: 82043.230000] [Interval: 1.000940] [NrSamples: 634] [yes(7202): 5%(Usr/4%+Sys/0%)] 
==========================================================================================================================================================
 Usage  |                                                                 Function [Count]                                                                
==========================================================================================================================================================
 100.0% | write [Cnt: 634, Tot: 0.830203, Avg: 0.001309, Max: 0.005875, Err: 0]                                                                           
           100.0% |  <- ??[/lib/libc-2.24.so] <- _IO_file_write@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/lib/libc-2.24.so]
                     <- _IO_do_write@GLIBC_2.17[/lib/libc-2.24.so] <- _IO_file_xsputn@GLIBC_2.17[/lib/libc-2.24.so]
                     <- fputs_unlocked@GLIBC_2.17[/lib/libc-2.24.so] <- ??[/usr/bin/yes.coreutils]
                     <- __libc_start_main@GLIBC_2.17[/lib/libc-2.24.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py btop -g a.out -H

[Top Breakcall Info] [Time: 4542869.660] [Interval: 1.001] [NrSamples: 994] [a.out(1219772): 7%(Usr/0%+Sys/6%)] [guider(1219775): 97%]
==========================================================================================================================================================
 Usage  | Function [PATH] <Interval>
==========================================================================================================================================================
  16.7% | __mempcpy_sse2_unaligned_erms [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 166, Avg: 0.005994, Min: 0.002999, Max: 0.012299]
           100.0% |  <- _IO_new_file_xsputn[/lib/x86_64-linux-gnu/libc-2.31.so] <- __vfprintf_internal[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- printf[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
  16.7% | _IO_new_file_xsputn [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 166, Avg: 0.005997, Min: 0.002988, Max: 0.012302]
           100.0% |  <- __vfprintf_internal[/lib/x86_64-linux-gnu/libc-2.31.so] <- printf[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
  11.2% | __strchrnul_sse2 [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 111, Avg: 0.008974, Min: 0.006034, Max: 0.012381]
           100.0% |  <- __vfprintf_internal[/lib/x86_64-linux-gnu/libc-2.31.so] <- printf[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.5% | close@GLIBC_2.4 [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 55, Avg: 0.017763, Min: 0.017895, Max: 0.018863]
           100.0% |  <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.5% | __vfprintf_internal [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 55, Avg: 0.017764, Min: 0.017838, Max: 0.018741]
           100.0% |  <- printf[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.5% | _IO_file_overflow@GLIBC_2.2.5 [/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 55, Avg: 0.017764, Min: 0.017924, Max: 0.018732]
           100.0% |  <- _IO_new_file_xsputn[/lib/x86_64-linux-gnu/libc-2.31.so] <- __vfprintf_internal[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- printf[/lib/x86_64-linux-gnu/libc-2.31.so]
                     <- asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd
                     <- printPeace2[/home/peacelee/test/a.out] <- printPeace[/home/peacelee/test/a.out] <- main[/home/peacelee/test/a.out]
                     <- __libc_start_main[/lib/x86_64-linux-gnu/libc-2.31.so] <- _start[/home/peacelee/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py pytop -g iotop -H

[Top Pycall Info] [Time: 7469667.000] [Interval: 1.003] [NrSamples: 283] [iotop(2943070): 13%(Usr/10%+Sys/2%)] [guider(2943073): 53%] [SampleRate: 0.001]
==========================================================================================================================================================
 Usage  | Function [PATH] <Sample>
==========================================================================================================================================================
  56.9% | WAIT(poll@GLIBC_2.2.5) [/usr/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 161>
           100.0% |  <- run[/usr/lib/python3/dist-packages/iotop/ui.py] <- run_iotop_window[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- wrapper[/usr/lib/python3.8/curses/__init__.py] <- run_iotop[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <lambda>[/usr/lib/python3/dist-packages/iotop/ui.py] <- main[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <module>[/usr/sbin/iotop] <Cnt: 161>
----------------------------------------------------------------------------------------------------------------------------------------------------------
  10.2% | parse_proc_pid_status [/usr/lib/python3/dist-packages/iotop/data.py] <Cnt: 29>
           100.0% |  <- get_cmdline[/usr/lib/python3/dist-packages/iotop/data.py] <- format[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- get_data[/usr/lib/python3/dist-packages/iotop/ui.py] <- refresh_display[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- run[/usr/lib/python3/dist-packages/iotop/ui.py] <- run_iotop_window[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- wrapper[/usr/lib/python3.8/curses/__init__.py] <- run_iotop[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <lambda>[/usr/lib/python3/dist-packages/iotop/ui.py] <- main[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <module>[/usr/sbin/iotop] <Cnt: 29>
----------------------------------------------------------------------------------------------------------------------------------------------------------
   4.6% | read@GLIBC_2.26 [/usr/lib/x86_64-linux-gnu/libc-2.31.so] <Cnt: 13>
            76.9% |  <- parse_proc_pid_status[/usr/lib/python3/dist-packages/iotop/data.py] <- get_cmdline[/usr/lib/python3/dist-packages/iotop/data.py]
                     <- format[/usr/lib/python3/dist-packages/iotop/ui.py] <- get_data[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- refresh_display[/usr/lib/python3/dist-packages/iotop/ui.py] <- run[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- run_iotop_window[/usr/lib/python3/dist-packages/iotop/ui.py] <- wrapper[/usr/lib/python3.8/curses/__init__.py]
                     <- run_iotop[/usr/lib/python3/dist-packages/iotop/ui.py] <- <lambda>[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- main[/usr/lib/python3/dist-packages/iotop/ui.py] <- <module>[/usr/sbin/iotop] <Cnt: 10>
            23.1% |  <- get_cmdline[/usr/lib/python3/dist-packages/iotop/data.py] <- format[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- get_data[/usr/lib/python3/dist-packages/iotop/ui.py] <- refresh_display[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- run[/usr/lib/python3/dist-packages/iotop/ui.py] <- run_iotop_window[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- wrapper[/usr/lib/python3.8/curses/__init__.py] <- run_iotop[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <lambda>[/usr/lib/python3/dist-packages/iotop/ui.py] <- main[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <module>[/usr/sbin/iotop] <Cnt: 3>
----------------------------------------------------------------------------------------------------------------------------------------------------------
   4.2% | format [/usr/lib/python3/dist-packages/iotop/ui.py] <Cnt: 12>
           100.0% |  <- get_data[/usr/lib/python3/dist-packages/iotop/ui.py] <- refresh_display[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- run[/usr/lib/python3/dist-packages/iotop/ui.py] <- run_iotop_window[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- wrapper[/usr/lib/python3.8/curses/__init__.py] <- run_iotop[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <lambda>[/usr/lib/python3/dist-packages/iotop/ui.py] <- main[/usr/lib/python3/dist-packages/iotop/ui.py]
                     <- <module>[/usr/sbin/iotop] <Cnt: 12>
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py ftop -g nginx

[Top File Info] [Time: 497555.620] [Proc: 41] [FD: 2,047] [File: 87] [CPU: 95%(Usr:54%/Sys:41%)] (Unit: %/MB/NR)
==========================================================================================================================================================
    Process      ( ID  / Pid / Nr / Pri)| FD |                                                   Path                                                    |
----------------------------------------------------------------------------------------------------------------------------------------------------------
           nginx ( 1348/ 1333/   1/C  0)|  49| SOCKET: 42   NORMAL: 3   DEVICE: 2   EVENT: 2   PIPE: 0   PROC: 0                                         |
                                        |  49| /var/log/nginx/error.log (0, O_WRONLY|O_APPEND|O_CLOEXEC)                                                 |
                                        |  48| socket:[32124]                                                                                            |
                                        |  37| socket:[32102]                                                                                            |
                                        |  36| anon_inode:[eventfd]                                                                                      |
                                        |  35| anon_inode:[eventpoll]                                                                                    |
                                        |  34| socket:[32073]                                                                                            |
                                        |   8| socket:[32074]                                                                                            |
                                        |   7| socket:[20935]                                                                                            |
                                        |   6| socket:[20934] (TCP:0.0.0.0:80/LISTEN)                                                                    |
                                        |   5| /var/log/nginx/access.log (0, O_WRONLY|O_APPEND|O_CLOEXEC)                                                |
                                        |   3| socket:[32046]                                                                                            |
                                        |   2| /var/log/nginx/error.log (0, O_WRONLY)                                                                    |
                                        |   1| /dev/null (0, O_RDWR)                                                                                     |
                                        |   0| /dev/null (0, O_RDWR)                                                                                     |
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py stacktop -g syslog

[Top Info] [Time: 7176163.830] [Interval: 1.0] [Ctxt: 2914] [Life: +13/-12] [IRQ: 5103] [Core: 24] [Task: 328/435] [RAM: 63876] [Swap: 65491] (Unit: %/MB/NR)
           [Cycle: 2G / Inst: 3G / IPC: 1.34 / CacheMiss: 6M(34%) / BranchMiss: 4M(0%) / Clock: 23G / MinFlt: 53,257 / MajFlt: 0]
==========================================================================================================================================================
  ID   | CPU (Usr/Ker/Blk/IRQ)| Mem (Diff/ User/Cache/Kern)| Swap (Diff/  I/O  )|NrPgRclm | BlkRW | NrFlt | NrBlk | NrSIRQ | NrMlk | NrDrt  |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  6 %( 3 / 1 / 0 / 0 )| 4913(-204/  974/56824/1165)|  0   ( 0  /  0/0  )|   0/0   | 0/42  |   0   |   0   |  3713  |   0   | 90901  |   2K/13K   |
==========================================================================================================================================================
     Thread      (  TID/  PID/  Nr/ Pri)| CPU(Usr/Ker/Dly)|  Mem(RSS/Txt/Shr/Swp)| Blk( RD / WR /NrFlt)| Yld | Prmt | FD | LifeTime|     WaitChannel     |
----------------------------------------------------------------------------------------------------------------------------------------------------------
        rsyslogd ( 2702/ 2702/   4/C  0)|   0(  0/  0/  -)|  244(  5/  0/  2/  0)|   0(   -/   -/    0)|    0|     0|  64| 1K:22:40|poll_schedule_timeout|
                                   100% | poll_schedule_timeout+0x43/0x70 <- do_select+0x711/0x7f0 <- core_sys_select+0x196/0x280 <-
                                          SyS_select+0xa6/0xe0 <- entry_SYSCALL_64_fastpath+0x1a/0xa5
----------------------------------------------------------------------------------------------------------------------------------------------------------
        rsyslogd ( 2779/ 2702/   4/C  0)|   0(  0/  0/  -)|  244(  5/  0/  2/  0)|   0(   -/   -/    0)|    0|     0|  64| 1K:22:40|poll_schedule_timeout|
                                   100% | poll_schedule_timeout+0x43/0x70 <- do_select+0x711/0x7f0 <- core_sys_select+0x196/0x280 <-
                                          SyS_select+0xa6/0xe0 <- entry_SYSCALL_64_fastpath+0x1a/0xa5
----------------------------------------------------------------------------------------------------------------------------------------------------------
        rsyslogd ( 2780/ 2702/   4/C  0)|   0(  0/  0/  0)|  244(  5/  0/  2/  0)|   0(   -/   -/    0)|  116|     0|  64| 1K:22:40|      do_syslog      |
                                    99% | do_syslog+0x446/0x4c0 <- kmsg_read+0x3f/0x50 <- proc_reg_read+0x3d/0x60 <- __vfs_read+0x23/0x110 <-
                                          vfs_read+0x91/0x130 <- SyS_read+0x41/0xa0 <- entry_SYSCALL_64_fastpath+0x1a/0xa5
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py ptop -g yes

[Top Info] [Time: 7181955.420] [Interval: 1.0] [Ctxt: 121] [Life: +0/-0] [IRQ: 1947] [Core: 24] [Task: 317/424] [RAM: 63876] [Swap: 65491] (Unit: %/MB/NR)
==========================================================================================================================================================
  ID   | CPU (Usr/Ker/Blk/IRQ)| Mem (Diff/ User/Cache/Kern)| Swap (Diff/  I/O  )|NrPgRclm | BlkRW | NrFlt | NrBlk | NrSIRQ | NrMlk | NrDrt  |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  5 %( 4 / 0 / 0 / 0 )| 3783(   0/  875/58078/1140)|  0   ( 0  /  0/0  )|   0/0   |  0/0  |   0   |   0   |  2023  |   0   |   0    |   1K/3K    |
==========================================================================================================================================================
    Process      (  PID/ PPID/  Nr/ Pri)| CPU(Usr/Ker/Dly)|  Mem(RSS/Txt/Shr/Swp)| Blk( RD / WR /NrFlt)| Yld | Prmt | FD | LifeTime|     WaitChannel     |
----------------------------------------------------------------------------------------------------------------------------------------------------------
             yes (22371/ 9085/   1/R 90)|  99( 99/  0/  0)|    8(  0/  0/  0/  0)|   0(   -/   -/    0)|    0|     0| 256|  1:34:11|       RUNNING       |
                                        | [Cycle: 2G / Inst: 6G / IPC: 2.82 / CacheMiss: 11K(98%) / BranchMiss: 26K(0%) / Clock: 972M / MinFlt: 0 / MajFlt: 0]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py mtop

[Top Info] [Time: 92097.250] [Inter: 1.0] [Ctxt: 41] [Life: +0/-0] [IRQ: 6] [Core: 8] [Task: 49/77] [Load: 0/0/0] [RAM: 3.7G] [Swap: 1.0G] [Bat: 99%/08:43:
           [SYSTEM > Active:          490.2M, Active(anon):      3.8M, Active(file):    486.4M, AnonHugePages:    46.0M, AnonPages:       139.8M
                     Buffers:         127.7M, Cached:          698.4M, CommitLimit:       2.9G, Committed_AS:    675.7M, DirectMap1G:       8.0G
                     DirectMap2M:       3.8G, DirectMap4k:     101.0M, Dirty:            88.0K, Hugepagesize:      2.0M, Inactive:        483.1M
                     Inactive(anon):  159.6M, Inactive(file):  323.5M, KReclaimable:     66.2M, KernelStack:       3.6M, Mapped:           99.9M
                     MemAvailable:      3.1G, MemFree:           2.4G, MemTotal:          3.7G, PageTables:        3.5M, Percpu:            3.9M
                     SReclaimable:     66.2M, SUnreclaim:       49.3M, Shmem:            16.2M, Slab:            115.5M, SwapFree:          1.0G
                     SwapTotal:         1.0G, VmallocTotal:     32.0T, VmallocUsed:      24.7M]
           [BUDDY > DMA: 0_0_0_0_0_0_0_0_0_1_3 / DMA32: 1,721_922_562_1,003_698_425_265_98_13_15_543 / Normal: 7_4_2_2_1_0_0_1_0_0_0]
           [KSM  > full_scans: 0, max_page_sharing: 256, pages_shared: 0, pages_sharing: 0, pages_to_scan: 100, pages_total: 0, pages_unshared: 0
                   pages_volatile: 0, run: 0, sleep_millisecs: 20, stable_node_chains: 0, stable_node_chains_prune_millisecs: 2,000, stable_node_dups: 0
                   use_zero_pages: 0]
           [VM > swappiness: 60 / cache_pressure: 100 / overcommit: 0]
           [N0-DMA     > diff:       0 / free:  14.0M / min: 244.0K / low: 304.0K / high: 364.0K / managed:  14.0M / present:  14.6M / spanned:  16.0M]
           [N0-DMA32   > diff: -252.0K / free:   2.4G / min:  65.2M / low:  81.5M / high:  97.8M / managed:   3.7G / present:   3.9G / spanned:   4.0G]
           [N0-Device  > diff:       0 / free:      0 / min:      0 / low:      0 / high:      0 / managed:      0 / present:      0 / spanned:   8.0G]
           [N0-Normal  > diff:       0 / free: 732.0K / min: 592.0K / low: 740.0K / high: 888.0K / managed:  33.5M / present:  42.0M / spanned:  42.0M]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|MemAvl(Per/  User/ Cache/ Kern)| Swap( Per/ In/Out)|  PgRclm   | BlkRW | NrFlt |Blk| NrSIRQ | PgMlk | PgDirt |   NetIO    |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  0 %(  0/  0/  0/  0)|  3143( 18/   139/   941/  259)|    0(   0/  0/  0)|    0/0    |  0/0  |    0  | 0 |      0 |     0 |     22 |   255/52   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
CPU [                                          ]    MEM [#######                                   ]    SWAP [                                          ]|
==========================================================================================================================================================
           Process ( PID/PPID/  Nr/ Pri)| CPU(Usr/Ker/Dly)| VSS( RSS/Txt/Shr/Swp)| Blk(  RD/  WR/NrFlt)|  SID|  USER|  FD| LifeTime|               Parent|
----------------------------------------------------------------------------------------------------------------------------------------------------------
             snapd (3094/   1/  15/C  0)|   0(  0/  0/  -)|1722(  43/  9/ 18/  0)|   0(   -/   -/    0)| 3094|  root| 128| 16:50:57|           systemd(1)|
                           MEM(ANON/73) | VSS:   1.7G / RSS:  23.7M / PSS:  23.7M / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                            MEM(FILE/4) | VSS:  23.7M / RSS:  21.5M / PSS:  19.9M / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                            MEM(HEAP/1) | VSS: 132.0K / RSS:   4.0K / PSS:   4.0K / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                           MEM(OTHER/2) | VSS:  24.0K / RSS:   4.0K / PSS:      0 / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                           MEM(STACK/1) | VSS: 132.0K / RSS:  20.0K / PSS:  20.0K / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                               MEM(SUM) | VmPeak: 1.7G, VmHWM: 54.2M, VmData: 175.5M, HugetlbPages: 0, RssAnon: 24.7M, RssFile: 19.0M, RssShmem: 0       |
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py ntop

[Top Info] [Time: 186473.960] [Interval: 1.0] [Ctxt: 7865] [Life: +0/-0] [OOM: 0] [IRQ: 4229] [Core: 8] [Task: 328/1171] [Load: 0.5/0.3/0.3] [RAM: 62.8G]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|  Avl(Diff/ User/Cache/Kern)|  Swap(Diff/ In/Out)| PgRclm  | BlkRW | NrFlt | PrBlk | NrSIRQ | PgMlk | PgDrt  |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  1 %( 0 / 0 / 0 / 0 )|59939(  -2/ 3054/ 6429/ 350)|     0(   0/  0/  0)|   0/0   |  0/0  |   0   |   0   |  1661  | 1607  |  343   |  652K/9K   |
==========================================================================================================================================================
                Network                  |                        Receive                        |                       Transfer                        |
----------------------------------------------------------------------------------------------------------------------------------------------------------
      Dev        |          IP           |   Size   |  Packet  |  Error   |   Drop   | Multicast |   Size   |  Packet  |  Error   |   Drop   | Multicast |
==========================================================================================================================================================
         docker0 |        166.104.101.26 |        0 |        0 |        0 |        0 |         0 |        0 |        0 |        0 |        0 |         0 |
            eno1 |         166.104.101.1 |   665.9K |      475 |        0 |        0 |         1 |    12.0K |      168 |        0 |        0 |         0 |
 enx201601190a25 |        166.104.101.27 |       48 |        1 |        0 |        0 |         0 |        0 |        0 |        0 |        0 |         0 |
              lo |             127.0.0.1 |        0 |        0 |        0 |        0 |         0 |        0 |        0 |        0 |        0 |         0 |
          virbr0 |                       |        0 |        0 |        0 |        0 |         0 |        0 |        0 |        0 |        0 |         0 |
      virbr0-nic |                       |        0 |        0 |        0 |        0 |         0 |        0 |        0 |        0 |        0 |         0 |
       [ TOTAL ] |                       |   666.0K |      476 |        0 |        0 |         1 |    12.0K |      168 |        0 |        0 |         0 |
==========================================================================================================================================================
# python3 guider/guider.py disktop

[Top Info] [Time: 262411.830] [Inter: 1.0] [Ctxt: 802] [Life: +0/-0] [IRQ: 10675] [Core: 40] [Task: 481/700] [Load: 38/38/38] [RAM: 125.7G] [Swap: 4.0G]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|  Avl( Per/ User/Cache/Kern)|  Swap( Per/ In/Out)| PgRclm  | BlkRW | NrFlt | PrBlk | NrSIRQ | PgMlk | PgDrt  |  Network   |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  | 98 %(97 / 0 / 0 / 0 )|124431(  96/  994/ 3531/1733)|     0(   0/  0/  0)|   0/0   |  0/0  |   0   |   0   | 11620  | 4613  |   70   |    1K/0   |
==========================================================================================================================================================
          DEV           |BUSY| AVQ | READ  | WRITE |   FREE(   DIFF)|USAGE| TOTAL |  AVF  |   FS   |                 MountPoint <Option>                 |
----------------------------------------------------------------------------------------------------------------------------------------------------------
/dev/sda2               |  0%|    0|      0|      0| 670.6G(      0)|  28%| 937.4G|  57.6M|  ext4  | / <rw,relatime>                                     |
/dev/loop4              |  0%|    0|      0|      0|      0(      0)| 100%|  30.0M|      0|squashfs| /snap/snapd/9279 <ro,nodev,relatime>                |
/dev/loop5              |  0%|    0|      0|      0|      0(      0)| 100%|  70.0M|      0|squashfs| /snap/lxd/16922 <ro,nodev,relatime>                 |
/dev/sda1               |  0%|    0|      0|      0| 503.0M(      0)|   1%| 510.0M|      0|  vfat  | /boot/efi <rw,relatime>                             |
/dev/loop1              |  0%|    0|      0|      0|      0(      0)| 100%|  55.0M|      0|squashfs| /snap/core18/1885 <ro,nodev,relatime>               |
/dev/loop2              |  0%|    0|      0|      0|      0(      0)| 100%|  70.0M|      0|squashfs| /snap/lxd/16894 <ro,nodev,relatime>                 |
/dev/loop0              |  0%|    0|      0|      0|      0(      0)| 100%|  55.0M|      0|squashfs| /snap/core18/1880 <ro,nodev,relatime>               |
/dev/loop3              |  0%|    0|      0|      0|      0(      0)| 100%|  30.0M|      0|squashfs| /snap/snapd/8790 <ro,nodev,relatime>                |
/run/snapd/ns           |  0%|    0|      0|      0|  12.6G(      0)|   0%|  12.6G|  15.7M| tmpfs  | /run/snapd/ns                                       |
/run/user/1004          |  0%|    0|      0|      0|  12.6G(      0)|   0%|  12.6G|  15.7M| tmpfs  | /run/user/1004 <rw,nosuid,nodev,relatime>           |
/sys/fs/cgroup          |  0%|    0|      0|      0|  62.9G(      0)|   0%|  62.9G|  15.7M| tmpfs  | /sys/fs/cgroup <ro,nosuid,nodev,noexec>             |
/run                    |  0%|    0|      0|      0|  12.6G(      0)|   0%|  12.6G|  15.7M| tmpfs  | /run <rw,nosuid,nodev,noexec,relatime>              |
/run/lock               |  0%|    0|      0|      0|   5.0M(      0)|   0%|   5.0M|  15.7M| tmpfs  | /run/lock <rw,nosuid,nodev,noexec,relatime>         |
/dev/shm                |  0%|    0|      0|      0|  62.9G(      0)|   0%|  62.9G|  15.7M| tmpfs  | /dev/shm <rw,nosuid,nodev>                          |
==========================================================================================================================================================
# python3 guider/guider.py wtop -g yes

[Top Info] [Time: 92197.480] [Inter: 1.0] [Ctxt: 72] [Life: +0/-0] [IRQ: 18] [Core: 8] [Task: 49/77] [Load: 0/0/0] [RAM: 3.7G] [Swap: 1.0G] [Bat: 99%/08:43:53/+]
==========================================================================================================================================================
  ID   |  CPU(Usr/Ker/Blk/IRQ)|MemAvl(Per/  User/ Cache/ Kern)| Swap( Per/ In/Out)|  PgRclm   | BlkRW | NrFlt |Blk| NrSIRQ | PgMlk | PgDirt |   NetIO    |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Total  |  1 %(  0/  0/  0/  0)|  3134( 18/   140/   941/  267)|    0(   0/  0/  0)|    0/0    |  0/0  |    0  | 0 |      0 |     0 |     36 |    0/0     |
----------------------------------------------------------------------------------------------------------------------------------------------------------
CPU [                                          ]    MEM [#######                                   ]    SWAP [                                          ]|
==========================================================================================================================================================
           Process ( PID/PPID/  Nr/ Pri)| CPU(Usr/Ker/Dly)| VSS( RSS/Txt/Shr/Swp)| Blk(  RD/  WR/NrFlt)|  SID|  USER|  FD| LifeTime|               Parent|
----------------------------------------------------------------------------------------------------------------------------------------------------------
             snapd (3094/   1/  15/C  0)|   0(  0/  0/  0)|1722(  43/  9/ 18/  0)|   0(   -/   -/    0)| 3094|  root| 128| 16:52:37|           systemd(1)|
                               MEM(VSS) | VSS: [   1.7G] ->    1.7G ->    1.7G ->    1.7G ->    1.7G ->    1.7G ->    1.7G ->    1.7G ->    1.7G
                               MEM(RSS) | RSS: [  45.4M] ->   45.4M ->   45.4M ->   45.4M ->   45.4M ->   45.4M ->   45.4M ->   45.4M ->   45.4M
                               MEM(PSS) | PSS: [  43.8M] ->   43.8M ->   43.8M ->   43.8M ->   43.8M ->   43.8M ->   43.8M ->   43.8M ->   43.8M
                               MEM(USS) | USS: [  43.7M] ->   43.7M ->   43.7M ->   43.7M ->   43.7M ->   43.7M ->   43.7M ->   43.7M ->   43.7M
                               MEM(WSS) | WSS: [   1.7M] ->       0 ->   12.7M ->   12.7M ->   12.7M ->   12.7M ->   12.7M ->   12.7M ->   12.7M
                           MEM(ANON/73) | VSS:   1.7G / RSS:  23.9M / PSS:  23.9M / SWAP:      0 / HUGE:  16M / LOCK:     0 / SDRT:      0 / PDRT:  23.9M|
                                        | WSS: [      0] ->       0 ->   12.2M ->   12.2M ->   12.2M ->   12.2M ->   12.2M ->   12.2M ->   12.2M
                            MEM(FILE/4) | VSS:  23.7M / RSS:  21.5M / PSS:  19.9M / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:   1.9M|
                                        | WSS: [   1.7M] ->       0 ->  436.0K ->  436.0K ->  436.0K ->  436.0K ->  436.0K ->  436.0K ->  436.0K
                            MEM(HEAP/1) | VSS: 132.0K / RSS:   4.0K / PSS:   4.0K / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:   4.0K|
                                        | WSS: [      0] ->       0 ->       0 ->       0 ->       0 ->       0 ->       0 ->       0 ->       0
                           MEM(OTHER/2) | VSS:  24.0K / RSS:   4.0K / PSS:      0 / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:      0|
                                        | WSS: [   4.0K] ->       0 ->    4.0K ->    4.0K ->    4.0K ->    4.0K ->    4.0K ->    4.0K ->    4.0K
                           MEM(STACK/1) | VSS: 132.0K / RSS:  20.0K / PSS:  20.0K / SWAP:      0 / HUGE:    0 / LOCK:     0 / SDRT:      0 / PDRT:  20.0K|
                                        | WSS: [      0] ->       0 ->       0 ->       0 ->       0 ->       0 ->       0 ->       0 ->       0
                               MEM(SUM) | VmPeak: 1.7G, VmHWM: 54.2M, VmData: 175.5M, HugetlbPages: 0, RssAnon: 24.7M, RssFile: 19.0M, RssShmem: 0       |
----------------------------------------------------------------------------------------------------------------------------------------------------------
                               [ TOTAL ]|   0.0(   0/   0)| RSS:  43.0M|Swp:    0|   0(   -/   -/    0)|      Yld: -|       Prmt: -|              Task: 1|
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py btrace -g a.out -H

         _start/0x55e321d151ee [/home/peacelee/test/a.out]
           __libc_start_main/0x7ffb520af0b3 [/lib/x86_64-linux-gnu/libc-2.31.so]
             main/0x55e321d15478 [/home/peacelee/test/a.out]
               printPeace/0x55e321d15451 [/home/peacelee/test/a.out]
                 printPeace2/0x55e321d15392 [/home/peacelee/test/a.out]
                   asdfasdfasdfasdfasdfasdfasfdasdfasdfasdfasdfasdfasdfas/0x55e321d152e2 [/home/peacelee/test/a.out]
0.000384             read@GLIBC_2.26/0x7ffb52199130(-0x1,0x0,0x0,0x0,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000391             close@GLIBC_2.4/0x7ffb52199970(-0x1,0x0,0xffffffffffffff80,0x0,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000398             printf/0x7ffb520ece10(0x55e321d1600a,0x9,0xffffffffffffff80,0x0,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000405               __vfprintf_internal/0x7ffb521019e0(0x7ffb522746a0,0x55e321d1600a,0x7fff41688b40,0x55e321d1600a,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000412                 __strchrnul_sse2/0x7ffb5213c820(0x55e321d1600a,0x25,0x7fff41688b40,0x55e321d1600a,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000420                 _IO_new_file_xsputn/0x7ffb5211a750(0x7ffb522746a0,0x55e321d1600a,0x3,0x55e321d1600a,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000426                   __mempcpy_sse2_unaligned_erms/0x7ffb52146d00(0x55e322290330,0x55e321d1600a,0x3,0x55e321d1600a,0x0,0x5) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000432                 _itoa_word/0x7ffb520e6760(0x9,0x7fff41688af8,0xa,0x55e321d1600e,-0x1,0x3) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000439                 _IO_new_file_xsputn/0x7ffb5211a750(0x7ffb522746a0,0x7fff41688af7,0x1,0x55e321d1600e,0x0,0x3) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000446                   __mempcpy_sse2_unaligned_erms/0x7ffb52146d00(0x55e322290333,0x7fff41688af7,0x1,0x55e321d1600e,0x0,0x3) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000452                 __strchrnul_sse2/0x7ffb5213c820(0x55e321d1600f,0x25,0x1,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000458                 _IO_new_file_xsputn/0x7ffb5211a750(0x7ffb522746a0,0x55e321d1600f,0x1,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000464                   __mempcpy_sse2_unaligned_erms/0x7ffb52146d00(0x55e322290334,0x55e321d1600f,0x1,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000471                   _IO_file_overflow@GLIBC_2.2.5/0x7ffb5211bf00(0x7ffb522746a0,-0x1,0xc00,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000480                   _IO_do_write@GLIBC_2.2.5/0x7ffb5211ba20(0x7ffb522746a0,0x55e322290330,0x5,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000486                     _IO_file_write@GLIBC_2.2.5/0x7ffb52119fe0(0x7ffb522746a0,0x55e322290330,0x5,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.000493                       write@GLIBC_2.2.5/0x7ffb521991d0(0x1,0x55e322290330,0x5,0x55e321d1600f,0x0,0x4) [/lib/x86_64-linux-gnu/libc-2.31.so]
# python3 guider/guider.py  btrace -g yes -H -c "*|getret"

0.532473       0x2cf0/0x560d7fd28cf0(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532488         0x4c40/0x560d7fd2ac40(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532501           write@GLIBC_2.2.5/0x7faab22f1040(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.532516           write@GLIBC_2.2.5[RET]=0x2000(8192)/0.000015 -> 0x4c40/0x560d7fd26000 [/usr/bin/yes]
0.532557         0x4c40[RET]=0x2000(8192)/0.000069 -> 0x2cf0/0x560d7fd26000 [/usr/bin/yes]
0.532618       0x2cf0[RET]=0x2000(8192)/0.000145 -> 0x2580/0x560d7fd26000 [/usr/bin/yes]
0.532678       0x2cf0/0x560d7fd28cf0(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532691         0x4c40/0x560d7fd2ac40(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532706           write@GLIBC_2.2.5/0x7faab22f1040(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.532721           write@GLIBC_2.2.5[RET]=0x2000(8192)/0.000015 -> 0x4c40/0x560d7fd26000 [/usr/bin/yes]
0.532798         0x4c40[RET]=0x2000(8192)/0.000107 -> 0x2cf0/0x560d7fd26000 [/usr/bin/yes]
0.532881       0x2cf0[RET]=0x2000(8192)/0.000204 -> 0x2580/0x560d7fd26000 [/usr/bin/yes]
0.532946       0x2cf0/0x560d7fd28cf0(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532961         0x4c40/0x560d7fd2ac40(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/usr/bin/yes]
0.532975           write@GLIBC_2.2.5/0x7faab22f1040(0x1,0x560d81815440,0x2000,0x7faab23c8640,0x560d81815440,0x7c) [/lib/x86_64-linux-gnu/libc-2.31.so]
0.532990           write@GLIBC_2.2.5[RET]=0x2000(8192)/0.000015 -> 0x4c40/0x560d7fd26000 [/usr/bin/yes]
0.533067         0x4c40[RET]=0x2000(8192)/0.000106 -> 0x2cf0/0x560d7fd26000 [/usr/bin/yes]
0.533194       0x2cf0[RET]=0x2000(8192)/0.000248 -> 0x2580/0x560d7fd26000 [/usr/bin/yes]
$ python3 guider/guider.py rtop &
$ cat /tmp/guider.report

{
  "task": {
    "nrThread": 397,
    "nrBlocked": 0,
    "nrCtx": 4290,
    "nrProc": 292
  },
  "mem": {
    "kernel": 1432,
    "anonDiff": -1,
    "pgRclmFg": 0,
    "cache": 35332,
    "slabDiff": 0,
    "free": 26929,
    "anon": 698,
    "pgDirty": 28,
    "file": 31751,
    "freeDiff": -1,
    "pgRclmBg": 0,
    "total": 64391,
    "slab": 3581,
    "fileDiff": -1
    "procs": {
      "1954": {
        "text": 0,
        "pid": 1954,
        "rank": 2,
        "comm": "ruby1.9.1",
        "runtime": "110:43:32",
        "rss": 104
      },
  },
  "storage": {
    "total": {
      "read": 0,
      "mount": {},
      "favail": 133443655,
      "free": 1141633,
      "write": 1,
      "usage": 1152423,
      "total": 2294056,
      "usageper": 50
    },
    "/dev/sdb1": {
      "read": 0,
      "mount": {
        "path": "/mnt/hdd1",
        "fs": "ext4",
        "option": "rw,relatime,data=ordered"
      },
      "favail": 50709466,
      "free": 293649,
      "write": 0,
      "usage": 645251,
      "total": 938900,
      "usageper": 68
    },
  },
  "system": {
    "load5m": 2.38,
    "uptime": 4191643.92,
    "nrSoftIrq": 7405,
    "nrIrq": 7289,
    "load15m": 0.84,
    "interval": 1.029999999795109,
    "pid": 14578,
    "load1m": 9.39
  },
  "event": {
    "CPU_INTENSIVE": {
      "14592": {
        "kernel": 0,
        "runtime": "0:0:47",
        "pid": 14592,
        "rank": 3,
        "comm": "yes",
        "user": 99,
        "total": 100
      },
      "14593": {
        "kernel": 0,
        "runtime": "0:0:46",
        "pid": 14593,
        "rank": 10,
        "comm": "yes",
        "user": 99,
        "total": 100
      },
  },
  "swap": {
    "usage": 76,
    "total": 65491,
    "usageDiff": 0
  },
  "net": {
    "inbound": 1479,
    "outbound": 392
  },
  "cpu": {
    "kernel": 0,
    "iowait": 0,
    "nrCore": 24,
    "idle": 8,
    "user": 91,
    "irq": 0,
    "total": 92,
    "procs": {
      "14592": {
        "kernel": 0,
        "runtime": "0:0:47",
        "pid": 14592,
        "rank": 3,
        "comm": "yes",
        "user": 99,
        "total": 100
      },
  },
  "block": {
    "read": 0,
    "write": 0,
    "procs": {},
    "nrMajFlt": 0,
    "ioWait": 0
  }
}
# python3 guider/guider.py limitcpu -g yes:50 -v

[Info] limited cpu usage of yes(22371) process to 50%, it used 50%

[WARN] <guider(574420)> started 1th guider(574420)

[WARN] <guider(574420)> 1th guider(574420) took 0.421747 seconds to finish one job
# python3 guider/guider.py sigtrace -g a.out

0.000929 [SIGABRT] {code=SI_TKILL, pid=signal(6858)|addr=0x1aca, uid=root(0), status=0}
[INFO] load /usr/lib/x86_64-linux-gnu/libc.so.6... [done]
[INFO] load /home/iipeace/test/a.out... [done]
==========================================================================================================================================================
        Backtrace Info [a.out(6858)<-a.out(6858)]
----------------------------------------------------------------------------------------------------------------------------------------------------------
pthread_kill@GLIBC_2.34+300/0x7f9656bd29fc[/usr/lib/x86_64-linux-gnu/libc.so.6]
gsignal@GLIBC_2.13+22/0x7f9656b7e476[/usr/lib/x86_64-linux-gnu/libc.so.6]
abort@GLIBC_2.2.5+211/0x7f9656b647f3[/usr/lib/x86_64-linux-gnu/libc.so.6]
0x893e0+662/0x7f9656bc5676[/usr/lib/x86_64-linux-gnu/libc.so.6]
__fortify_fail@GLIBC_2.2.5+42/0x7f9656c7259a[/usr/lib/x86_64-linux-gnu/libc.so.6]
__stack_chk_fail+22/0x7f9656c72566[/usr/lib/x86_64-linux-gnu/libc.so.6]
main+64/0x55a53b20e1f5[/home/iipeace/test/a.out]
0x29d10+128/0x7f9656b65d90[/usr/lib/x86_64-linux-gnu/libc.so.6]
__libc_start_main@GLIBC_2.2.5+128/0x7f9656b65e40[/usr/lib/x86_64-linux-gnu/libc.so.6]
[.text]+37/0x55a53b20e0a5[/home/iipeace/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------

0.001051 +++ exited a.out(6858) with 6(SIGABRT) +++
# python3 guider/guider.py setsched r:90:yes

[Info] changed the priority of yes(22371) to 90[R]
# python3 guider/guider.py remote -g a.out -c usercall:write#1#HOOK#4

[usercall] write(7f94ed747140)(1, HOOK, 4) = 0x4(4)
# python3 guider/guider.py printenv -g systemd

[ systemd(1) ]
-----------------------------------------------------------------------------
HOME=/
init=/sbin/init
NETWORK_SKIP_ENSLAVED=
recovery=
TERM=linux
drop_caps=
BOOT_IMAGE=/boot/vmlinuz-5.3.0-28-generic
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/
rootmnt=/root

[ systemd(3310) ]
-----------------------------------------------------------------------------
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NOTIFY_SOCKET=/run/systemd/notify
HOME=/home/syjung
LOGNAME=syjung
USER=syjung
SHELL=/bin/bash
INVOCATION_ID=bbc56cc8552e4a1d815197e0a6160270
JOURNAL_STREAM=9:10617556
XDG_RUNTIME_DIR=/run/user/1002

[ systemd(7094) ]
-----------------------------------------------------------------------------
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NOTIFY_SOCKET=/run/systemd/notify
HOME=/home/peacelee
LOGNAME=peacelee
USER=peacelee
SHELL=/bin/bash
INVOCATION_ID=be65ebdd72964e09a3ac06495261702b
JOURNAL_STREAM=9:31410
XDG_RUNTIME_DIR=/run/user/1004
# python3 guider/guider.py kill -stop yes

[Info] sent SIGSTOP to yes(10594)
# python3 guider/guider.py printbind -g yes

[Function Bind Info] [Target: yes(410113)]
==========================================================================================================================================================
Path      Type Sym[Bind/Vis] => Link
----------------------------------------------------------------------------------------------------------------------------------------------------------
[/usr/bin/yes]
	NOTYPE _ITM_deregisterTMCloneTable@GLIBC_2.2.5[WEAK/DEFAULT] => NONE
	NOTYPE _ITM_registerTMCloneTable@GLIBC_2.2.5[WEAK/DEFAULT] => NONE
	  FUNC __ctype_b_loc@GLIBC_2.2.5[GLOBAL/DEFAULT] => __ctype_b_loc/0x7f474b600400[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x37400]
	  FUNC __cxa_atexit@GLIBC_2.2.5[GLOBAL/DEFAULT] => __cxa_atexit@GLIBC_2.2.5/0x7f474b612f60[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x49f60]
	  FUNC __cxa_finalize@GLIBC_2.2.5[WEAK/DEFAULT] => __cxa_finalize@GLIBC_2.2.5/0x7f474b613090[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x4a090]
	  FUNC __fpending@GLIBC_2.2.5[GLOBAL/DEFAULT] => __fpending@GLIBC_2.2.5/0x7f474b658f80[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x8ff80]
	  FUNC __fprintf_chk[GLOBAL/DEFAULT] => __fprintf_chk@GLIBC_2.14/0x7f474b6fa110[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x131110]
	  FUNC __freading@GLIBC_2.2.5[GLOBAL/DEFAULT] => __freading@GLIBC_2.2.5/0x7f474b658e90[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x8fe90]
	NOTYPE __gmon_start__@GLIBC_2.14[WEAK/DEFAULT] => NONE
	  FUNC __libc_start_main@GLIBC_2.2.5[GLOBAL/DEFAULT] => __libc_start_main@GLIBC_2.2.5/0x7f474b5effc0[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x26fc0]
	  FUNC __printf_chk@GLIBC_2.2.5[GLOBAL/DEFAULT] => __printf_chk@GLIBC_2.2.5/0x7f474b6fa040[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x131040]
	  FUNC __stack_chk_fail@GLIBC_2.2.5[GLOBAL/DEFAULT] => __stack_chk_fail@GLIBC_2.2.5/0x7f474b6fbb00[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x132b00]
	  FUNC _exit@GLIBC_2.2.5[GLOBAL/DEFAULT] => _Exit@GLIBC_2.3/0x7f474b6af290[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0xe6290]
	  FUNC abort@GLIBC_2.2.5[GLOBAL/DEFAULT] => abort@GLIBC_2.2.5/0x7f474b5ee72e[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x2572e]
	  FUNC bindtextdomain@GLIBC_2.2.5[GLOBAL/DEFAULT] => bindtextdomain@GLIBC_2.2.5/0x7f474b600920[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x37920]
	  FUNC calloc[GLOBAL/DEFAULT] => calloc@GLIBC_2.2.5/0x7f474b667c90[/usr/lib/x86_64-linux-gnu/libc-2.31.so/0x9ec90]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py rec -a -e m,b

[Thread Info] [ Elapsed: 2.050 ] [ Start: 2849868.198 ] [ Running: 112 ] [ CtxSwc: 3357 ] [ LogSize: 4054 KB ] [ Unit: Sec/MB/NR ]
==========================================================================================================================================================
__________Thread Info___________|_____________CPU Info______________|______SCHED Info______|________BLOCK Info________|_____________MEM Info_____________|
                                |                                   |                      |                          |                                  |
            Name(  Tid/  Pid)|LF|Usage(    %)|Delay(  Max)|Pri| IRQ |  Yld| Lose|Steal| Mig| Read( MB/  Cnt)|WCnt( MB)| Sum(Usr/Buf/Ker)|Rcl|Wst|DRcl(Nr)|
==========================================================================================================================================================
# CPU: 12

          CORE/0(-----/-----)|--| 0.00(  0.1)| 0.00( 0.00)|  0| 0.00|    7|    -|    -|   -| 0.00(  0/    1)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/1(-----/-----)|--| 0.00(  0.1)| 0.10( 0.00)|  0| 0.00|  147|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/2(-----/-----)|--| 0.00(  0.1)| 0.16( 0.00)|  0| 0.00|  211|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/3(-----/-----)|--| 0.00(  0.1)| 0.11( 0.00)|  0| 0.00|  181|    -|    -|   -| 0.00(  0/    0)|  32(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/4(-----/-----)|--| 0.00(  0.1)| 0.11( 0.00)|  0| 0.00|  232|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/5(-----/-----)|--| 0.30( 14.8)| 0.18( 0.00)|  0| 0.00|  179|    -|    -|   -| 1.26(  6/  495)|  19(  0)|  61( 57/  0/  3)|  0|  0|0.00( 0)|
          CORE/6(-----/-----)|--| 0.00(  0.0)| 0.35( 0.00)|  0| 0.00|   57|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/7(-----/-----)|--| 0.00(  0.0)| 0.60( 0.00)|  0| 0.00|  100|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/8(-----/-----)|--| 0.00(  0.0)| 0.44( 0.00)|  0| 0.00|   59|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/9(-----/-----)|--| 0.00(  0.0)| 1.94( 0.00)|  0| 0.00|   37|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
         CORE/10(-----/-----)|--| 0.07(  3.4)| 0.00( 0.00)|  0| 0.00|    2|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
         CORE/11(-----/-----)|--| 0.00(  0.0)| 2.05( 0.00)|  0| 0.00|   39|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|

----------------------------------------------------------------------------------------------------------------------------------------------------------
# Hot: 4

        synergyc( 3604/ 3602)|  | 0.17(  8.5)| 0.00( 0.00)|  0| 0.00|    3|   14|    3|   0| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
 arm-starfish-li(16087/16087)|  | 0.13(  6.3)| 0.00( 0.00)|  0| 0.00|    0|   20|  157|   4| 1.26(  6/  496)|   0(  0)|  61( 57/  0/  3)|  0|  0|0.00( 0)|
          guider(16088/16088)|  | 0.07(  3.4)| 0.00( 0.00)|R90| 0.00|    2|    0|    2|   0| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|

----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py iorec -s
# python3 guider/guider.py report -a

[Thread Block Info] (Unit: NR)
==========================================================================================================================================================
           ID               OPT    NrDev                TOTAL         SEQUENTIAL(    %)      FS              PATH        
                                                     [ACCESS]                     COUNT                                  
==========================================================================================================================================================
          TOTAL            READ      8:3               131.8M             131.3M( 99.6)      -       /dev/sda3
                                          [   4.0K -    7.0K]                       370                                  
                                          [  16.0K -   31.0K]                        11                                  
                                          [  32.0K -   63.0K]                         6                                  
                                          [  64.0K -  127.0K]                         5                                  
                                          [ 128.0K -  255.0K]                      1037                                  
                                   253:0               131.8M             131.3M( 99.6)     ext4     / <rw,relatime>
                                          [   4.0K -    7.0K]                       370                                  
                                          [  16.0K -   31.0K]                        11                                  
                                          [  32.0K -   63.0K]                         6                                  
                                          [  64.0K -  127.0K]                         5                                  
                                          [ 128.0K -  255.0K]                      1037                                  
                          WRITE    253:0                40.0K              20.0K( 50.0)     ext4     / <rw,relatime>
                                          [   4.0K -    7.0K]                        10                                  
                                     8:3                24.0K              20.0K( 83.3)      -       /dev/sda3
                                          [   4.0K -    7.0K]                         6                                  
----------------------------------------------------------------------------------------------------------------------------------------------------------
          guider(4011197)  READ      8:3               100.0M             100.0M(100.0)      -       /dev/sda3
                                          [  16.0K -   31.0K]                         2                                  
                                          [  32.0K -   63.0K]                         1                                  
                                          [  64.0K -  127.0K]                         1                                  
                                          [ 128.0K -  255.0K]                       799                                  
                                   253:0               100.0M             100.0M(100.0)     ext4     / <rw,relatime>
                                          [  16.0K -   31.0K]                         2                                  
                                          [  32.0K -   63.0K]                         1                                  
                                          [  64.0K -  127.0K]                         1                                  
                                          [ 128.0K -  255.0K]                       799                                  
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Thread FS Info] (Unit: NR)
==========================================================================================================================================================
           ID                 OPT    NrDev        INODE         Size           FS PATH                                                                       
==========================================================================================================================================================
          TOTAL             WRITE                              16.0K 
                                     253:0                     16.0K         ext4 / <rw,relatime>
                                                      0        16.0K
                             READ                             131.8M
                                       0:3                      1.4M            ? ?
                                                      0         1.4M
                                     253:0                    130.4M         ext4 / <rw,relatime>
                                               24520383       100.0M              /home/peacelee/guider/guider/TEST2[100.0M]
                                               24520372        20.0M              /home/peacelee/guider/guider/TEST[20.0M]
                                               24520353        10.0M              /home/peacelee/guider/guider/TEST3[10.0M]
                                                6030383        84.0K
                                                6819964        72.0K
                                                6029790        68.0K
                                                6031485        44.0K
                                                6031543        40.0K
                                                6819797        16.0K
                                                6035523        16.0K
                                                      0        16.0K
                                                6818557         4.0K
                                                6818689         4.0K
                                                7078584         4.0K
----------------------------------------------------------------------------------------------------------------------------------------------------------
          guider(4011197)    READ                             100.0M
                                     253:0                    100.0M         ext4 / <rw,relatime>
                                               24520383       100.0M              /home/peacelee/guider/guider/TEST2[100.0M]
----------------------------------------------------------------------------------------------------------------------------------------------------------
          guider(4011193)    READ                              20.0M
                                     253:0                     20.0M         ext4 / <rw,relatime>
                                               24520372        20.0M              /home/peacelee/guider/guider/TEST[20.0M]
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py iorec -s
# python3 guider/guider.py report -q RALIST
# python3 guider/guider.py readahead readahead.list

[INFO] start readahead from '/home/peacelee/guider/guider/readahead.list'

[INFO] changed the CPU scheduling priority for guider(4011281) to 10[C]

[INFO] changed the I/O scheduling priority for guider(4011281) to IOPRIO_CLASS_IDLE(0)[IOPRIO_WHO_PROCESS]

[INFO] finished readahead a total of 130.0M data for 0.002 sec
# python3 guider/guider.py sysrec 

[Thread Syscall Info] (Unit: Sec/NR)
==========================================================================================================================================================
            Name(  Tid)                        Syscall( ID)      Elapsed        Count        Error          Min          Max          Avg
==========================================================================================================================================================
 arm-linux-gnuea( 3000)
                                                 close(  3)     0.039396           69            0     0.000001     0.005353     0.000571
                                                  stat(  4)     0.011521           74            0     0.000001     0.009423     0.000156
                                                fchmod( 91)     0.000046            3            0     0.000002     0.000039     0.000015
                                           getpriority(140)     0.000017           33            0     0.000000     0.000001     0.000001
                                             lgetxattr(192)     0.000014            3            0     0.000003     0.000008     0.000005
                                              recvfrom( 45)     0.000004            1            0     0.000004     0.000004     0.000004

----------------------------------------------------------------------------------------------------------------------------------------------------------
          guider( 3001)
                                                 pause( 34)     0.283474            1            1     0.283474     0.283474     0.283474
                                                select( 23)     0.100122            1            0     0.100122     0.100122     0.100122
                                                 write(  1)     0.000234            6            0     0.000031     0.000059     0.000039
                                                  open(  2)     0.000084            7            0     0.000007     0.000038     0.000012
                                                 ioctl( 16)     0.000009           14           14     0.000001     0.000001     0.000001
                                                 fstat(  5)     0.000006           14            0     0.000001     0.000001     0.000000
                                                 lseek(  8)     0.000006           21            0     0.000000     0.000001     0.000000
                                                 close(  3)     0.000005            7            0     0.000000     0.000001     0.000001
                                          rt_sigaction( 13)     0.000001            1            0     0.000001     0.000001     0.000001

----------------------------------------------------------------------------------------------------------------------------------------------------------
          mysqld( 3237)
                                                 futex(202)     0.000000            1            0     0.000000     0.000000     0.000000

----------------------------------------------------------------------------------------------------------------------------------------------------------
          mysqld( 3238)
                                                 futex(202)     0.000002            1            0     0.000002     0.000002     0.000002

----------------------------------------------------------------------------------------------------------------------------------------------------------
          screen( 9045)
                                                select( 23)     0.000082            4            0     0.000004     0.000069     0.000021
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py rec -e L

[Thread Futex Lock Info] [ Elapsed : 1.225 ] (Unit: Sec/NR)
==========================================================================================================================================================
            Name(  Tid/  Pid)    Elapsed    Process      Block  NrBlock    CallMax       Lock    LockMax   NrLock   NrWait     LBlock NrLBlock   LastStat
==========================================================================================================================================================
          mysqld( 3236/ 3208)      0.469      0.000      0.469        1      0.469      0.000      0.000        0        1      0.000        0       Wait
----------------------------------------------------------------------------------------------------------------------------------------------------------
          mysqld( 3237/ 3208)      0.890      0.000      0.890        1      0.890      0.000      0.000        0        1      0.000        0       Wait
----------------------------------------------------------------------------------------------------------------------------------------------------------
          mysqld( 3238/ 3208)      1.075      0.000      1.075        1      1.075      0.000      0.000        0        1      0.000        0       Wait
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Thread File Lock Info] (Unit: Sec/NR)
==========================================================================================================================================================
            Name(  Tid)         Wait            Lock     nrTryLock    nrLocked
==========================================================================================================================================================
            smbd( 2631)        0.000           0.000             3           3
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py rec -s . -K openfile:getname::**string

[Thread KERNEL Event Info]
==========================================================================================================================================================
             Event                           Comm( Tid )      Usage      Count    ProcMax    ProcMin   InterMax   InterMin
==========================================================================================================================================================
            openfile                        TOTAL(  -  )   0.000729       1012   0.000013   0.000001   1.979834   0.000109
                                               ps(10728)   0.000640        968   0.000013   0.000000   0.001636   0.000006
                                          python2(10727)   0.000038         26   0.000004   0.000001   1.979834   0.000020
                                             tmux( 6959)   0.000031          9   0.000006   0.000003   0.299492   0.201316
                                   PassengerAgent(23183)   0.000008          5   0.000002   0.000001   0.007375   0.000109
                                     sendmail-mta( 3419)   0.000007          2   0.000006   0.000001   0.000077   0.000077
                                   PassengerAgent(10729)   0.000003          1   0.000003   0.000003   0.000000   0.000000
                                             smbd(11086)   0.000002          1   0.000002   0.000002   0.000000   0.000000
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Thread KERNEL Event History]
==========================================================================================================================================================
             EVENT                TYPE     TIME                COMM(  TID)         CALLER            ELAPSED ARG
==========================================================================================================================================================
            openfile               EXIT   0.063942             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7969/cmdline"
            openfile              ENTER   0.137626          python2(10727)                                 -
            openfile               EXIT   0.137628          python2(10727)      porch_do_sys_open   0.000002  1>"/sys/kernel/debug/tracing/trace"
            openfile              ENTER   0.363431             tmux( 6959)                                 -
            openfile               EXIT   0.363437             tmux( 6959)      porch_do_sys_open   0.000006  1>"/proc/7197/cmdline"
            openfile              ENTER   0.510452             smbd(11086)                                 -
            openfile               EXIT   0.510454             smbd(11086)      porch_do_sys_open   0.000002  1>"/var/log/samba/log.jhkim-z97x-ud3h"
            openfile              ENTER   0.564845             tmux( 6959)                                 -
            openfile               EXIT   0.564848             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7969/cmdline"
            openfile              ENTER   0.864255             tmux( 6959)                                 -
            openfile               EXIT   0.864258             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7197/cmdline"
            openfile              ENTER   1.065571             tmux( 6959)                                 -
            openfile               EXIT   1.065574             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7969/cmdline"
            openfile              ENTER   1.364980             tmux( 6959)                                 -
            openfile               EXIT   1.364984             tmux( 6959)      porch_do_sys_open   0.000004  1>"/proc/7197/cmdline"
            openfile              ENTER   1.437128     sendmail-mta( 3419)                                 -
            openfile               EXIT   1.437134     sendmail-mta( 3419)      porch_do_sys_open   0.000006  1>"/proc/loadavg"
            openfile              ENTER   1.437205     sendmail-mta( 3419)                                 -
            openfile               EXIT   1.437206     sendmail-mta( 3419)      porch_do_sys_open   0.000001  1>"/proc/loadavg"
            openfile              ENTER   1.566369             tmux( 6959)                                 -
            openfile               EXIT   1.566372             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7969/cmdline"
            openfile              ENTER   1.865776             tmux( 6959)                                 -
            openfile               EXIT   1.865779             tmux( 6959)      porch_do_sys_open   0.000003  1>"/proc/7197/cmdline"
            openfile              ENTER   1.955265   PassengerAgent(10729)                                 -
            openfile               EXIT   1.955268   PassengerAgent(10729)      porch_do_sys_open   0.000003  1>"/dev/fd"
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py funcrec -s .
# python3 guider/guider.py report -a
# cat guider.out

[Function CPU Info] [Cnt: 394] [Interval: 8ms] (USER)
==========================================================================================================================================================
__Usage__|___________________Function____________________|_____________________________________________Binary_____________________________________________
==========================================================================================================================================================
   99.0% |                    cpuTest                    | /media/disk/work/test/a.out
   +  100.0% | <- startTest [/media/disk/work/test/a.out] <- main [/media/disk/work/test/a.out]
                 <- __libc_start_main [/lib/x86_64-linux-gnu/libc-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
    0.5% |                    memset                     | /lib/x86_64-linux-gnu/libc-2.19.so
   +  100.0% | <- startTest [/media/disk/work/test/a.out] <- main [/media/disk/work/test/a.out]
                 <- __libc_start_main [/lib/x86_64-linux-gnu/libc-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
    0.3% |                  _int_malloc                  | /lib/x86_64-linux-gnu/libc-2.19.so
----------------------------------------------------------------------------------------------------------------------------------------------------------
    0.3% |               00007f756e3e7ee4                | ??
   +  100.0% | <- 000000000044676f [/media/disk/work/test/a.out]
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Function CPU Info] [Cnt: 394] [Interval: 8ms] (KERNEL)
==========================================================================================================================================================
__Usage__|____________________________________________________________________Function____________________________________________________________________
==========================================================================================================================================================
  100.0% |                                                          hrtimer_interrupt
   +   99.5% | <- local_apic_timer_interrupt <- smp_apic_timer_interrupt <- apic_timer_interrupt
   +    0.3% | <- local_apic_timer_interrupt <- smp_apic_timer_interrupt <- apic_timer_interrupt <- do_page_fault <- page_fault
   +    0.3% | <- local_apic_timer_interrupt <- smp_apic_timer_interrupt <- apic_timer_interrupt <- __do_fault <- handle_mm_fault <- __do_page_fault
                 <- do_page_fault <- page_fault
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py funcrec -e m -s .
# python3 guider/guider.py report -a
# cat guider.out

[Function Page Info] [Total: 11.4M] [Alloc: 11.4M(817)] [Free: 188.0K(47)] (USER)
==========================================================================================================================================================
 Usage ( Usr  / Buf  / Ker  )|___________________Function____________________|________________LifeTime________________|______________Binary_______________
==========================================================================================================================================================
 10256K(  2048/     0/  8208)|                    memset                     | AVR: 1.563 / MIN: 1.560 / MAX: 1.568   | /lib/x86_64-linux-gnu/libc-2.19.so
  +  10256K(  2048/     0/  8208)| <- startTest [/media/disk/work/test/a.out] <- main [/media/disk/work/test/a.out]
                                     <- __libc_start_main [/lib/x86_64-linux-gnu/libc-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
   960K(   956/     0/     4)|                  _int_malloc                  | AVR: 1.559 / MIN: 1.554 / MAX: 1.560   | /lib/x86_64-linux-gnu/libc-2.19.so
----------------------------------------------------------------------------------------------------------------------------------------------------------
    56K(    16/     0/    40)|               00007f756e3e81e7                | AVR: 1.569 / MIN: 1.568 / MAX: 1.569   | ??
----------------------------------------------------------------------------------------------------------------------------------------------------------
    44K(    36/     0/     8)|                   sysmalloc                   | AVR: 1.560 / MIN: 1.558 / MAX: 1.568   | /lib/x86_64-linux-gnu/libc-2.19.so
----------------------------------------------------------------------------------------------------------------------------------------------------------
    12K(    12/     0/     0)|           elf_machine_rela_relative           | AVR: 1.568 / MIN: 1.568 / MAX: 1.568   | /lib/x86_64-linux-gnu/ld-2.19.so
  +     12K(    12/     0/     0)| <- dl_main [/lib/x86_64-linux-gnu/ld-2.19.so] <- _dl_sysdep_start [/lib/x86_64-linux-gnu/ld-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
     8K(     8/     0/     0)|                    realloc                    | AVR: 1.568 / MIN: 1.568 / MAX: 1.568   | /lib/x86_64-linux-gnu/ld-2.19.so
  +      4K(     4/     0/     0)| <- _dl_map_object [/lib/x86_64-linux-gnu/ld-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------
     8K(     4/     0/     4)|                    dl_main                    | AVR: 1.568 / MIN: 1.568 / MAX: 1.568   | /lib/x86_64-linux-gnu/ld-2.19.so
  +      8K(     4/     0/     4)| <- _dl_sysdep_start [/lib/x86_64-linux-gnu/ld-2.19.so]
----------------------------------------------------------------------------------------------------------------------------------------------------------

[Function Page Info] [Total: 11.4K] [Alloc: 11.4K(817)] [Free: 188.0K(47)] (KERNEL)
==========================================================================================================================================================
 Usage ( Usr  / Buf  / Ker  )|___________________Function____________________|__________________________________LifeTime__________________________________
==========================================================================================================================================================
  8192K(     0/     0/  8192)|          do_huge_pmd_anonymous_page           |                    AVR: 1.563 / MIN: 1.562 / MAX: 1.564
  +   8192K(     0/     0/  8192)| <- handle_mm_fault <- __do_page_fault <- do_page_fault <- page_fault
----------------------------------------------------------------------------------------------------------------------------------------------------------
  3084K(  3084/     0/     0)|                handle_mm_fault                |                    AVR: 1.563 / MIN: 1.554 / MAX: 1.569
  +   3076K(  3076/     0/     0)| <- __do_page_fault <- do_page_fault <- page_fault
  +      4K(     4/     0/     0)| <- __get_user_pages <- get_user_pages <- copy_strings.isra.17 <- copy_strings_kernel <- do_execve_common.isra.23
                                     <- SyS_execve <- stub_execve
  +      4K(     4/     0/     0)| <- __do_page_fault <- do_page_fault <- page_fault <- load_elf_binary <- search_binary_handler
                                     <- do_execve_common.isra.23 <- SyS_execve <- stub_execve
----------------------------------------------------------------------------------------------------------------------------------------------------------
# python3 guider/guider.py filerec 

[File Usage Info] [File: 213] [RAM: 175.2M] [Reclaim: 0/0] [Uptime: 1d:01:42:33] [Keys: Foward/Back/Save/Quit]
==========================================================================================================================================================
__RAM___|__File__|__%__|__PSS___|____________________________________________________Library & Process____________________________________________________
==========================================================================================================================================================
  39.1M |  39.1M | 100 |  39.1M | /var/lib/snapd/snaps/snapd_21184.snap [Proc: 1] [Link: 1] [Open: 1]
                                |         snapfuse (    125) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.3M |   8.0M |  66 |   5.3M | /var/log/journal/758ca7c4e01db1a1cae9325f634ab22a/system.journal [Proc: 1] [Link: 1] [Open: 1]
                                |  systemd-journal (     56) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.2M |   5.2M | 100 |   5.2M | /home/iipeace/guider/guider/.guider.py.swp [Proc: 1] [Link: 1] [Open: 1]
                                |               vi (   6732) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
   5.1M |   5.6M |  90 |   2.5M | /usr/bin/python3.10 [Proc: 2] [Link: 1] [Map: 2]
                                |  networkd-dispat (    178) |  unattended-upgr (    341) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
   3.8M |   4.2M |  89 | 434.7K | /usr/lib/x86_64-linux-gnu/libcrypto.so.3 [Proc: 9] [Link: 1] [Map: 9]
                                |          systemd (      1) |  systemd-journal (     56) |    systemd-udevd (     85) |  systemd-network (    172) |
                                |   systemd-logind (    190) |          udisksd (    198) |  systemd-resolve (    262) |             sshd (    829) |
                                |      packagekitd (   3858) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
   3.7M |   8.0M |  46 |   3.7M | /var/log/journal/758ca7c4e01db1a1cae9325f634ab22a/user-1000.journal [Proc: 1] [Link: 1] [Open: 1]
                                |  systemd-journal (     56) |
----------------------------------------------------------------------------------------------------------------------------------------------------------
$ python3 guider/guider.py top -o guider.out
$ python3 guider/guider.py draw guider.out

graph

chart

# python3 guider/guider.py rec -s guider.dat
# python3 guider/guider.py draw guider.dat

timeline

# python3 guider/guider.py utop -g testTask -H -o guider.out
# python3 guider/guider.py drawflame guider.out

flamegraph

$ python3 guider/guider.py top -o test1.out
$ python3 guider/guider.py top -o test2.out
$ python3 guider/guider.py top -o test3.out
$ python3 guider/guider.py drawavg "test1.out" "test2.out" "test3.out"
$ python3 guider/guider.py drawavg "test*.out"

drawavg

$ python3 guider/guider.py req "https://www.google.com|https://www.naver.com" -R 1000 -o guider.out
$ python3 guider/guider.py drawreq guider.out

drawreq

$ python3 guider/guider.py top -o test1.out
$ python3 guider/guider.py top -o test2.out
$ python3 guider/guider.py top -o test3.out
$ python3 guider/guider.py drawviolin "test.out" "test2.out" "test3.out"
$ python3 guider/guider.py drawviolin "test*.out"

violingraph

webservice

dashboard

How to use

To view a list of all commands supported by Guider, enter one of the following commands:
    $ python3 guider/guider.py --help
    $ python3 -m guider --help
    $ guider --help

To start tracing for all threads, use the following command:
    # python3 guider/guider.py rec -a

To start tracing for all threads, use the following command:
    $ python3 guider/guider.py top -a

To view options and examples for each command, enter a command in the following format:
    $ python3 guider/guider.py rec -h
    $ python3 guider/guider.py top -h

To view the output of Guider, visit the following link:
    - https://github.com/iipeace/guider/wiki

Build & Installation

To install Guider using pip, enter the following commands:
    # pip3 install guider
    # pip3 install guider --no-deps
    # pip3 install guider --force-reinstall

After installation, run one of the following commands to start Guider:
    # python3 -m guider
    # guider

If you don't have pip on your system, you can download the source code from https://github.com/iipeace/guider, and then run the following command to start Guider:
    # python3 guider/guider.py

For faster and lighter operation, you can build and install Guider from the source code by running the following commands:
    # cd guider && make && make install

Pre-built versions of Guider are available at https://repology.org/project/guider/versions.

Kernel Configuration

Enable kernel options as below to take advantage of all profile features,
And if CONFIG_STRICT_MEMORY_RWX is enabled then disable it

CONFIG_RING_BUFFER
CONFIG_FTRACE
CONFIG_TRACING
CONFIG_TRACING_SUPPORT
CONFIG_EVENT_TRACING
CONFIG_NOP_TRACER
CONFIG_TRACEPOINTS
CONFIG_DYNAMIC_FTRACE
CONFIG_HAVE_DYNAMIC_FTRACE
CONFIG_FTRACE_SYSCALLS
CONFIG_HAVE_SYSCALL_TRACEPOINTS
CONFIG_TRACE_IRQFLAGS
CONFIG_TRACE_IRQFLAGS_SUPPORT

CONFIG_STACKTRACE
CONFIG_STACKTRACE_SUPPORT
CONFIG_USER_STACKTRACE_SUPPORT
CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER
CONFIG_UPROBES
CONFIG_UPROBE_EVENT
CONFIG_KPROBES
CONFIG_KPROBE_EVENTS

CONFIG_TASKSTATS
CONFIG_TASK_DELAY_ACCT
CONFIG_TASK_XACCT
CONFIG_TASK_IO_ACCOUNTING
CONFIG_PERF_EVENTS 
CONFIG_HW_PERF_EVENT

Help

Usage:
    $ guider COMMAND [OPTIONS] [--help]
                
COMMAND(153):
    [CONTROL]       cgroup            <Cgroup>        (Linux)
                    freeze            <Thread>        (Linux)
                    hook              <Function>      (Linux)
                    kill/tkill        <Signal>        (Linux/MacOS)
                    limitcpu          <CPU>           (Linux)
                    limitcpuset       <CPU>           (Linux)
                    limitmem          <Memory>        (Linux)
                    limitpid          <Task>          (Linux)
                    limitread         <I/O>           (Linux)
                    limitwrite        <I/O>           (Linux)
                    pause             <Thread>        (Linux)
                    remote            <Command>       (Linux)
                    rlimit            <Resource>      (Linux)
                    setafnt           <Affinity>      (Linux)
                    setcpu            <Clock>         (Linux)
                    setsched          <Priority>      (Linux)

    [LOG]           logand            <Android>       (Linux)
                    logdlt            <DLT>           (Linux)
                    logjrl            <Journal>       (Linux)
                    logkmsg           <Kernel>        (Linux)
                    logsys            <Syslog>        (Linux)
                    logtrace          <Ftrace>        (Linux)
                    printand          <Android>       (Linux)
                    printdlt          <DLT>           (Linux/MacOS/Windows)
                    printjrl          <Journal>       (Linux)
                    printkmsg         <Kernel>        (Linux)
                    printsyslog       <Syslog>        (Linux)
                    printtrace        <Ftrace>        (Linux)

    [MONITOR]       atop              <All>           (Linux)
                    bgtop             <Background>    (Linux/MacOS/Windows)
                    btop              <Function>      (Linux)
                    cgtop             <Cgroup>        (Linux)
                    ctop              <Threshold>     (Linux/MacOS/Windows)
                    dbustop           <D-Bus>         (Linux)
                    disktop           <Storage>       (Linux/MacOS/Windows)
                    dlttop            <DLT>           (Linux/MacOS)
                    fetop             <File>          (Linux)
                    ftop              <File>          (Linux/MacOS)
                    irqtop            <IRQ>           (Linux)
                    kftop             <Function>      (Linux)
                    ktop              <Function>      (Linux)
                    mtop              <Memory>        (Linux)
                    ntop              <Network>       (Linux/MacOS/Windows)
                    ptop              <PMU>           (Linux)
                    pytop             <Python>        (Linux)
                    rtop              <JSON>          (Linux/MacOS/Windows)
                    slabtop           <Slab>          (Linux)
                    stacktop          <Stack>         (Linux)
                    systop            <Syscall>       (Linux)
                    top               <Process>       (Linux/MacOS/Windows)
                    trtop             <Tree>          (Linux)
                    ttop              <Thread>        (Linux)
                    utop              <Function>      (Linux)
                    vtop              <Memory>        (Linux)
                    wtop              <WSS>           (Linux)

    [NETWORK]       cli               <Client>        (Linux/MacOS/Windows)
                    event             <Event>         (Linux)
                    fserver           <File>          (Linux/MacOS/Windows)
                    hserver           <Http>          (Linux/MacOS/Windows)
                    list              <List>          (Linux/MacOS/Windows)
                    send              <UDP>           (Linux/MacOS/Windows)
                    server            <Server>        (Linux/MacOS)
                    start             <Signal>        (Linux)

    [PROFILE]       filerec           <File>          (Linux)
                    funcrec           <Function>      (Linux)
                    genrec            <System>        (Linux)
                    iorec             <I/O>           (Linux)
                    mem               <Page>          (Linux)
                    rec               <Thread>        (Linux)
                    report            <Report>        (Linux)
                    sysrec            <Syscall>       (Linux)

    [TEST]          cputest           <CPU>           (Linux/MacOS/Windows)
                    iotest            <Storage>       (Linux/MacOS/Windows)
                    memtest           <Memory>        (Linux/MacOS/Windows)
                    nettest           <Network>       (Linux)

    [TRACE]         btrace            <Function>      (Linux)
                    leaktrace         <Leak>          (Linux)
                    mtrace            <Memory>        (Linux)
                    pytrace           <Python>        (Linux)
                    sigtrace          <Signal>        (Linux)
                    strace            <Syscall>       (Linux)
                    utrace            <Function>      (Linux)

    [UTIL]          addr2sym          <Symbol>        (Linux/MacOS/Windows)
                    checkdup          <Page>          (Linux)
                    comp              <Compress>      (Linux/MacOS/Windows)
                    decomp            <Decompress>    (Linux/MacOS/Windows)
                    dirdiff           <Dir>           (Linux/MacOS/Windows)
                    dump              <Memory>        (Linux)
                    exec              <Command>       (Linux/MacOS/Windows)
                    fadvise           <File>          (Linux)
                    flush             <Memory>        (Linux)
                    getafnt           <Affinity>      (Linux)
                    getpid            <PID>           (Linux)
                    less              <Pager>         (Linux/MacOS/Windows)
                    merge             <File>          (Linux/MacOS/Windows)
                    mkcache           <Cache>         (Linux/MacOS/Windows)
                    mount             <Mount>         (Linux)
                    ping              <ICMP>          (Linux/MacOS/Windows)
                    print             <File>          (Linux/MacOS/Windows)
                    printbind         <Function>      (Linux)
                    printcg           <Cgroup>        (Linux)
                    printdbus         <D-Bus>         (Linux)
                    printdbusintro    <D-Bus>         (Linux)
                    printdbusstat     <D-Bus>         (Linux)
                    printdbussub      <D-Bus>         (Linux)
                    printdir          <Dir>           (Linux/MacOS/Windows)
                    printenv          <Env>           (Linux)
                    printext          <Ext4>          (Linux/MacOS/Windows)
                    printinfo         <System>        (Linux)
                    printkconf        <kernel>        (Linux)
                    printns           <Namespace>     (Linux)
                    printsdfile       <Systemd>       (Linux)
                    printsdinfo       <Systemd>       (Linux)
                    printsdunit       <Systemd>       (Linux)
                    printsig          <Signal>        (Linux)
                    printslab         <Slab>          (Linux)
                    printvma          <Vmalloc>       (Linux)
                    pstree            <Process>       (Linux/MacOS/Windows)
                    readahead         <File>          (Linux)
                    readelf           <File>          (Linux/MacOS/Windows)
                    req               <URL>           (Linux/MacOS/Windows)
                    split             <File>          (Linux/MacOS/Windows)
                    strings           <Text>          (Linux/MacOS/Windows)
                    sym2addr          <Address>       (Linux/MacOS/Windows)
                    sync              <File>          (Linux)
                    sysrq             <sysrq>         (Linux)
                    systat            <Status>        (Linux)
                    topdiff           <Diff>          (Linux/MacOS/Windows)
                    topsum            <Summary>       (Linux/MacOS/Windows)
                    umount            <Unmount>       (Linux)
                    watch             <File>          (Linux)

    [VISUAL]        convert           <Text>          (Linux/MacOS/Windows)
                    draw              <System>        (Linux/MacOS/Windows)
                    drawavg           <Average>       (Linux/MacOS/Windows)
                    drawbitmap        <Bitmap>        (Linux/MacOS/Windows)
                    drawcpu           <CPU>           (Linux/MacOS/Windows)
                    drawcpuavg        <CPU>           (Linux/MacOS/Windows)
                    drawdelay         <Delay>         (Linux/MacOS/Windows)
                    drawflame         <Function>      (Linux/MacOS/Windows)
                    drawhist          <Histogram>     (Linux/MacOS/Windows)
                    drawio            <I/O>           (Linux/MacOS/Windows)
                    drawleak          <Leak>          (Linux/MacOS/Windows)
                    drawmem           <Memory>        (Linux/MacOS/Windows)
                    drawmemavg        <Memory>        (Linux/MacOS/Windows)
                    drawpri           <Prio>          (Linux/MacOS/Windows)
                    drawreq           <URL>           (Linux/MacOS/Windows)
                    drawrss           <RSS>           (Linux/MacOS/Windows)
                    drawrssavg        <RSS>           (Linux/MacOS/Windows)
                    drawstack         <System>        (Linux/MacOS/Windows)
                    drawtime          <Timeline>      (Linux/MacOS/Windows)
                    drawviolin        <Data>          (Linux/MacOS/Windows)
                    drawvss           <VSS>           (Linux/MacOS/Windows)
                    drawvssavg        <VSS>           (Linux/MacOS/Windows)

FILE:
    Profile file (e.g. guider.dat)
    Report  file (e.g. guider.out)

Options:
    Check COMMAND with --help (e.g. guider top --help)

guider's People

Contributors

agathanam avatar agrajak avatar alexmyczko avatar cheerfulmsp avatar choibyeonguk avatar corneacristian avatar gitter-badger avatar gomjellie avatar gy741 avatar gyulkkajo avatar honggyukim avatar hongyeolbae avatar iipeace avatar jmg7173 avatar johnlukeabe avatar kangwoojin avatar kdragonl avatar lightkds avatar moonhyuk avatar pyotel avatar sssunda avatar wikihur avatar yangsso avatar yoonje avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

guider's Issues

How to use function/thread trace?

Hi,

Could you please inform me how to use function trace and thread trace feature?

  1. I tried to use function trace but it failed as following.
gkim@ib1:~/guider$ sudo ./guider.py record -f

[Info] FUNCTION MODE

[Info] enabled recording options [ X64 CPU USER ]

[Info] disabled recording options [ GRAPH MEMORY HEAP BLOCK ]

[Step] start recording... [ STOP(ctrl + c), MARK(ctrl + \) ]
^C
[Step] ready to save and analyze... [ STOP(ctrl + c) ]

[Error] wrong option with -f, use also -s option to save data

gkim@ib1:~/guider$ sudo ./guider.py record -f -s ./record.out

[Info] FUNCTION MODE

[Info] enabled recording options [ X64 CPU USER ]

[Info] disabled recording options [ GRAPH MEMORY HEAP BLOCK ]

[Step] start recording... [ STOP(ctrl + c), MARK(ctrl + \) ]
^C
[Step] ready to save and analyze... [ STOP(ctrl + c) ]

[Error] Fail to recognize format: corrupted log / no log collected

gkim@ib1:~/guider$ sudo ./guider.py record -f -s /var/log/guider.out

[Info] FUNCTION MODE

[Info] enabled recording options [ X64 CPU USER ]

[Info] disabled recording options [ GRAPH MEMORY HEAP BLOCK ]

[Step] start recording... [ STOP(ctrl + c), MARK(ctrl + \) ]
^C
[Step] ready to save and analyze... [ STOP(ctrl + c) ]

[Error] Fail to recognize format: corrupted log / no log collected
  1. And I tried thread tracing but I couldn't get any thread information.
gkim@ib1:~/guider$ sudo ./guider.py record

[Thread Info] [ Elapsed: 0.929 ] [ Start: 326560.149 ] [ Running: 31 ] [ CtxSwc: 63 ] [ LogSize: 159 KB ] [ Unit: Sec/MB ]
==========================================================================================================================================================
__________Thread Info___________|_____________CPU Info______________|______SCHED Info______|________BLOCK Info________|_____________MEM Info_____________|
                                |                                   |                      |                          |                                  |
            Name(  Tid/  Pid)|LF|Usage(    %)|Delay(  Max)|Pri| IRQ |  Yld| Lose|Steal| Mig| Read( MB/  Cnt)|WCnt( MB)| Sum(Usr/Buf/Ker)|Rcl|Wst|DRcl(Nr)|
==========================================================================================================================================================
# CPU: 8

          CORE/0(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/1(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/2(-----/-----)|--| 0.03(  3.3)| 0.00( 0.00)|  0| 0.00|    0|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/3(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/4(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/5(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/6(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|
          CORE/7(-----/-----)|--| 0.00(  0.0)| 0.03( 0.00)|  0| 0.00|   31|    -|    -|   -| 0.00(  0/    0)|   0(  0)|   0(  0/  0/  0)|  0|  0|0.00( 0)|

Api 파일 쪼개기.

Monitoring dir 아래로 main index 페이지 로직 이동하고 init에 세팅.

Changing some field names

I think it'd be better to change some field names. Currently, it seems that ID shows pid(process id) and Pid means ppid(parent process id) but it looks confusing to understand at first.

    ...
==============================================================================
    Process      ( ID  / Pid / Nr / Pri)| CPU(Usr/Ker/Dly)|  ...
------------------------------------------------------------------------------
    ...

I think those fields can be change as follows:

  • ID to pid
  • Pid to ppid

What do you think?

api proxy 적용

devServer에 proxy 관련 셋팅하기

  • websocket proxy 추가
  • flask쪽과 api prefix 설정 추가
  • TODO..

compile error

I can face compile error when I try to build in guider/guider directory.
The following is error message. Take a look at that. I think that it is because of difference between python 2 and python 3. After python 3.2, the .pyc file is created under pycache directory. But with python2, the file is created current directory. The Makefile should consider about whether *.pyc file is in pycache or not.

I will commit a patch to fix this error.

Error message:

~/work/guider/guider$ make
PCC guider.pyc
mv: cannot stat 'pycache/guider*.pyc': No such file or directory
Makefile:77: recipe for target 'guider.pyc' failed
make: [guider.pyc] Error 1 (ignored)
CC guiderLib.o
CC guidermodule.so

A request for more explanation

There are a lot of system stat information in guider, but it's difficult to understand what each field means.
I think it'd be better to have a document that explains each field otherwise, I think at least guider has to inform that where the number comes from so that we can look up for more information of the number. e.g. RSS is from /proc/[pid]/statm.

Changing the command-line of guider to be smarter.

Currently the command-line of guider doesn't give us useful help message, but just one format. Using the current help message, it is hard to understand to use guider's power functions. I think this is the first obstacle that people encounter when using Guider. So, I think it is necessary to provide useful help message format in every sub-command. The below message is a sample. Please take a look at them and give me your opinion or advice.

------- current help message: always giving one format ---------
  / _` || | | || | / _` | / _ \| '__|
 | (_| || |_| || || (_| ||  __/| |
  \__, | \__,_||_| \__,_| \___||_|   ver.3.9.3
   |___/
    

Mode:

    [analysis]
        top         [process]
        bgtop       [background]
        threadtop   [thread]
        filetop     [file]
     .....

Options:

    [record]
        -e  [enable_options - characters]
              [common]   {m(em)|b(lock)|e(ncoding)}
              [function] {h(eap)|L(ock)|p(ipe)|g(raph)}
              [thread]   {i(rq)|l(ock)|n(et)|p(ipe)|
                          P(ower)|r(eset)|g(raph)}
    ..........
    [common]
        -a  [show_allInfo]
        -Q  [print_allRowsInaStream]
        -i  [set_interval - sec]
        -R  [set_repeatCount - {interval:}count]

=================================
New message
$ python3 guider.py -h
usage: guider.py <mode> [<options>] 

<mode>
 [analysis] top         [process]
            bgtop       [background]
            threadtop   [thread]
            filetop     [file]
            stacktop    [stack]
            perftop     [PMU]
            memtop      [memory]
            disktop     [storage]
            wsstop      [WSS]
            reptop      [report]
            record      [thread]
            funcrecord  [function]
            filerecord  [file]
            sysrecord   [system]
            draw        [image]
            cpudraw     [cpu]
            memdraw     [memory]
            vssdraw     [vss]
            rssdraw     [rss]
            leakdraw    [leak]
            iodraw      [io]
            mem         [page]
            strace      [syscall]
  [control] kill        [signal]
            setsched    [priority]
            getaffinity [affinity]
            setaffinity [affinity]
            server      [server]
            client      [client]
            cpulimit    [cpu]
     [test] alloctest   [mem]
     [comm] list
            start
            send
            event

positional arguments:
  mode        submode to run

optional arguments:
  -h, --help  show this help message and exit

jungsu@jsson:~/work/guider/guider$ python3 guider.py record -h
usage: guider.py record [<options>]

Record process

optional arguments:
  -h, --help  show this help message and exit
  -e OPTIONS  one of the following options must be chosen
              [common]
              [function]
              [thread]
              [top]

jungsu@jsson:~/work/guider/guider$ python3 guider.py record -e
usage: guider.py record [<options>]
guider.py: error: argument -e: expected one argument

jungsu@jsson:~/work/guider/guider$ python3 guider.py record -e common -h
usage: guider.py record -e common [<option>]

Record's enable subprocess

optional arguments:
  -h, --help    show this help message and exit
  -t OPTION  available options(multiple choice is available)
                {m(em)|b(lock)|e(ncoding)}
                 m: memory
                 b: block
                 e: encoding

jungsu@jsson:~/work/guider/guider$ 

``

Web Main page 구현

https://demos.creative-tim.com/vue-black-dashboard/#/dashboard

  1. 최초 페이지 접근 시,
    상단에 접속 추가할 target의 address (IP:PORT)를 입력 받는 Text Box와 Connect Button 추가.

  2. Connect Button 클릭 시 Flask에서 Guider client와 연결하는 기능 추가.

3.연결이 되면 Flask에서 아래의 명령으로 remote Guider process에게 실시간 시스템 정보 요청 및 수신 시작

guider top -a -J

4.Flask에서 Guider로부터 JSON 형식의 stream data를 읽어서 vue로 올리고,
vue에서 이를 활용해 다양한 유형의 차트 출력.
참고) https://user-images.githubusercontent.com/15862689/60395898-24a85000-9b75-11e9-857b-991bcae731bc.png

Guider 웹 구조 설계 참고를 위한 정리

설계에 필요한 고려사항 그냥 생각나는데로 정리했습니다.
더 필요한 부분이나 잘못 적혀있는 부분 comment 로 자유롭게 의견 부탁드립니다.

서비스 정의 - 시스템 헬스 체크.
프로젝트 목적 - 사용자 요구사항에 유연하게 대응하는 gui 개발 + 누구든 쉽게 사용할 수 있기를 바람.??

요구사항 -

Front(Vue)

  1. UI 요구사항에 따른 component 구조 정리
  2. 상태 공유 관련 ( eventbus, vuex...)
  3. i18n 국제화

backend(Flask)

  1. 요구 사항 정리에 따른 api 리스트업.
  2. api 스펙 정의
  3. command 요청 로직 정리.

+a

  1. validation
  2. Test
  3. coding convention
  4. 빌드 환경
  5. web 로깅 관련
  6. infra 세팅 관련.

추가로 참고하면 좋을 것 같아서 정리.

Ngrinder
-Architecture 관련 문서 : https://github.com/naver/ngrinder/wiki/Architecture
-UI 참고 문서 : https://github.com/naver/ngrinder/wiki/Screen-Shot
Repo 구성의 경우 한 repo 에 모두 정리 되어있음.

  • front : ngrinder-frontend, vue 프로젝트로 구성
  • backend : ngrinder-controller, spring 프레임 웍으로 구성. 요청에 따라 ngriner-core 메소드 호출
  • core logic : ngrinder-core

ES beat 시각화 화면 참조 (metricbeat,https://www.elastic.co/kr/products/beats/metricbeat)

애초에 flask 앱 자체도 워낙 작게 만들어져 있고 web 자체가 별도의 서버에서 동작한다면 굳이 flask 일필요는 없을 듯.. node여도..

필수 Data 저장관련 논의

어떤 db를 쓸지 어떻게 데이터를 저장할지 의사결정이 필요한데
이 부분에 대해서 평화님이 우선 저장할 데이터들이 뭔지 알려주셔야 할거같아요.
comment로 리스트업 부탁드려요.
@iipeace

compile guider for binary execution

  1. static build
    $ ./configure LDFLAGS="-static -static-libgcc" --disable-shared CPPFLAGS="-static" --enable-optimizations
    $ make -j LDFLAGS="-static" LINKFORSHARED=" "
    $ cp build/lib.linux-x86_64-2.7/* Lib/
    $ tar cvfz python.tgz python Lib

  2. https://github.com/pyinstaller/pyinstaller
    $ ./pyinstaller.py --onefile guider.py --exclude=matplotlib --exclude=PIL --exclude=pylab

  1. http://nuitka.net/pages/overview.html
  • cross compile is not supported
  • use qemu environment to build

./nuitka test/guider.py --portable --show-progress --show-modules --recurse-not-to=pylab,matplotlib,PIL

flask mongo db config 세팅 추가 및, __init__ 파일과 연결 추가

아래 세가지중에 자료 조사 후 선택한 이유와 함께 세팅해주시면 좋을거같아요~
Flask-PyMongo - https://flask-pymongo.readthedocs.io/en/latest/
Flask-MongoAlchemy - https://pythonhosted.org/Flask-MongoAlchemy/
Flask-MongoEngine - http://docs.mongoengine.org/projects/flask-mongoengine/en/latest/

  • flask mongo db config 세팅 추가 (dir 위치는 추후 추가)
  • init 파일 연결 추가
  • 패키지 사용에 따른 requirements.py 추가

Could you improve json option to use some data-science platform?

I'd like to use the json data of guider for ELK(Elasticsearch Logstash Kibana) stack.

I request two function of guider.

  • When I use json option, that will overwrite data for a file.
    Can you add some option for that function is either enable or disable?

  • I wish there was a separate field with a timestamp.

Thanks.

Flask 기본 앱 구조 세팅 하기

현재 init.py 만 존재하는 구조에서
model, biz 로직등을 따로 분리해서 담도록 구조화 세팅
필요한 구조만 빼와서 세팅 필요
(각 dir 안에는 init.py 추가 필요)

참고
https://lepture.com/en/2018/structure-of-a-flask-project
https://libsora.so/posts/flask-project-structure/

함수 베이스로 아래처럼 놓을지
agent/
     __init__.py
    config.py
    app.py
    models/ 
        __init__.py
        users.py // 요건 나중을 위한 추가로~
        monitor.py ( 저장될 데이터 모델 네이밍 ...)
    routes/
       __init__.py  
       api.py
    templates/
       index.html(애초에 vue 쪽 봐버리면 날려도 됨)
    services/ 
       __init__.py
        monitor.py
    (controller)
       monitor_views.py( api request 받는 로직)
    
    tests/
      __init__.py (test 코드 넣을 부분)

app 베이스로 아래처럼 놓을지..

agent/
    __init__.py
    config.py
    app.py
    monitor/ (  뭔가 좋은거 없을까?)
        model.py
        views.py
        services.py
        routes.py
    tests/
        __init__.py
    templates/
       index.html

vue-black thema 적용

  • vue black thema 적용
  • api proxy 적용
  • hot reload 적용
  • build시에 agnet/static/ 형태로 빌드 될 것
  • socket io 동작 확인

vue router 동작 확인

__init__.pytemplates쪽과 static folder간에 file 경로 셋팅 불일치로 router 동작이 안되는 현상 해결

  1. init.py의 template_folderstatic/index.html을 볼 수 있게 설정 하기
  2. static_folder를 build된 directory에 js, css을 볼 수 있게 설정
  • / 페이지 진입 시 페이지
  • 좌측 탭 클릭시 다른 페이지 표시

현재 에러 상황
image

vue build 환경 세팅

기본 개발 flow
flask에서 아래와 같이 routing을 하고 html 파일을 생성한다. (위치는 templates 폴더 아래가 개발 가이드)
@app.route('/')
def index():
return render_template('index.html', server_addr=request.host_url)

해당 html파일 아래 vue build를 하고 나온 결과물 script를 import해준다.

<script type="text/javascript" src="./static/js/app.js?11"></script>

이렇게 하면 HMR(hot module replacement) 를 할 수 없어서 개발 환경에서 개발시 짜증이난다.
그래서 production 용 build script와 development용 을 따로 준비해야한다.
해서 config > dev.env.js 에 proxy table을 세팅 해줘야 한다.

Structure change for setup.py

guider guider.conf guiderLib.c guiderMod.c guider.py guiderTest Makefile goes to under guider/
directory

  • ./guider./guider/guider
  • ./guider.conf./guider/guider.conf
  • ./guiderLib.c./guider/guiderLib.c
  • ./guiderMod.c./guider/guiderMod.c
  • ./guider.py./guider/guider.py
  • ./guiderTest./guider/guiderTest
  • ./Makefile./guider/Makefile

eslint 적용하기

기존 guider-vue에 있는 프로젝트를 guider-vue-bak로 변경하면서 eslint 부분의 변경이 발생

해당 설정을 guider-vue쪽으로 설정 가능하도록 변경 필요

security issues

We found a vulnerable dependency in a repository you have security alert access to.

  1. Known moderate severity security vulnerability detected in js-yaml < 3.13.0 defined in yarn.lock.
    --
    yarn.lock update suggested: js-yaml ~> 3.13.0.

  2. Known critical severity security vulnerability detected in lodash.mergewith < 4.6.2 defined in yarn.lock.
    --
    yarn.lock update suggested: lodash.mergewith ~> 4.6.2.

  3. Known high severity security vulnerability detected in set-value < 2.0.1 defined in yarn.lock.
    --
    yarn.lock update suggested: set-value ~> 2.0.1.

  4. Known high severity security vulnerability detected in js-yaml < 3.13.1 defined in yarn.lock.
    --
    yarn.lock update suggested: js-yaml ~> 3.13.1.

  5. Known high severity security vulnerability detected in tar < 2.2.2 defined in yarn.lock.
    --
    yarn.lock update suggested: tar ~> 2.2.2.

  6. Known moderate severity security vulnerability detected in webpack-bundle-analyzer < 3.3.2 defined in yarn.lock.
    --
    yarn.lock update suggested: webpack-bundle-analyzer ~> 3.3.2.

  7. Known high severity security vulnerability detected in deep-extend < 0.5.1 defined in yarn.lock.
    --
    yarn.lock update suggested: deep-extend ~> 0.5.1.

  8. Known moderate severity security vulnerability detected in stringstream < 0.0.6 defined in yarn.lock.
    --
    yarn.lock update suggested: stringstream ~> 0.0.6

  9. Known high severity security vulnerability detected in mixin-deep < 1.3.2 defined in yarn.lock.
    --
    yarn.lock update suggested: mixin-deep ~> 1.3.2.

  10. Known moderate severity security vulnerability detected in fstream < 1.0.12 defined in yarn.lock.
    --
    yarn.lock update suggested: fstream ~> 1.0.12.

  11. Known high severity security vulnerability detected in cryptiles < 4.1.2 defined in yarn.lock.
    --
    yarn.lock update suggested: cryptiles ~> 4.1.2.

코드 수정 하면서 논의 필요한 부분 정리

기존 에러나던 부분 고치면서 몇가지 수정해서 pr 했습니다.

PR : #58

(기존 프론트 코드는 빌드가 안되고 너무 무겁고 해서 어차피 새로 개발하면 참고만 하면 될거같아서. Socket 부분만 남기고 다 날렸어요)

저도 잘 몰라서 혹시 이상한 부분 있으면 리뷰 해주시면 감사할거같아요~

  1. Flask 에서 host_url 을 vue로 넘겨주고 해당 url로 vue에서 socket 연결하는 방식으로 수정해서 잘 되는건 확인했습니다.

  2. 기존 구조에서 vue 웹팩 빌드 관련해서 조금 변경해서 npm run build하면 guider-vue/static/js 아래 빌드된 결과 들어가도록 해놨습니다.

  3. 아예 flask에서 static 경로를 지정할 수도 있어서요.
    Vue 프로젝트 아래 static 폴더 두고 사용하는게 더 좋은것도 같아서 해놨는데 flask.플젝 아래 둘지는 이부분 의견 부탁드려요.

  4. 그리고 현재는 agent —> backend 프로젝트 dir
    Guider-vue —> agent아래 frontend 프로젝트로 되어 있는데
    아예 디렉토리 분리해서 나눠놨는데 agent 아래 둘지 의견 부탁드려요

  5. local환경에서 nom run dev 하면 Hot reload 은 가능한데 flask와 통신시 cors 오류 있습니다. 요부분 수정해주실 분 수정해주셔도 좋을 것 같아요.

  6. 지금은 제가 임시로 guider-vue 로 front 를 냅뒀는데요 큰 틀에서 네이밍 관련해서는 얘기해서 정하는게 좋을거 같아서 이부분도 의견 부탁드립니다.

추가로 agent 디렉토리 아래에 requirements.txt 추가해놨는데
Pip install -r requirements.txt 하면 flask run을 위해 필요한 패키지 설치되니까 참고하시면 좋을거같아요

flask 가 바라보고 있는 view 경로 변경.

현재는 빌드된 결과물을 따로 templates 파일로 옮겨놓고
해당 파일을 바라보게 되어있음
아래와 같이 빌드된 파일이 떨어지는 위치로 세팅 변경 필요.

app = CustomFlask(name,
template_folder='../agent_frontend/guider-vue/dist',
static_folder='../agent_frontend/guider-vue/dist/static')

vue build 한 js 파일이 아예 따로 떨어지도록 세팅 필요
index.html 따로 두고 해당 js import 시켜서 flask 에서 해당 view를 보도록..

config/index.js 에 아래와 같이 세팅.
'use strict'

const path = require('path')
const distPath = '../Scripts/bundle'

module.exports = {
build: {
assetsRoot: path.resolve(__dirname, distPath),
assetsPublicPath: '/',
useEslint: true,
showEslintErrorsInOverlay: false,
dev: {
},
prod: {
}
}
}

guider <> flask <> vue 통신관련 의견 정리.

시나리오 1.

최초에 server connect http 리퀘스트를 보내면(interval time 과 함께)
flask는 guider 와 통신해서 데이터를 받아서 db에 쓰기 시작한다.
Socket 통신은 브라우저가 켜져있는 동안 지속되고 데이터를 가져오는데 성공하면 client 에게 요청을 주고 그 때 client 는 다시 데이터를 읽어간다.

Flask 의 경우에는 서비스가 돌면서 데이터를 1초마다 쌓아주고.
Client는 interval time 에 맞춰서 화면을 refresh 해준다. ( http 통신을 통해 데이터를 가져온다)

브라우저와 socket 통신이 끊기거나 사용자가 connect stop을 요청할 시 db 저장을 중단한다.

  • 뷰단에서 시계열 데이터를 그릴경우 고려할 부분이 있음..
    Disk 부하..

시나리오 2.

모든 client는 flask 서버와 각각 소켓통신을 통해 연결되고 flask는 내부에서 guider와 tcp 통신을 하여 필요한 데이터를 받아오고 화면에 뿌려준다. 저장이 필요한 데이터를 요청하는 command 의 경우에만 db에 저장한다.
(Command 명령어에 따라서 json 따로 오도록 작업 가능해야함)

이것도 나쁘지 않은게.. 다른 시스템 모니터링 툴도 연결 끊기면 끊기는데로 그래프 그려줌.

시나리오 3.
두개를 섞는 방법인데 저장이 필요없는데이터 ( 연결성이 그렇게 보장되지 않아도 되는 데이터) 의 경우에는 socket통신.
그 외의 중요하거나 저장이 필요한 것들은 소켓 연결이 되있으면. Db 에 데이터 저장 후 http 통신.

Flask Config 추가및 __init__.py 에 config 내용 적용

agent dir 아래
config dir 생성 후
Config,DevelopmentConfig, TestingConfig, ProductionConfig
각각에 대한 내용 정의 (공부할 겸 서칭해보면 좋을듯 )

agent/init.py 에 config 내용 적용 해주기.

def create_app(config_name):
app = Flask(name)
app.config.from_object(config_by_name[config_name])
db.init_app(app)
return app

ValueError: too many values to unpack

Hello,

New to linux, python and github. Newb, in short :) and I would like a little push on the below.

When I execute commands with guider, I get the following error

"ValueError: too many values to unpack" ( details attached )
ValueError.txt

Release:
DISTRIB_ID=ManjaroLinux
DISTRIB_RELEASE=18.0.2
DISTRIB_CODENAME=Illyria
DISTRIB_DESCRIPTION="Manjaro Linux"

Python 2.7.15 (default, Jan 10 2019, 23:20:52)
[GCC 8.2.1 20181127] on linux2

Python 3.7.2 (default, Jan 10 2019, 23:51:51)
[GCC 8.2.1 20181127] on linux

From a search that I did on this error, I suspect it might be related to the version of python that I use; "python >= 2.7" means python 2.7 and later versions of python 2 and not 3, right? I tried to run it through python 2 though, without success.

Any bells ringing?

Thank you in advance.

Best Regards,

krit

No response from server when client try to connect

when Guider in client mode try to connect to Guider in server mode,
No response from Guider in server mode.

It is no matter when they work in a local network (inside router),
But this issue occurs when they are not in a local network (outside router).

Flask에서 request_start()처리시 오류 발생

Issue #59 에 언급된 CORS 이슈를 해결하기 위해서

socketio = SocketIO(app, cors_allowed_origins='*')

로 수정하고 프로그램을 돌려보는데 하단의 오류가 발생했습니다.

Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner self.run() File "/usr/lib/python2.7/threading.py", line 754, in run self.__target(*self.__args, **self.__kwargs) File "/home/agrajak/.local/lib/python2.7/site-packages/socketio/server.py", line 648, in _handle_event_internal r = server._trigger_event(data[0], namespace, sid, *data[1:]) File "/home/agrajak/.local/lib/python2.7/site-packages/socketio/server.py", line 677, in _trigger_event return self.handlers[namespace][event](*args) File "/home/agrajak/.local/lib/python2.7/site-packages/flask_socketio/__init__.py", line 284, in _handler *args) File "/home/agrajak/.local/lib/python2.7/site-packages/flask_socketio/__init__.py", line 698, in _handle_event ret = handler(*args) File "__init__.py", line 125, in request_start msg['timestamp'] = timestamp TypeError: 'unicode' object does not support item assignment

// guider/guider-vue/src/Socket.IO.vue
this.$socket.emit('request_start', String(timestamp), this.targetAddr)

혹시 String을 유니코드로 인식해서 발생하나 싶어서 timestamp.getTime()으로 int값을 넘겨주어 보았는데도 똑같은 오류가 발생하네요..

vue assetsPath 설정

  1. npm run build
  2. ./init.py 실행
  3. localhost:5000으로 접근시 해당 에러 발생

image

flask-vue 현재 코드 운영 적용시 404 에러 수정

flask 에서 index 페이지를 호출할때 아래와 같이 request.host_url 을 넘기게 하고
return render_template('index.html', server_addr=request.host_url)

index.html 에서 '%% server_addr %%' 를 아래와 같이 받고.

socket의 connection ip를 아래와 같이 수정하면 운영 배포시에도 404 에러가 나지 않는다.
Vue.use(new VueSocketIO({
debug: true,
connection: document.getElementById('serverAddr').value // 'http://localhost:5000'
}))

작업 내용 branch
yangsso@687ac20

Top RSS Info without space

Hi,

There is some problem showing Top RSS Info as follows:

[Top RSS Info] (Unit: MB)
==========================================================================================================================================================
      COMM       ( ID  / Pid / Nr / Pri)| Max  |   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21
                                               |  22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42
                                               |  43   44   45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63
                                               |  64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84
                                               |  85   86   87   88   89   90   91   92   93   94   95   96   97   98   99   100  101  102  103  104  105
                                               |  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126
                                               |  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147
                                                                ...
                                               | 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975
                                               | 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996
                                               | 9997 9998 9999 100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017
                                               | 100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038
                                               | 100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059
                                               | 100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080
                                               | 100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101
                                               | 101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122
                                                                ...

Please take a look at it!

a new CI issue related to node.js

http://eslint.org/docs/rules/camelcase Identifier 'cpu_pipe' is not in camel case

1775 src/components/SocketIO.vue:65:30

1776 refineCpuPipe: function (cpu_pipe) {

1777 ^

1778

1779 ✘ http://eslint.org/docs/rules/no-array-constructor The array literal notation [] is preferable

1780 src/components/SocketIO.vue:67:22

1781 var cpuTotal = new Array()

1782 ^

1783

1784 ✘ http://eslint.org/docs/rules/camelcase Identifier 'mem_pipe' is not in camel case

1785 src/components/SocketIO.vue:77:30

1786 refineMemPipe: function (mem_pipe) {

1787 ^

1788

1789 ✘ http://eslint.org/docs/rules/camelcase Identifier 'proc_pipe' is not in camel case

1790 src/components/SocketIO.vue:88:31

1791 refineProcPipe: function (proc_pipe) {

1792 ^

1793

1794 ✘ http://eslint.org/docs/rules/no-array-constructor The array literal notation [] is preferable

1795 src/components/SocketIO.vue:90:23

1796 var procTotal = new Array() // Json Array to return

1797 ^

1798

1799

1800✘ 5 problems (5 errors, 0 warnings)

1801

1802

1803Errors:

1804 3 http://eslint.org/docs/rules/camelcase

1805 2 http://eslint.org/docs/rules/no-array-constructor

1806

1807

1808 ✘ http://eslint.org/docs/rules/no-new Do not use 'new' for side effects

1809 src/main.js:15:1

1810 new Vue({

1811 ^

1812

1813

1814✘ 1 problem (1 error, 0 warnings)

1815

1816

1817Errors:

1818 1 http://eslint.org/docs/rules/no-new

1819

1820You may use special comments to disable some warnings.

1821Use // eslint-disable-next-line to ignore the next line.

1822Use /* eslint-disable */ to ignore all warnings in a file.

1823

1824

1825

guider-vue readme 수정

  • vue-black-thema가 적용되어서 readme.md 파일이 vue-black 관련된 내용으로 작성되어 있음
  • flask와 vue deploy 방법
  • flask와 vue 실행 방법
  • npm 방식 가이드
  • yarn 방식 가이드

Vue.js 코드에 대한 개선 의견

안녕하세요, agent 브렌치에 있는 Vue.js 관련 코드를 읽고 몇가지 의견이 있어 이슈 남깁니다. 제 의견이 절대 맞는 것이 아니고, 제가 부족하여 잘못된 의견일수도 있으니 다른 분들도 여러 생각을 공유해주시면 좋을거 같습니다.

  1. 빌드된 파일이 git으로 관리되고 있음
    https://github.com/iipeace/guider/tree/bf45611274d8e78a84235f1f39096d78c7b4dc48/agent/static
    위 폴더 하위에 있는 파일들 같이 vue 빌드 이후 생성되는 파일들은 .gitignore에 넣는게 좋다고 생각합니다. 빌드 결과물이 git으로 관리된다면 여러가지 문제점이 있습니다.

    1. 프론트엔드의 변경점이 있을때마다 작업자들은 까먹지 말고 build를 한 후 커밋해야 합니다. 실수로 빌드 결과물을 올리지 않으면 코드와 빌드 결과물간 싱크가 안맞는 경우가 생깁니다.
    2. 동시에 두 작업자가 작업을 할 때, 완전히 다른 부분을 수정했더라도 빌드 결과물을 각자 올린다면 무조건 merge conflict가 발생될것으로 예상됩니다.
    3. 일반적으로 개발 환경에서의 빌드 결과물과 배포 환경에서의 빌드 결과물은 다릅니다. 누군가 실수로 기존 파일을 개발 환경의 빌드 결과물로 덮어쓰기 한다면 문제가 생길수도 있습니다.
    4. 사실 코드(+ 빌드 환경)가 같다면 빌드 결과물도 같을것이므로 두 개를 같이 git으로 공유하는 건 중복입니다.
  2. 프론트엔드를 라우팅 하는 방법

    guider/agent/__init__.py

    Lines 63 to 66 in bf45611

    from guider import NetworkManager
    @app.route('/')
    def index():
    return render_template('index.html', server_addr=SERVER_ADDR)

    현재는 위와 같이 프론트엔드를 라우팅하고 있습니다.
    하지만 이 방법으로는 프론트엔드에 다른 라우트를 추가하는게 어렵습니다.
    예를들어 www.some-domain.com/admin 이나 www.some-domain.com/login 같은 경로를 만들고 싶으면 어떻게 하나요?

    또한 index.html은 빌드 결과물이므로 1번 의견에 의하면 빌드 결과물들은 git에서 제외되어야 하고, 소스 코드는 빌드 결과물에 의존적이지 않아야 합니다.

    이를 개선하기 위한 좋은 방법은 일반적인 경로로 들어오면 프론트엔드에서 처리를 해주고, 경로 앞에 /api가 있다면 백엔드(flask)에서 처리를 하도록 프록시 설정을 해주는 것입니다. 개발 환경이라면 vue의 devserver-proxy를 이용하고, 배포 환경이라면 nginx등에서 설정을 하면 될거 같습니다(예시)

  3. 프론트엔드 빌드 시 오류
    package.json에 명시되어 있는 대로 npm run dev 또는 npm run build를 실행할 시, build/build.js 파일을 찾을수 없다는 오류가 납니다. 실제로 build라는 폴더가 존재하지 않는데 혹시 제가 놓친 부분이 있을까요?

root@goorm:/workspace/guider/agent/front_vuejs((detached from origin/agent))# npm run build

> [email protected] build /workspace/guider/agent/front_vuejs
> node build/build.js

internal/modules/cjs/loader.js:775
    throw err;
    ^

Error: Cannot find module '/workspace/guider/agent/front_vuejs/build/build.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
    at Function.Module._load (internal/modules/cjs/loader.js:677:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:999:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.