Articles of 优化

在调整php图像大小时,服务器负载会增加

我有一个PHP脚本,将图像的大小调整为上传的三种不同的分辨率。 当我上传一个图像时,它将其大小调整为300 * 300,80 * 80,800 * 800,并保存原始文件。 我使用的脚本是以下链接https://github.com/blueimp/jQuery-File-Upload/blob/master/example/upload.php 以下图像是服务器的系统监视器。 CPU历史的前两个尖峰是单独上传文件时发生的图像大小调整。 以下是从队列中上传的文件。 在此上传过程中,服务器无法处理其他请求。 当时我无法访问其他页面。 页面加载一半或者根本不加载,或者一旦上载完成,页面加载。 我需要立即解决这个问题。 如何克服这个问题。 我必须为服务器充分。 是否有任何插件为图像resize的Apache或有问题的代码。

如何在linux中打败core i3 / i7中的硬件预取器

我试图find一种方法来击败H / W预取器来检测stream模式,并以随机顺序访问4KB数据,以使其不被H / W预取器检测和预取。 最初,我打算以随机模式访问所有偶数索引数据,因为H / W预取器总是预取下一个caching行(所以当我访问偶数索引时,下一个奇数索引数据已经被预取)。 我编写了代码以随机模式访问所有偶数索引数据,但是结果表明预取器检测到模式(不知道怎么做?没有固定的跨度,都是随机跨度) 我正在调查原因 – 为什么发生这种情况,然后我在英特尔find了这篇文章; https://software.intel.com/en-us/forums/topic/473493 根据John D. McCalpin博士的博士“Bandwidth博士, 在“Intel 64和IA-32架构优化参考手册”(文档248966-028,2013年7月)的第2.2.5.4节中,它指出, stream媒体预取器“[d]检测和维护多达32个数据访问stream,对于每个4K字节的页面,可以保持一个前向和一个后向stream。 这意味着L2硬件预取器跟踪最近访问的16个4KiB页面,并记住足够的这些页面的访问模式以跟踪一个前向stream和一个后向stream。 因此,要使用“随机”提取来击败L2stream转预取器,只需确保您访问超过15个其他4个KiB页面,然后再对先前引用的页面进行第二次引用。 所以一个“随机”取序列可能由16个以上的4个KiB页码随机排列组成,每个页面内有一个随机偏移量。 (我通常在我的排列列表中使用至less32页。) 所以它意味着在访问相同的4KB页面的两个不同的随机索引之间,我们需要访问至less16个4KB页面来击败H / W预取器。 我已经实现了John D. McCalpin所提出的概念,然而结果再一次显示了h / w预取器没有被击败。 它能够检测某些模式和预取数据(请参阅示例输出)。 我从20-40页的4KB页面访问页数不一样,但结果没有改进/改变。 这是我的代码: #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sched.h> #ifndef _POSIX_THREAD_PROCESS_SHARED #error This system does not […]

静态和内联

我在C编程。我想要一些关于静态和内联函数的描述。 我知道,如果我们把一个函数做成静态的,那么它就是编译器的一个指示,即它只在一个翻译单元的内部链接下。 我有以下关于静态和内联的疑问: 如果我们做一个静态的函数,我们可以在其他的翻译单元中使用它…即在其他.c文件中? 如果是的话,如何? 如果我们将函数作为静态内联,那么有什么区别? 编译器如何处理它? 是否将函数作为静态函数产生与macros相同的效果? 将函数视为内联取决于编译器的大小。 那么有什么办法可以强制让它像内联一样被对待? 我们如何使用内联和静态函数进行优化? 请在上面的内容中阐明一些内容。 平台是Linux,gcc编译器,C语言。

优化C ++二维数组

我需要一种方法来表示C ++中的双精度二维数组(密集matrix),并具有绝对最小的访问开销。 我已经在各种linux / unix机器和gcc版本上做了一些时机。 STLvectorvector,声明如下: vector<vector<double> > matrix(n,vector<double>(n)); 并且通过matrix[i][j]进行访问比访问声明的数组慢5%到100% double *matrix = new double[n*n]; 通过内联索引函数matrix[index(i,j)] ,其中index(i,j)计算结果为i + n * j。 其他不用STL排列二维数组的方法 – 一个n指针数组指向每一行的开始,或者定义堆栈上的整个事物为一个常数大小的matrix[n][n] – 几乎完全相同速度为指标函数法。 当开启优化时,最近的GCC版本(> 4.0)似乎能够将STLvector向量编译成几乎与非STL代码相同的效率,但这有点依赖于机器。 我想尽可能使用STL,但是必须select最快的解决scheme。 有没有人有任何与GCC优化STL的经验?

Java内存的奥秘(我有泄漏)?

我有一个独立的Java问题在Linux服务器上运行。 我用-Xmx256m开始了jvm。 我附加了一个JMX监视器,可以看到堆永远不会真的通过256Mb。 但是,在我的Linux系统上运行顶层命令时,我可以看到: 1)首先,这个过程的RES内存使用量约为350Mb。 为什么? 我想这是因为堆外的记忆? 2)其次,这个过程的VIRT内存使用量正在不断增长和增长。 它永远不会停止! 现在显示在2500Mb! 所以我有泄漏? 但堆不增加,它只是循环! 最终,这会造成一个问题,因为系统交换不断增长,最终导致系统死亡。 任何想法是怎么回事? 我想问的一个重要问题是,这可能是我的代码的结果,而不是JVM,内核等的一些情况。例如,如果线程的数量不断增加,那么是否符合我的观察的描述? 任何类似的东西,你可以build议我留意?

当传递参数作为编译时间常量或variables时,函数性能之间的差异

在Linux内核代码中有一个用于testing的macros(Linux版本2.6.2): #define test_bit(nr, addr) \ (__builtin_constant_p((nr)) \ ? constant_test_bit((nr), (addr)) \ : variable_test_bit((nr), (addr))) 其中constant_test_bit和variable_test_bit被定义为: static inline int constant_test_bit(int nr, const volatile unsigned long *addr ) { return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; } static __inline__ int variable_test_bit(int nr, const volatile unsigned long *addr) { int oldbit; __asm__ __volatile__( […]

直写RAM磁盘或文件系统的大规模caching?

我有一个非常严重的文件系统,读取和写入一组工作文件的程序。 这些文件的大小是几千兆字节,但不会太大,以至于不适合放在RAM磁盘上。 运行该程序的机器通常是Ubuntu Linux机器。 有没有办法configuration文件pipe理器有一个非常非常大的caching,甚至caching写入,以便他们以后点击磁盘? 或者有没有办法创build一个写入实际磁盘的RAM磁盘?

软件来调整/校准启发式algorithm的属性

今天我读了一个名为WinCalibra的软件(向下滚动),它可以把一个带有属性的文本文件作为input。 然后该程序可以根据algorithm的输出值优化input属性。 有关更多信息,请参阅本文或用户文档(请参阅上面的链接;可悲的是,doc是压缩的exe文件)。 你知道其他软件可以做到这一点,在Linux下运行? (最好是开源) 编辑 :因为我需要这个Java应用程序:我应该把我的研究投资在像高卢或制表师的 Java库吗? 问题是我不想推出我自己的解决scheme,也没有时间这样做。 你有没有像Calibra这样的开箱即用的应用程序的指针? (互联网search不成功;我只find库) 我决定放弃赏金(否则没有人会有好处),虽然我没有find一个令人满意的解决scheme:-((开箱即用的应用程序)

为什么不执行报告caching未命中?

根据perf教程 , perf stat应该使用硬件计数器报告caching未命中。 但是,在我的系统上(最新的Arch Linux),它并没有: [joel@panda goog]$ perf stat ./hash Performance counter stats for './hash': 869.447863 task-clock # 0.997 CPUs utilized 92 context-switches # 0.106 K/sec 4 cpu-migrations # 0.005 K/sec 1,041 page-faults # 0.001 M/sec 2,628,646,296 cycles # 3.023 GHz 819,269,992 stalled-cycles-frontend # 31.17% frontend cycles idle 132,355,435 stalled-cycles-backend # 5.04% backend cycles […]

用户空间代码中可能使用/不太可能使用macros吗?

我在Linux内核代码中遇到了这两个macros。 我知道它们是分支情况下编译器(gcc)优化的指令。 我的问题是,我们可以在用户空间代码中使用这些macros吗? 它会给任何优化? 任何示例都将非常有帮助。