小编Ray*_*ond的帖子

如何计算iostat的util?

iostat -x -d 
Run Code Online (Sandbox Code Playgroud)

可以显示许多i/o统计信息.对于iostat的util,解释是:

向设备发出I/O请求的CPU时间百分比(设备的带宽利用率).当此值接近100%时发生设备饱和

我想知道如何计算util?

我做了一个实验,(见下面的代码),启动40个线程来随机读取40个文件.我想磁盘工具应该非常高,但我错了,iostat如下,任何人都可以给出原因?谢谢

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb1              0.01     0.44  0.24  0.57     3.44     8.14    14.34     0.00    2.28   0.66   0.05
Run Code Online (Sandbox Code Playgroud)

码:

#include <iostream>
#include <fstream>
#include <pthread.h>

using namespace std;

void* work(void* a)
{
    int* id = (int*)a;
    string file = "sys.partition";
    char buf[100];
    sprintf(buf, "%d", *id);
    file.append(string(buf));
    ifstream in(file.c_str());
    in.seekg(0, ios_base::end);
    size_t len = in.tellg();

    cout << "open file : " << file << " , " << …
Run Code Online (Sandbox Code Playgroud)

linux linux-device-driver linux-kernel

15
推荐指数
2
解决办法
3万
查看次数

如何避免C++匿名对象

我有一个ScopedLock类可以帮助在超出范围时自动释放锁定.但问题是:有时团队成员会编写无效的锁码,例如

{
    ScopedLock(mutex);   // anonymous
    xxx;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是错误的,因为ScopedLock对象是立即构造和销毁的,因此无法锁定预期的区域(xxx).我希望编译器在尝试编译此类代码时出错.可以这样做吗?

我搜索了g++警告选项,但找不到合适的警告选项.

c++ g++

14
推荐指数
3
解决办法
1489
查看次数

如何从有序地图中获取中值

我正在使用std :: map.有时我会做一个操作:找到所有项目的中值.例如,如果我添加

1 "s"
2 "sdf"
3 "sdfb"
4 "njw"
5 "loo"
Run Code Online (Sandbox Code Playgroud)

那么中位数是3.

是否有一些解决方案没有迭代地图中的一半以上的项目?

c++ stl

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

在多核机器Linux OS中,当进程调度程序将一个进程迁移到另一个cpu时

在我的程序中,其rss为65G,当通话时fork,sys_clone->dup_mm->copy_page_range将消耗超过2秒.在这种情况下,一个cpu在执行fork时会100%sys,同时,一个线程在fork完成之前无法获得cpu时间.机器有16个CPU,其他CPU空闲.

所以我的问题是一个cpu忙于fork,为什么调度程序不会将等待这个cpu的进程迁移到其他空闲cpu?一般来说,调度程序何时以及如何在cpus之间迁移进程?

我搜索这个网站,现有的线程无法回答我的问题.

linux fork multicore scheduler

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

矢量保持内存甚至与另一个空向量交换

我做了一个小实验,代码如下:

    vector<char> *p = new vector<char>[1024];
    for (size_t i = 0; i < 1024; i++) 
    {
        (*p++).resize(1024 * 1024);//alloc 1 G memory 
    }

    sleep(5);
    cout << "start to clear" << endl;
    for (size_t i = 0; i < 1024; i++)
    {
        vector<char> tmp;
        tmp.swap(*p++);
    }
    delete [] p;

    cout << "clear over!" << endl;
    sleep (5);
Run Code Online (Sandbox Code Playgroud)

//这里,内存还是1G,为什么?非常感谢你.

c++ stl

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

标签 统计

c++ ×3

linux ×2

stl ×2

fork ×1

g++ ×1

linux-device-driver ×1

linux-kernel ×1

multicore ×1

scheduler ×1