小编Man*_*lva的帖子

什么是perf缓存事件的含义?

我试图弄清楚为什么修改后的C程序比未修改的计数器部分运行得更快(我添加了很少的代码行来执行一些额外的工作).在这种情况下,我怀疑" 缓存效应 "是主要的解释(指令缓存).因此,我到达perf(https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但遗憾的是我无法理解其有关缓存未命中的输出的含义.

提供了几个关于缓存的事件:

  cache-references                                   [Hardware event]
  cache-misses                                       [Hardware event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-prefetches                               [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-prefetches                               [Hardware cache event]
  L1-icache-prefetch-misses                          [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-prefetches                                     [Hardware cache event]
  LLC-prefetch-misses                                [Hardware cache event]
  dTLB-loads                                         [Hardware cache event] …
Run Code Online (Sandbox Code Playgroud)

c linux perf

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

如何删除awk中的科学记数法?

在下面的awk命令中

 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt
Run Code Online (Sandbox Code Playgroud)

我应该更改什么来删除科学记数法输出(非常小的值显示为1.5e-05)?

我无法使用OMFT变量成功.

awk

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

在ordererd列表中查找最接近的值

我想知道如何编写一个简单的java方法,在排序的整数列表中找到一个给定值的closet Integer.

这是我的第一次尝试:

public class Closest {

    private static List<Integer> integers = new ArrayList<Integer>();

    static {
        for (int i = 0; i <= 10; i++) {
            integers.add(Integer.valueOf(i * 10));
        }
    }

    public static void main(String[] args) {

        Integer closest = null;
        Integer arg = Integer.valueOf(args[0]);

        int index = Collections.binarySearch(
                integers, arg);

        if (index < 0) /*arg doesn't exist in integers*/ {
            index = -index - 1;
            if (index == integers.size()) {
                closest = integers.get(index - 1);
            } else if (index …
Run Code Online (Sandbox Code Playgroud)

java

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

如何在Linux上使用英特尔Westmere 1GB页面?

编辑:我用我的基准测试的详细信息更新了我的问题

出于基准测试目的,我试图在运行在两个Intel Xeon 56xx("Westmere")处理器之上的Linux 3.13系统中设置1GB页面.为此我修改了我的启动参数以添加对1GB页面的支持(10页).这些引导参数仅包含1GB页面而不包含2MB页面.跑步hugeadm --pool-list 导致:

      Size  Minimum  Current  Maximum  Default
1073741824       10       10       10        *
Run Code Online (Sandbox Code Playgroud)

我的内核启动参数被考虑在内.在我的基准测试中,我正在分配1GiB的内存,我想用1GiB大页面支持:

#define PROTECTION (PROT_READ | PROT_WRITE)
#define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB)
uint64_t size = 1UL*1024*1024*1024;
memory = mmap(0, size, PROTECTION, FLAGS, 0, 0);
if (memory == MAP_FAILED) {
    perror("mmap");
    exit(1);
}
sleep(200)
Run Code Online (Sandbox Code Playgroud)

看着/proc/meminfo替补席正在睡觉的时候(sleep上面打电话),我们可以看到已经分配了一个巨大的页面:

AnonHugePages:      4096 kB
HugePages_Total:      10
HugePages_Free:        9
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB
Run Code Online (Sandbox Code Playgroud)

注意:/sys在运行工作台之前禁用了THP(通过文件系统),所以我猜测AnonHugePages报告的字段/proc/meminfo代表THP在停止之前分配的大页面. …

c linux linux-kernel perf

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

SQLite数据类型

我通过Zentus在Java应用程序中使用SQLite.在这种情况下,我需要在我的数据库中保存和查询Java 值.来自其他RDBMS我创建了如下表来存储长值:long

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Run Code Online (Sandbox Code Playgroud)

此解决方案产生例外行为,但在阅读关于数据类型SQLite文档后,我理解我的LONG类型与使用TEXT=> 相同的效果longValue存储为文本.

然后,我决定将其更改为INTEGER(长度是可变的,并且可以存储多达64位的整数,这是Java长度的长度),以便拥有更清晰的代码,可能是为了节省一些磁盘空间并提高性能,因为我的longValues是插入和查询为long.

在比较创建的数据库的性能和大小后,我无法看到以下任何区别:

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
Run Code Online (Sandbox Code Playgroud)

有关该主题的任何评论,经验或感受?

java sqlite

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

多核CPU是否共享MMU和页表?

在单核计算机上,一次执行一个线程.在每个上下文切换上,调度程序检查要调度的新线程是否与前一个线程处于同一进程中.如果是这样,则不需要对MMU(页面表)进行任何操作.在另一种情况下,需要使用新的流程页表更新页表.

我想知道多核计算机上是怎么发生的.我猜每个核心上都有一个专用的MMU,如果同一进程的两个线程同时在2个核心上运行,则每个核心的MMU只需引用相同的页面表.这是真的 ?你能指点我对这个问题的好的参考吗?

hardware multithreading operating-system multicore mmu

16
推荐指数
2
解决办法
8217
查看次数

fread会移动文件指针吗?

简单的问题,

当我使用fread时:

fread(ArrayA, sizeof(Reg), sizeBlock, fp);
Run Code Online (Sandbox Code Playgroud)

我的文件指针,fp向前移动?

c file fread

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

如何使用Java中的Prolog?

在Java/Eclipse应用程序的上下文中,我想将Prolog用于特定任务.有哪些可用的解决方案和工具,以及相关的利弊?

我可以启动外部Prolog解释器生成文件中的结果?我可以使用完整的Prolog Java Library(用java实现的Prolog解释器)?我可以使用专用于与外部Prolog解释器通信的java库吗?

在此先感谢您的帮助,

马努

java prolog

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

Eclipse JFace的向导

我需要一个向导,第二页内容取决于第一页的选择.第一页询问用户他想要创建的过滤器的"种类",第二页要求用户创建所选"种类"的一个过滤器实例.

JFace的向导页面内容(createControl(...)方法)都是在向导打开时创建的,而不是在显示给定页面时创建的(这允许JFace知道向导大小,我猜??).

因此,我必须在向导打开之前创建我的第二页内容但是我不能,因为第二页的内容取决于第一页的选择.

现在我找到的更清洁的解决方案包括在向导打开之前创建所有(秒)页面(带有它们的内容)并覆盖第一页实现中的getNextPage()方法.

该解决方案的主要缺点是,当要创建许多第二页时,它可能很昂贵.

您对该解决方案有何看法?你如何管理向导的页面?有没有我错过的清洁解决方案?

java eclipse jface

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

如何以编程方式获取Linux进程的堆栈开始和结束地址?

对于单线程程序,我想检查给定的虚拟地址是否在进程的堆栈中.我想在用C编写的过程中做到这一点.

我正在考虑读取/proc/self/maps标记为[stack]的行来获取进程堆栈的起始和结束地址.考虑这个解决方案,我想到了以下问题:

  1. /proc/self/maps显示我的特定进程的132k堆栈,堆栈的最大大小(ulimit -s)在我的系统上是8兆.Linux如何知道由于我们高于堆栈限制而发生的给定页面错误属于堆栈(并且堆栈必须变大)而不是我们到达进程的另一个内存区域?

  2. Linux会缩小堆栈吗?换句话说,例如,当从深层函数调用返回时,OS是否会减少与堆栈相对应的虚拟内存区域?

  3. 操作系统最初为堆栈分配了多少虚拟空间?

  4. 我的解决方案是否正确,还有其他更清洁的方法吗?

c linux linux-kernel

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