
linux write 数据,write每次最大能写多少字节的数据
北美黑胡桃
转载
关注
0点赞·576人阅读
背景
最近碰到一个线上的bug,具体情况是进程将24G左右的内存buffer写到磁盘上,但是每次write都写不完24G,然后重试导致磁盘写满,服务不可用。
在修这个bug的时候,对于到底write最大能写多少字节的数据斗模卖产生了浓厚的兴趣,写了一个测试程序基本上每次最多写到2G多一点。
在研究了一段内核代码后一切霍然开朗。
write限制
write函数在以下三种情况下可能写入的字节数小于指定的字节数:
在底层的物理介质上没有足够的空间
RLIMIT_FSIZE的限制
写入被信号打断
从内核代码来看,count在大于MAX_RW_COUNT的情况下,会赋值为MAX_RW_COUNT
而MAX_RW_COUNT是一个宏,展开为:INT_MAX &PAGE_MASK
INT_MAX也是一个宏,展开为((int)(~0U>>1)),也就是无符号数0取反后右移一位转换成int类型,也就是2^31.
PAGE_MASK也是一个空逗宏,展开为(~(PAGE_SIZE-1)),而PAGE_SIZE展开为(_AC(1,UL) <<PAGE_SHIFT),PAGE_SHIFT的值为12,也就是每页的大小是212,也就是说1左移12位,PAGE_SIZE的值为212,码誉然后PAGE_SIZE-1取反
最后MAX_RW_COUNT的值为INT_MAX &PAGE_MASK,也就是说MAX_RW_COUNT的值是int的最大值最后12位屏蔽掉,保持4K地址对齐
所以理论上讲,每次write可写的buff大小是231-212=2147479552,这也是与实际的测试结果相一致
LED 测试
蜂鸣器测试
执行lsinput查看按键所对应的输入事件
从lsinput的输出信息,得知按键KEY0 对应的输入事件是 /dev/input/event2 ,因此使用 od 或者 hexdump 命令读取 /dev/input/event2 文件,按下按键后会打印出事件内容:
接执行下面的指令可退出桌面程序。 psplash.sh 这个脚本会关闭以 Q 开头的 Qt 程序。
执行 ts_test 点击 Draw,就可以开始画图。
注意 : ts_calibrate 一般是针对电阻屏校准的。 使用 ts_calibrate
后会在 /etc 目录下生成一个坐标参考文件 pointercal。 如果你是电容屏,并且 /etc 目录下有 pointercal 这个坐标参考文件,请把它删除。否则可能影响触摸坐标上报的数据值。
进入睡眠/熄屏模式:
退出睡眠/亮屏模式:
这样可以像调试串口一样输入登录用户名 root,即可进入系统。这样能输入指令并返回结
果,表明 RS232 串口正常
Memtester 简单介绍
参数说明:
使用文件系统自带的 Memtester 测试工具申请 8MB 内存数量测试做 1 次 DDR 测顷扮帆试。
执行如下指令。
SD 卡写速度测试
SD 卡读速度测试
网速测试
默认开发板的 can 设备是还没有打开的,使用下面的指令打开 can 设备。
服务端:
同理, 客户端也是这样设置:
服务端使用 candump 指令接收来自 can0 的数据
将 SD 卡的第一个分区模拟成 U 盘
说明:使用含 Qt5 的文件系统,启动时插上 RGB 屏幕。
开发板进入系统后,插上鼠标会打印如下信息
ALSA(高级 Linux 声音架构)在 Linux *** 作系统上提供了音频和 MIDI(Musical Instrument
Digital Interface,音乐设备数字化接口)的支持。
amixer 的使用:
alsamixer 则提供一套
图形界面来控制雀雹音频设备,可以用键盘方向键来控制增减音量,打开或者关闭等
开发板系统音频输出功能默认是打开的,下面两条指令可不执行。
设置播放音量,执行如下命令,音量的单位是 dB,音量最小缺好为 0,最大为 127。
播放音频文件,执行下面指令
1、#ip link set canX down //关闭can设备;2、#ip link set canX up //开启can设备;
3、#ip -details link show canX //显示can设备详细信息;
4、#candump canX //接收can总线发来的数据;
5、#ifconfig canX down //关闭can设备,以便配置
6、#ip link set canX up type can bitrate 250000 //设置can波特率
7、#conconfig canX bitrate + 波特率;
8、#canconfig canX start //启动can设备;
9、#canconfig canX ctrlmode loopback on //芦好庆回环测试;
10、#canconfig canX restart // 重启can设备;
11、#canconfig canX stop //停止can设备;
12、#canecho canX //查看can设备总陪握线状态;
13、#cansend canX --identifier=ID+数据 //发送数据;
14、#candump canX --filter=ID:mask//使用滤波器接袜信收ID匹配的数据
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)