标签: getrusage

UNIX编程.struct timeval如何打印它(C编程)

我正在尝试打印timeval类型的值.实际上我可以打印它,但我得到以下警告:

此行有多个标记

  • 格式'%ld'需要类型'long int',但参数2的类型为'struct timeval'

程序编译并打印出值,但我想知道我做错了什么.谢谢.

    printf("%ld.%6ld\n",usage.ru_stime);
    printf("%ld.%6ld\n",usage.ru_utime);
Run Code Online (Sandbox Code Playgroud)

用法类型

typedef struct{
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block …
Run Code Online (Sandbox Code Playgroud)

unix timer rusage getrusage

18
推荐指数
2
解决办法
7万
查看次数

Linux上"ru_maxrss"的单位是什么?

这是来自 man getrusage

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock; …
Run Code Online (Sandbox Code Playgroud)

c linux memory memory-management getrusage

13
推荐指数
2
解决办法
7158
查看次数

获取getrusage()以C语言测量系统时间

我想测量执行一些代码所需的系统时间.要做到这一点,我知道我会在两次调用getrusage()之间将所述代码夹在中间,但是我得到了一些意想不到的结果......

#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>

int main() {
  struct rusage usage;
  struct timeval start, end;
  int i, j, k = 0;

  getrusage(RUSAGE_SELF, &usage);
  start = usage.ru_stime;
  for (i = 0; i < 10000; i++) {
    /* Double loop for more interesting results. */
    for (j = 0; j < 10000; j++) {
      k += 20; 
    }
  }
  getrusage(RUSAGE_SELF, &usage);
  end = usage.ru_stime;

  printf("Started at: %ld.%lds\n", start.tv_sec, start.tv_usec);
  printf("Ended at: %ld.%lds\n", end.tv_sec, end.tv_usec);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这会产生两个不同的数字,但唉!看到我的电脑想了一两秒后,这就是结果: …

c time systemtime getrusage

10
推荐指数
1
解决办法
3万
查看次数

Linux中的getrusage是否被破坏(2.6.30)

这段代码

 void print_usage(char * msg)
{
    struct rusage usage;
    getrusage(RUSAGE_SELF, &usage);
    printf("Limits: %s\n", msg);
    printf("  %s, %li\n",  " maximum resident set size "    , usage.ru_maxrss  );
    printf("  %s, %li\n",  " integral shared memory size "  , usage.ru_ixrss   );
    printf("  %s, %li\n",  " integral unshared data size "  , usage.ru_idrss   );
    printf("  %s, %li\n",  " integral unshared stack size " , usage.ru_isrss   );
    printf("  %s, %li\n",  " page reclaims "                , usage.ru_minflt  );
    printf("  %s, %li\n",  " page faults "                  , …
Run Code Online (Sandbox Code Playgroud)

c linux linux-kernel getrusage

6
推荐指数
1
解决办法
2402
查看次数

getrusage与clock_gettime()

我试图获取Ubuntu上进程消耗的CPU时间.据我所知,有两个函数可以完成这项工作:getrusage()和clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&tp).在我的代码中,在clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&tp)之后立即调用getrusage(),总是会得到不同的结果.

谁能帮助我了解哪个功能提供更高的分辨率,以及这些功能有哪些优点/缺点?

谢谢.

getrusage

5
推荐指数
1
解决办法
1135
查看次数

两次连续调用 getrusage 是否一定会产生递增的结果?

在一个调用getrusage()两次以通过减法获得任务时间的程序中,我曾经看到一个断言,说任务时间应该是非负的,失败。当然,这不能轻易地重现,尽管我可以编写一个专门的程序来更容易地重现它。

我试图找到一种getrusage()增加执行的保证,但我的系统(Linux on x86-64)上的手册页和这个独立于系统的描述都没有明确说明这一点。

该行为是在具有多个内核且运行 NTP 的物理计算机上观察到的。

我应该报告我正在使用的操作系统的错误吗?当我期望getrusage()随着时间的推移而增加时,我的要求是否太多了?

c unix linux posix getrusage

5
推荐指数
1
解决办法
524
查看次数

“ru_maxrss”在getrusage中是什么意思

test.cpp在 macOS Sierra 上编译并运行了以下 C++ 代码。

#include <iostream>
#include <sys/resource.h>

using namespace std;

int main() {
    int a = 1;
    struct rusage r_usage;
    getrusage(RUSAGE_SELF, &r_usage);
    cout << "Memory usage = " << r_usage.ru_maxrss << endl;
    int b = 2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后得到:

?  Desktop git:(master) ? ./test
Memory usage = 663552
Run Code Online (Sandbox Code Playgroud)

然后我发现这里的单位ru_maxrss千字节 ,所以程序使用了663552千字节?但我只是创建了一个整数。

另一个问题是:ru_maxrss计数int b = 2吗?或者它只是在行调用之前计算内存使用情况ru_maxrss

c++ memory-management getrusage

3
推荐指数
1
解决办法
1024
查看次数

程序的编译是否在执行前将一些数据存储在缓存中?(C,Linux)

在执行之前,程序的编译是否会在缓存中存储一​​些数据?

我在Linux中编写了一个C程序,它在一个线程中启动Sublime Text,并在另一个线程中进行手动系统调用.(我将解释为什么我最后这样做,因为这与这个问题无关)
我正在使用getrusage来测量I/O的数量.

我的问题是,在编译之后,I/O输入的数量会减少很多.换句话说,如果我不在编译和执行之间释放缓存和内存,则I/O的数量会减少很多.为什么以及如何发生这种情况?请参阅以下案例.

案例A - 1)编译2)执行

> $ gcc pmulti.c -o pmulti    
> $ ./pmulti

<result>
 I/O Input: 632 Output: 0
Run Code Online (Sandbox Code Playgroud)

情况B 1)编译2)空闲内存和缓存 3)执行

> $ gcc pmulti.c -o pmulti
> # free && sync && echo 3 > /proc/sys/vm/drop_caches && free    
> $ ./pmulti

<result>
I/O Input: 1400 Output: 0
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,输入的数量是案例A <案例B.这必须意味着在编译期间发生了某些事情,并且它受到释放缓存和内存的影响.

为什么以及如何发生这种情况?我在哪里可以了解更多相关信息?

完整代码:https://pastebin.com/R6v00LLW

我的代码的缩写版本:

struct rusage usage;

void *func1(void *vargp)
{

    /*     Manual System …
Run Code Online (Sandbox Code Playgroud)

c linux terminal multithreading getrusage

3
推荐指数
1
解决办法
53
查看次数

Linux getrusage() maxrss 最大驻留集大小不随分配增加(C++)

我正在尝试使用getrusage(.)和最大驻留集大小 (maxrss) 来检查内存泄漏。但是,当我故意尝试造成泄漏时,maxrss 不会改变。也许我对 maxrss 的理解不够深入。这是代码:

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
int main() {
  struct rusage r_usage;
  getrusage(RUSAGE_SELF, &r_usage);
  cout << r_usage.ru_maxrss << "kb\n";
  cout << "Allocating...\n";
  int a = 100000; // have tried range of numbers
  int* memleaktest = new int[a]; // class member
  if(!memleaktest)
    cout << "Allocation failed";
  getrusage(RUSAGE_SELF, &r_usage);
  cout << "after allocation " << r_usage.ru_maxrss << "kb\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

allocatoin (~15000kb) 后我得到完全相同的值。在 Ubuntu x86 上。

c++ linux memory getrusage

3
推荐指数
1
解决办法
752
查看次数