Articles of 内核

带有Nginx和PHP-FPM的AWS EC2 – 无法将CPU推送超过50%

我正在尝试testingAWS Auto Scaling,为此我需要将EC2实例推送到触发器(例如CPU数量超过80%)将引发另一个实例启动的点。 我发现的是一个无法获得超过50%的CPU。 我正在使用Nginx,并且已经将工作连接的数量从1024个调整到了更大的数量。 我有worker_processes设置为自动。 另外fastcgi_params被设置如下: fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_max_temp_file_size 0; fastcgi_intercept_errors off; 我有php-fpm安装使用dynamic以下,但我也调整了这些数字了很多没有任何实际的区别: pm.max_children = 50 pm.start_servers = 3 pm.min_spare_servers = 3 pm.max_spare_servers = 50 我正在运行围攻,我可以在30秒内持续获得1000个并发连接,并有3500个回复,100%(没有退出),并且没有错误显示。 我也运行了3个包含1000个并发连接的siege ec2实例,发现我有时会得到一些套接字错误,但是CPU从未超过50%。 通常情况下,我发现结果仍然是3500个回复,只是分布在3台服务器上(因此每个回应较less)。 我有10秒的缓慢login,并有几个查询在那里,所以我把一个更大的数据库(AWS RDS实例 – 最大可能与IOPS只是为了testing),这没有任何区别。 我也放了一个更大的EC2实例来看看会发生什么,CPU将会超过50%。 最后这个是我的/etc/sysctl.conf # Kernel sysctl configuration file for […]

如何从结构页面结构vm_area_struct

基本上,我需要使用页面来识别进程或任务,并据此做出是否允许页面被换出的一些决定。 因为内核AFAIK中的交换模块主要处理结构页面 ,我想知道是否有一些现有的技巧,我缺less。 从include / linux / mm_types.h(v> = 2.6),下面的注释: 系统中的每个物理页面都有一个与之关联的结构页面 它跟踪我们正在使用的网页是什么 时刻。 请注意,我们无法跟踪哪些任务正在使用 一个页面,但如果它是一个页面caching页面,rmap结构可以告诉我们 谁在映射它。 build议我们可以通过一些物理到虚拟的反向映射来做到这一点,但我无法从rmap函数(在mm / rmap.c中)找出如何实现我正在寻找的function。 预先感谢任何帮助,非常感谢。

速率单调分析

我正在开发一个项目,使用速率单调分析来validation一个相当大的程序的multithreading执行。 为了执行分析,我需要每次运行的执行时间以及运行的次数。 最后,将分析数据以找出每个运行线程的平均时间。 有没有解决我收集这些数据的问题? 我已经看过LTTng和英特尔vTune,但有一些问题: 1.)LTTV / eclipse插件计算我需要的平均执行时间吗? 2.)英特尔VTune是否在kvm虚拟机中工作? 开发计算机是一个服务器,当前正在硬件(但与AMD处理器),直接运行RHEL,但最终将迁移到运行在intel Xeon处理器上的虚拟机。该软件还具有运行的c + +和java可执行文件。

VirtualBox如何处理来宾Linux的中断?

我正在练习在VirtualBox guest Linux中编写简单的键盘驱动程序。 问题是,我的代码只是注册一个中断处理程序,并打印scancode到日志文件。 而且我不会将这些传入的扫描码发送到任何上层的代码,比如Linux input core 。 insmod ,我可以看到使用dmesg捕获的扫描码。 但为什么我的terminal仍然得到正确的input? terminal不应收到任何东西。 我的代码如下所示: static int __init init_simple_keyboard_driver(void) { free_irq (IRQ_1, NULL); return request_irq (IRQ_1, my_handler, …); } static irqreturn_t my_handler(int irq, void *dev_id) { unsigned char scancode = get_scancode_from_port_0x60(); printk(…scancode…); } 在insmod之后,我可以在内核日志中看到消息。 我的free_irq调用导致一些消息Can't free already freed IRQ 。 (我不知道为什么…它不应该被释放) atkbd司机抱怨说有人要求处理IRQ_1 。 那些扫描码可以正确打印。 [最奇怪的]主动控制台仍然得到正确的键盘input。 因此,我可以使用这个简单的驱动程序来执行一个rmmod 。 […]

杀死一个进程和所有后代的安全方法

我使用apparmor , setrlimit , cap_set_rpoc在Linux中创build沙箱环境,让匿名用户在科学应用程序的上下文中基本上执行我的服务器上的一些任意代码。 沙盒中特别允许的一件事是通过分叉和调用可执行文件来启动新进程(尽pipe一个用户的进程总数受RLIMIT_NPROC限制)。 经过一段时间后,比如说1分钟,系统将杀死主进程和所有潜在的subprocess。 我目前正在依靠进程组ID来识别孩子。 然而,从理论上讲,一个subprocess可以调用setpgid来改变它的进程组,所以当我在主进程id(正确的?)上调用kill(-1 * pid)时候,它将不再受到影响。 不幸的是,我没有设置能够阻止进程调用setpgid linux capability 。 杀死一个进程及其所有(recursion的)subprocess的强大方法是什么?这会使孩子们很难以某种方式“逃避”大屠杀并继续孤儿进程?

如何在内核编程中获得USB设备细节?

我是内核编程的新手,我有一个USB设备的dev_t值。 我想获取设备的详细信息,如供应商ID,产品ID或其他属性,这些属性会因设备而异。 我想在内核空间中执行此操作,而不将程序作为外部模块加载。 我遇到了一个libusb库,但据我所知,它被用在用户空间中。 是否有可能在内核空间也使用libusb,就像我的要求? 如果可能的话,如何导入和设置libusb以便我可以编译内核?

当schedule()返回?

在阻塞IO的情况下,比如说驱动程序读取,我们在某些情况下调用wait_event_interruptible()。 条件满足时,阅读将完成。 我看着wait_event_interruptible()函数,它检查条件并调用schedule()。 schedule()将查找下一个可运行的进程,并执行上下文切换,其他进程将运行。 这是否意味着,当进程被唤醒时,当前进程的下一条指令将在schedule()函数中? 如果是的话,如果多进程自动调用进度,那么所有进程在被唤醒后都会有下一条指令被执行一次会在schedule()内? 在ret_from_interrupt的情况下,schedule()被调用。 什么时候会回来? 因为iret在那之后被执行。

挂在3.5内核上的sys_execve

我正在尝试在x86_32的Linux内核v3.5中挂接sys_execve系统调用。 我只需将sys_call_table入口地址更改为我的钩子函数 asmlinkage long (*real_execve)( const char __user*, const char __user* const __user*, const char __user* const __user* ); … asmlinkage long hook_execve( const char __user* filename, const char __user* const __user* argv, const char __user* const __user* envp ) { printk( "Called execve hook\n" ); return real_execve( filename, argv, envp ); } … real_execve […]

在linux 3.7中相当于linux 2.6的path_lookup()

我正在阅读D.Bovet&M.Cesati的“了解Linux内核”第三版。 在关于虚拟文件系统的章节中,他们引用了查找给定path的函数“path_lookup()”。 本书基于linux-2.6。 我正在查看linux-3.7.6中的文件,我无法find该函数(使用cscope工具)。 任何想法什么是在这个版本的Linux的等价function?

MySQL数据库挂起由于磁盘日记?

有时我们的Linux MySQL数据库服务器中的一个会挂起一段时间,创build一个长队列的活动查询。 10-20分钟后,服务恢复正常。 这发生在kern.log中: May 14 13:58:05 edu02 kernel: [2375521.716786] INFO: task jbd2/md2-8:1419 blocked for more than 120 seconds. May 14 13:58:05 edu02 kernel: [2375521.716870] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. May 14 13:58:05 edu02 kernel: [2375521.716953] jbd2/md2-8 D ffff88043b5a23f0 0 1419 2 0x00000000 May 14 13:58:05 edu02 kernel: [2375521.716958] ffff88043b5a23f0 0000000000000046 00000000000000ff ffff88043b4e69c0 […]