ios模拟器慢速_调试提示:如何模拟慢速硬键

ios模拟器慢速

作为软件工程师,有时您会希望使用较慢的系统。

实际上,这种情况实际上并不经常发生:通常是有人报告您的软件错误,而您以前从未见过且无法复制该错误。

在大多数情况下,那些鬼虫的原因是比赛条件

竞争条件是多线程编程可能会遇到的问题。 想象一下,您的软件可以同时执行多项操作。 尽管大多数情况下这些事情都是按照预期和直观的顺序发生的,但有时却没有。 导致程序出现意外状态。

它们确实是一个错误。 是开发人员的错。 但是开发人员没有太多方法可以保护自己不受他们侵害。 有一些编程风格和技术可以使您完全规避风险,但是我认为,总的来说,它们是每个开发人员都必须熟悉的条件。

那么,为什么速度较慢的系统会有所帮助?

因为在大多数情况下, 比赛条件仍会以“合理快速”的方式掩盖比赛条件 。 这个模棱两可的“合理Swift”是主要问题 。 没有明确的限制或数字可以告诉您多快。 如果事情足够缓慢以至于表明它们没有按照正确的顺序发生或者它们没有在等待正确的检查点,那么您就更有机会看到它们。

以我在Java应用程序方面的经验,与性能有关的主要方面是重现竞争条件是磁盘访问速度。 超过CPU速度或RAM数量,我注意到磁盘速度是类似系统之间的最大区别。

在本文中,我将展示如何在Linux上模拟慢速硬键,以增加重现竞争条件的机会。

该解决方案将基于nbd和细trickle ,它将使用网络层来调节虚拟硬磁盘的I / O吞吐量

我想开始补充一点, 这并不是什么新鲜事物 ,我也不建议任何特别革命性的方法。 那里有许多博客文章描述了如何实现这一目标。 但是由于多种原因,我所阅读的内容都无法在Fedora 22或Centos 6安装中立即使用。

这就是促使我回馈互联网的主要原因,可能只是在争论的另一页上加上了内容。

让我们从使用ndb网络块设备模拟我们的Hardisk的想法开始。

据我了解,Linux内核没有公开的官方方法来调节通用块设备的I / O速度。

在Internet上,您可能会发现许多建议,从禁用读写缓存到产生可能使您的系统繁忙的实际负载。

QoS可以在网络层上实施 。 因此,该想法是通过网络模拟块设备。

尽管这听起来可能非常复杂(也许是这样),但Linux内核已经使用nbd模块解决了该问题。

由于在我的Fedora 22上默认未自动启用该模块,因此我们必须先安装它,然后再启用它:

# install nbd module
sudo yum install ndb

# load nbd module
sudo modprobe nbd

# check nbd module is really loaded
lsmod | grep nbd
nbd                    20480  0

现在已经安装了nbd并加载了模块,我们为其守护程序创建一个配置文件:

# run this command as root
"cat > /etc/nbd-server/config" <<EOF
[generic]
[test]
    exportname = /home/pantinor/test_nbd
    copyonwrite = false
EOF

其中exportname是表示慢速虚拟硬键的文件路径。

您可以使用以下命令创建文件:

# create an empty file, and reserve it 1GB of space
dd if=/dev/zero of=/home/pantinor/test_nbd bs=1G count=1

现在已经有了配置文件和目标文件,您可以使用守护程序启动nbd-server

# start ndb-server daemon
sudo systemctl start nbd-server.service

# monitor the daaemon start up with:
journalctl -f --unit nbd-server.service

此时,您有一个服务器网络进程,侦听网络上任何客户端都可以连接到的端口10809 ,以将其安装为网络阻止设备。

我们可以使用以下命令挂载它:

# "test" corresponds to the configuration section in daemon  config file
sudo nbd-client -N test  127.0.0.1 10809  /dev/nbd0
# my Centos 6 version of nbd-client needs a slightly different synatx:
#    sudo nbd-client -N test  127.0.0.1   /dev/nbd0

现在,我们创建了一个虚拟块设备,称为/dev/nbd0 。 现在我们可以将其格式化为普通格式:

# format device
sudo mkfs /dev/nbd0 

# create folder for mounting
sudo mkdir /mnt/nbd

# mount device, sync option is important to not allow the kernel to cheat!
sudo mount -o sync /dev/nbd0 /mnt/nbd

# add write permissions to everyone
sudo chmod a+rwx /mnt/nbd

并不是说我们已经传递了mount命令标志-o sync 。 此命令具有重要功能 :禁用linux内核中的增强功能,该功能会延迟完成对设备的写操作。 否则,所有写操作将看起来像是瞬时的,内核实际上将在后台完成写请求。 取而代之的是,使用该标志,所有操作将等待直到该操作真正完成为止。

您可以检查现在是否可以在挂载点/mnt/nbd上进行读写。

现在让我们暂时卸载并与nbd-server断开连接:

sudo umount /mnt/nbd

sudo nbd-client -d /dev/nbd0

让我们介绍细trickle

Trickle是一种软件,可用于包装其他进程并限制其网络带宽。

您可以使用它来限制任何其他程序。 您可以执行的一个简单测试是将它与curl一起使用:

# download a sample file and limts download speed to 50 KB/s
trickle -d 50 -u 50  curl -O  http://download.thinkbroadband.com/5MB.zip

如您所料,现在,我们只需要加入细tricklenbd-server行为,即可获得所需的行为。

让我们开始停止当前的nbd-server守护程序以释放其默认端口:

sudo systemctl stop nbd-server.service

让我们通过细trickle开始:

# start nbd-server limiting its network throughput
trickle -d 20 -u 20 -v nbd-server -d

-d将服务器进程附加到控制台,因此只有在您关闭进程或客户端断开连接时 ,控制台才会被阻塞并且将被释放。

忽略错误消息:细trickle: Could not reach trickled, working independently: No such file or directory

现在,您可以重新发出命令以连接到nbd-server并重新安装它:

sudo nbd-client -N test  127.0.0.1 10809  /dev/nbd0

sudo mount -o sync /dev/nbd0 /mnt/nbd

您完成了! 现在,您已经在/dev/nbd0上安装了一个缓慢的/dev/nbd0

您可以通过以下方式验证慢速行为:

sudo dd if=/dev/nbd0 of=/dev/null bs=65536 skip=100 count=10
10+0 records in
10+0 records out
655360 bytes (655 kB) copied, 18.8038 s, 34.9 kB/s

# when run against an nbd-server that doesn't use trickle the output is:
# 655360 bytes (655 kB) copied, 0.000723881 s, 905 MB/s

现在您有了一个慢速分区,您可以将sw的文件放在那里以模拟慢速I / O。

可以将上述所有步骤转换为帮助程序脚本,从而使该过程更加简单,如此处所述: http : //philtortoise.blogspot.it/2013/09/simulating-slow-drive.html

翻译自: https://www.javacodegeeks.com/2015/10/debugging-tip-how-to-simulate-a-slow-hardisk.html

ios模拟器慢速

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值