根据主题,以下是输出uname -a
:
Linux 4.19.82 #1 SMP PREEMPT RT Mon Mar 2 17:33:16 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
确实没有相关信息man uname
。
为什么还有“58*4096kB (C)”可用却出现“页面分配失败”?
你看,内核在分配 order:10 大小的内存时会抱怨(即页面分配失败:order:10)。但确实有空闲块(即“58*4096kB (C)”)。所以我认为它不应该抱怨,因为确实有足够的可用内存。
这是相关日志:
[ 2161.623563] xxxx: page allocation failure: order:10, mode:0x2084020(GFP_ATOMIC|__GFP_COMP)
[ 2161.632085] CPU: 0 PID: 179 Comm: AiApp Not tainted 4.9.56 #53
[ 2161.637947]
Call Trace:
[<802f63f2>] dump_stack+0x1e/0x3c
[<800f6cf4>] warn_alloc+0x100/0x148
[<800f709c>] __alloc_pages_nodemask+0x2bc/0xb5c
[<801120fe>] kmalloc_order+0x26/0x48
[<80112158>] kmalloc_order_trace+0x38/0x98
[<8012c5d8>] __kmalloc+0xf4/0x12c
[<8048ac78>] alloc_ep_req+0x5c/0x98
[<8048f232>] source_sink_recv+0x2a/0xe0
[<8048f35e>] usb_sourcesink_bulk_read+0x76/0x1c8
[<8048f770>] usb_sourcesink_read+0xfc/0x2c8
[<80134d58>] __vfs_read+0x30/0x108
[<80135c14>] vfs_read+0x94/0x128
[<80136d12>] SyS_read+0x52/0xd4
[<8004a246>] csky_systemcall+0x96/0xe0
[ 2161.689204] Mem-Info:
[ 2161.691518] active_anon:3268 inactive_anon:2 isolated_anon:0
[ 2161.691518] active_file:1271 inactive_file:89286 isolated_file:0
[ 2161.691518] unevictable:0 dirty:343 writeback:0 unstable:0
[ 2161.691518] …
Run Code Online (Sandbox Code Playgroud) 当十六进制数字相对较小时,我可以使用
echo 0xFF| mawk '{ printf "%d\n", $1}'
Run Code Online (Sandbox Code Playgroud)
将十六进制转换为十进制。
当十六进制数很大时,mawk
不再起作用,例如
echo 0x8110D248 | mawk '{ printf "%d\n", $1 }'
Run Code Online (Sandbox Code Playgroud)
输出2147483647
(这是错误的,2147483647
相当于0x7FFFFFFF
)。
如何转换更大的数字?
我有很多数字(每行一个数字,超过10M)需要处理,例如:每个0xFF\n 0x1A\n 0x25\n
. 如何让它在这种场合发挥作用?经过xargs
?有没有更好的方法呢?xargs
真的很慢。