Questions tagged «linux-kernel»

该标签用于询问有关Linux内核本身内部的问题,尤其是有关编写在内核上下文中运行的代码(例如内核模块或驱动程序)的问题。有关在Linux中编写用户空间代码的问题,通常应标记为[linux]。由于Linux内核的内部结构不断变化,因此包含您感兴趣的精确内核版本会很有帮助。

5
什么是 ”:-!!” 用C代码?
我碰到了/usr/include/linux/kernel.h中的这个奇怪的宏代码: /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct …
1664 c  linux  macros  linux-kernel 

10
Linux内核中可能的/不太可能的宏如何工作,它们的好处是什么?
我一直在研究Linux内核的某些部分,并找到了如下调用: if (unlikely(fd < 0)) { /* Do something */ } 要么 if (likely(!err)) { /* Do something */ } 我找到了它们的定义: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) 我知道它们是为了优化,但是它们如何工作?使用它们会导致多少性能/尺寸下降?至少在瓶颈代码中(当然在用户空间中)值得麻烦(并且可能失去可移植性)。



3
现代Linux机顶盒可以打开的TCP连接的理论最大数量是多少
假设硬件具有无限的性能,Linux盒能否支持> 65536的开放TCP连接? 我知道临时端口的数量(<65536)限制了从一个本地IP到一个远程IP上一个端口的连接数量。 元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的元组。这是否意味着如果这些参数中的一个以上空闲,则可以支持65K以上的连接。例如,从多个本地IP连接到多个远程主机上的单个端口号。 系统中还有16位限制吗?可能有多少个文件描述符?

4
增加Linux中TCP / IP连接的最大数量
我正在对服务器进行编程,似乎连接数受到限制,因为即使将连接数设置为“无限”,带宽也没有达到饱和。 如何增加或消除Ubuntu Linux盒一次可以打开的最大连接数?操作系统是否对此进行了限制,或者它是路由器还是ISP?或者是别的什么?

6
为什么Linux被称为整体内核?
我读到Linux是单片内核。整体内核是否意味着将完整的内核代码编译并链接到可执行文件中? 如果Linux能够支持模块,为什么不将所有子系统分解为模块并在必要时加载它们呢?在这种情况下,内核不必一开始就加载所有模块,而是可以维护模块中功能的索引,并在必要时加载它们。


2
在Linux中测量时间-时间vs时钟vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
其中计时功能,time,clock getrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的,为了知道在什么情况下我必须使用他们什么是他们的返回值。 首先,我们需要对返回壁钟值的函数与返回进程或线程值的函数进行分类。gettimeofday返回壁钟值,clock_gettime返回壁钟值或进程或线程值,具体取决于Clock传递给它的参数。getrusage并clock返回过程值。 然后,第二个问题涉及这些功能的实现以及结果的准确性。这些功能使用哪种硬件或软件机制。 似乎getrusage只使用了内核滴答(通常为1ms长),结果比ms更加准确。这样对吗?然后,该getimeofday功能似乎使用了最准确的基础硬件。结果,它的精度通常是最新硬件上的微秒(由于API而不能更高)。关于什么的clock,关于“逼近”该名男子页讲,这是什么意思?怎么回事clock_gettime,API只需十亿分之一秒,这是否意味着如果基础硬件允许的话,它就能如此精确?单调性如何? 还有其他功能吗?
148 c  linux  time  linux-kernel 


5
编写程序以应对导致Linux上的写入丢失的I / O错误
TL; DR:如果Linux内核丢失了缓冲的I / O写操作,那么应用程序有什么方法可以找出来? 我知道您必须fsync()对该文件(及其父目录)具有持久性。问题是,如果内核由于I / O错误而丢失了待写的脏缓冲区,那么应用程序如何检测到它并恢复或中止? 考虑数据库应用程序等,其中写入顺序和写入持久性可能至关重要。 丢了写?怎么样? 在某些情况下,Linux内核的块层失去缓冲已被成功提交的I / O请求write(),pwrite()等等,有这样的错误: Buffer I/O error on device dm-0, logical block 12345 lost page write due to I/O error on dm-0 (请参阅end_buffer_write_sync(...)和end_buffer_async_write(...)中的fs/buffer.c)。 在较新的内核上,该错误将包含“丢失异步页面写入”,例如: Buffer I/O error on dev dm-0, logical block 12345, lost async page write 由于应用程序write()将已经返回且没有错误,因此似乎无法将错误报告给应用程序。 检测到他们? 我对内核源代码并不熟悉,但是我认为AS_EIO它是在异步写入失败的缓冲区上设置的: set_bit(AS_EIO, &page->mapping->flags); …
138 c  linux  linux-kernel  posix 

2
IOCTL Linux设备驱动程序
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 改善这个问题 谁能解释我, 什么IOCTL啊 它是干什么用的? 如何使用? 为什么我不能定义与之功能相同的新功能IOCTL?

7
vmalloc和kmalloc有什么区别?
我到处搜寻,发现大多数人都提倡使用kmalloc,因为可以确保您获得连续的物理内存块。但是,kmalloc如果找不到所需的连续物理块,似乎也可能失败。 拥有连续的内存块有什么好处?具体来说,为什么我需要在系统调用中有一个连续的物理内存块?有什么原因我不能仅仅使用? 最后,如果要在处理系统调用期间分配内存,我应该指定吗?系统调用是否在原子上下文中执行?vmallocGFP_ATOMIC GFP_ATOMIC 分配是高优先级,并且不休眠。这是在中断处理程序,下半部分和其他您无法入睡的情况下使用的标志。 GFP_KERNEL 这是正常分配,可能会阻塞。当可以安全睡眠时,这是在进程上下文代码中使用的标志。


7
如果指向的文件被移动或删除,Linux上的打开文件句柄会怎样?
如果指向文件同时获得,Linux上的打开文件句柄会发生什么: 移开->文件句柄保持有效吗? 删除->这是否导致EBADF,指示无效的文件句柄? 替换为新文件->该文件是否处理指向该新文件的操作? 由指向新文件的硬链接代替->我的文件可以“跟随”该链接吗? 由指向新文件的软链接代替->我的文件句柄现在是否命中了该软链接文件? 为什么问这样的问题:我正在使用热插拔硬件(例如USB设备等)。可能会发生设备(以及它的/ dev / file)被用户或另一个Gremlin重新连接的情况。 处理此问题的最佳做法是什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.