1515#include  < Common/CurrentMetrics.h> 
1616#include  < Common/FailPoint.h> 
1717#include  < Common/Logger.h> 
18+ #include  < Common/MemoryAllocTrace.h> 
1819#include  < Common/PODArray.h> 
1920#include  < Common/SyncPoint/Ctl.h> 
2021#include  < DataStreams/OneBlockInputStream.h> 
@@ -607,59 +608,11 @@ try
607608}
608609CATCH
609610
610- 
611- namespace 
612- {
613- struct  ProcessMemoryUsage 
614- {
615-     double  resident_mb;
616-     Int64 cur_proc_num_threads;
617-     double  cur_virt_mb;
618- };
619- 
620- bool  process_mem_usage (double  & resident_set, Int64 & cur_proc_num_threads, UInt64 & cur_virt_size)
611+ double  get_process_resident_mb ()
621612{
622-     resident_set = 0.0 ;
623- 
624-     //  'file' stat seems to give the most reliable results
625-     std::ifstream stat_stream (" /proc/self/stat" 
626-     //  if "/proc/self/stat" is not supported
627-     if  (!stat_stream.is_open ())
628-         return  false ;
629- 
630-     //  dummy vars for leading entries in stat that we don't care about
631-     std::string pid, comm, state, ppid, pgrp, session, tty_nr;
632-     std::string tpgid, flags, minflt, cminflt, majflt, cmajflt;
633-     std::string utime, stime, cutime, cstime, priority, nice;
634-     std::string itrealvalue, starttime;
635- 
636-     //  the field we want
637-     Int64 rss;
638- 
639-     stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> minflt >> cminflt
640-         >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> nice >> cur_proc_num_threads
641-         >> itrealvalue >> starttime >> cur_virt_size >> rss; //  don't care about the rest
642- 
643-     stat_stream.close ();
644- 
645-     Int64 page_size_kb = sysconf (_SC_PAGE_SIZE) / 1024 ; //  in case x86-64 is configured to use 2MB pages
646-     resident_set = rss * page_size_kb;
647-     return  true ;
613+     auto  mu = DB::get_process_mem_usage ();
614+     return  mu.resident_bytes  / 1024.0  / 1024 ;
648615}
649- ProcessMemoryUsage get_process_mem_usage ()
650- {
651-     double  resident_set;
652-     Int64 cur_proc_num_threads = 1 ;
653-     UInt64 cur_virt_size = 0 ;
654-     process_mem_usage (resident_set, cur_proc_num_threads, cur_virt_size);
655-     resident_set *= 1024 ; //  unit: byte
656-     return  ProcessMemoryUsage{
657-         resident_set / 1024.0  / 1024 ,
658-         cur_proc_num_threads,
659-         cur_virt_size / 1024.0  / 1024 ,
660-     };
661- }
662- } //  namespace
663616
664617TEST_F (SegmentOperationTest, TestMassiveSegment)
665618try
@@ -685,21 +638,17 @@ try
685638            next_split_seg_id = *n_seg_id;
686639            if  (i % progress_interval == 0 )
687640            {
688-                 auto  mu = get_process_mem_usage ();
689641                LOG_INFO (
690642                    log,
691643                    " lvl={} round={} split_point={} next_seg_id={} mem_resident_set={:.3f}MB)" 
692644                    lvl,
693645                    i,
694646                    split_point,
695647                    *n_seg_id,
696-                     mu. resident_mb );
648+                     get_process_resident_mb () );
697649            }
698650        }
699-         {
700-             auto  mu = get_process_mem_usage ();
701-             LOG_INFO (log, " lvl={} round={} mem_resident_set={:.3f}MB" resident_mb );
702-         }
651+         LOG_INFO (log, " lvl={} round={} mem_resident_set={:.3f}MB" get_process_resident_mb ());
703652
704653        size_t  round = 0 ;
705654        for  (auto  && [seg_id, seg] : segments)
@@ -715,14 +664,13 @@ try
715664            size_t  write_rows_sub = 2 ;
716665            if  (round % progress_interval == 0 )
717666            {
718-                 auto  mu = get_process_mem_usage ();
719667                LOG_INFO (
720668                    log,
721669                    " lvl={} round={} written_rows={} mem_resident_set={:.3f}MB" 
722670                    lvl,
723671                    round,
724672                    write_rows * round,
725-                     mu. resident_mb );
673+                     get_process_resident_mb () );
726674            }
727675            for  (size_t  k = 0 ; k < 2 ; ++k)
728676            {
@@ -746,13 +694,12 @@ try
746694            round++;
747695        }
748696        {
749-             auto  mu = get_process_mem_usage ();
750697            LOG_INFO (
751698                log,
752699                " TestMassiveSegment done, segments.size()={} lvl={} mem_resident_set={:.3f}MB" 
753700                segments.size (),
754701                lvl,
755-                 mu. resident_mb );
702+                 get_process_resident_mb () );
756703        }
757704    }
758705}
0 commit comments