有没有办法在linux内核中获取函数调用?我知道__ func __返回正在执行的函数名.我正在寻找名为" __ func __ "的函数
kernel linux-device-driver linux-kernel embedded-linux kernel-mode
在最初的vmsplice()实现中,有人建议如果你有一个用户区缓冲区2x可以容纳管道的最大页数,那么缓冲区后半部分成功的vmsplice()将保证内核完成使用缓冲区的前半部分.
但事实并非如此,特别是对于TCP,内核页面将被保留,直到从另一方接收到ACK.修复这个问题是未来的工作,因此对于TCP,内核仍然需要从管道中复制页面.
vmsplice()有一个SPLICE_F_GIFT选项可以处理这个,但问题是这暴露了另外两个问题 - 如何有效地从内核获取新页面,以及如何减少缓存垃圾.第一个问题是mmap需要内核清除页面,第二个问题是虽然mmap可能会使用内核中的花式kscrubd功能,但这会增加进程的工作集(缓存垃圾).
基于此,我有以下问题:
mmap/ vmsplice/ splice/ munmap目前在TCP服务器中进行零复制的最佳实践还是今天我们有更好的选择?如何解决“Docker Desktop - WSL 内核版本过低 [内容]”错误?
错误消息的其余部分:
Docker Desktop 需要更新的 WSL 内核版本。
通过运行“wsl --update”更新 WSL 内核,或按照https://docs.microsoft.com/windows/wsl/wsl2-kernel中的说明进行操作。
解决办法是:
wsl --update鉴于Linux内核oops,你如何诊断问题?在输出中,我可以看到堆栈跟踪,似乎给出了一些线索.有没有什么工具可以帮助找到问题?您要遵循哪些基本程序来追踪它?
Unable to handle kernel paging request for data at address 0x33343a31
Faulting instruction address: 0xc50659ec
Oops: Kernel access of bad area, sig: 11 [#1]
tpsslr3
Modules linked in: datalog(P) manet(P) vnet wlan_wep wlan_scan_sta ath_rate_sample ath_pci wlan ath_hal(P)
NIP: c50659ec LR: c5065f04 CTR: c00192e8
REGS: c2aff920 TRAP: 0300 Tainted: P (2.6.25.16-dirty)
MSR: 00009032 CR: 22082444 XER: 20000000
DAR: 33343a31, DSISR: 20000000
TASK = c2e6e3f0[1486] 'datalogd' THREAD: c2afe000
GPR00: c5065f04 c2aff9d0 c2e6e3f0 00000000 00000001 00000001 00000000 0000b3f9
GPR08: 3a33340a c5069624 c5068d14 …Run Code Online (Sandbox Code Playgroud) 我有8GB RAM的核心i5.我的机器上安装了VMware工作站10.0.1.我在VMware上安装了Fedora 20 Desktop Edition作为客户操作系统.
我正在研究Linux内核源代码v 3.14.1.我正在为Linux内核开发一个I/O调度程序.每次编译和安装整个内核代码以查看更改大约花费1小时30分钟后,对代码进行任何修改.
编译和安装命令:
make menuconfig,
make,
make modules,
make modules_install,
make install
所以我的问题是可以将1小时30分钟的时间缩短到10到15分钟吗?
我尝试使用 conda 安装新的 Python 版本 (3.8)。
!wget -O mini.sh https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh
!chmod +x mini.sh
!bash ./mini.sh -b -f -p /usr/local
Run Code Online (Sandbox Code Playgroud)
这工作正常。我可以打电话!python script.py来运行 3.8 版本。
因此,我尝试使用 Python 3.8 内核安装另一个 jupyter 内核。
!conda install -q -y --prefix /usr/local jupyter
!python -m ipykernel install --name "py38" --user
Run Code Online (Sandbox Code Playgroud)
我检查内核是否已安装。
!jupyter kernelspec list
Run Code Online (Sandbox Code Playgroud)
然后我把笔记本下载下来。打开文本编辑器将内核规范更改为
"kernelspec": {
"name": "py38",
"display_name": "Python 3.8"
}
Run Code Online (Sandbox Code Playgroud)
这与之前使用 Javascript、Java 和 Golang 的技巧相同。
然后我将编辑后的笔记本上传到 Google Drive。在 Google Colab 中打开笔记本。它找不到py38内核,所以它使用普通的python3内核。我再次运行所有这些单元格。
!wget -O mini.sh https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh
!chmod +x mini.sh
!bash ./mini.sh -b -f …Run Code Online (Sandbox Code Playgroud) 我喜欢操作系统,最终想成为一个主要从事内核工作的操作系统开发人员.在未来,C仍然是首选语言,我还应该学习什么?
在32位Linux内核上编译内核模块会导致
"__udivdi3" [mymodule.ko] undefined!
"__umoddi3" [mymodule.ko] undefined!
Run Code Online (Sandbox Code Playgroud)
在64位系统上一切都很好.据我所知,原因是32位Linux内核不支持64位整数除法和模数.
如何找到发出64位操作的代码.它们很难手动找到,因为我无法轻易检查"/"是32位宽还是64位宽.如果"正常"函数未定义,我可以grep它们,但这不可能在这里.还有另一种搜索引用的好方法吗?某种"机器代码grep"?
该模块由几千行代码组成.我真的不能手动检查每一行.
我正在编写一个Linux字符驱动程序,可以在用户空间中打印系统日志.正如命令'dmesg'那样.我已经了解到,使用'printk'打印的所有日志都将被发送到名为ring buffer的空间.所以我有问题:
从Java Garbage Collection跳转,我遇到了NUMA的JVM设置.奇怪的是我想检查我的CentOS服务器是否具有NUMA功能.是否有可以获取此信息的*ix命令或实用程序?
kernel ×10
linux ×6
linux-kernel ×3
c ×1
compilation ×1
debugging ×1
docker ×1
jvm ×1
kernel-mode ×1
logging ×1
mmap ×1
numa ×1
osdev ×1
processor ×1
python-3.8 ×1
splice ×1
time ×1
version ×1
windows-subsystem-for-linux ×1
zero-copy ×1