0

我正在编写一些使用fsync()系统调用来确保文件持久保存到磁盘的软件。我以前做过,而且我知道您需要注意的各种“陷阱”(即,在替换文件时,您需要fsync()对该文件,发出 a rename(),然后fsync()是包含目录。对软件进行持久编码将文件写入磁盘很好。

测试软件是另一回事。我想验证它在遇到停电等情况时是否正常运行。我的身体反应还不错,但还不足以拔掉两条 CPU 指令之间的电源线。

我应该如何测试写入磁盘的 C 程序的持久性?

(正如标题所暗示的那样,我假设您使用某种类似调试器的软件,可能使用ptrace(), 来在特定文件/行处自动终止您的程序,如可执行文件的调试信息中所列。)

4

2 回答 2

0

您正在寻找的测试类型是 - 负载测试和压力测试。当大量数据需要非常频繁地写入磁盘时,负载测试将测试您的应用程序是否能够执行。这需要您通过在外部提供输入来模拟行为,例如。通过模拟读取数据源的测试应用程序。压力测试将在系统中的 CPU 利用率为 100% 或系统内存或磁盘中没有剩余内存时测试程序的行为。strees-ng该工具可用于模拟 CPU 负载场景。请参阅 [链接] ( https://www.tecmint.com/linux-cpu-load-stress-test-with-stress-ng-tool/ )。希望对您有所帮助。

于 2018-10-11T10:23:03.177 回答
0

做好准备,在正常情况下断电等不可预见事件随机事件的情况下,您无法将 100% 的数据保存到磁盘中。但是,可以通过各种方式提高概率 - 例如以块的形式写入磁盘。块的大小是这样的,如果它没有保存在磁盘中,那么它的某些部分可以在重新启动电源后恢复或安全地忽略。块的大小还取决于磁盘缓存,这将确保数据被快速写入以及程序读取数据流的速率。数据恢复可以通过设计您的硬件/软件来实现,以便在断电的情况下,系统中有某种备用电源。该设计将允许系统有足够的时间向 SW 发出信号以完成剩余数据的保存(如果有),或者,为此目的,数据一直存储在 ram 中,直到 cpu 的主电源恢复为止。有几种测试想法,其中之一可以是在线程中执行磁盘写入操作,并根据您的要求以循环的速度从主线程中启动/终止线程。

于 2018-10-11T05:44:00.730 回答