OpenStack DPDK 配置问题总结

作者:Maxwell Li
日期:2017/06/20
未经作者允许,禁止转载本文任何内容。如需转载请留言。


收到 OpenStack Mitaka Ubuntu 16.04 环境上配置 DPDK 的需求,最近几天一直在调试。因为手头上只有一台物理机,所以只能进行虚拟部署(控制节点和计算节点均为起在物理机上的虚拟机)。本文主要记录配置 DPDK 过程中碰到的三个问题:ovs-vswitchd 进程无法启动、两台计算节点上的实例无法 ping 通、实例无法连接 metadate。具体指导请见 OpenStack DPDK 配置指导

1. ovs-vswitchd 进程无法启动

在配置 OVS-DPDK 运行参数时,起初在 /etc/default/openvswitch-switch 内加入以下内容:

DPDK_OPTS='--dpdk -c 0x1 -n 4 -m 2048 --vhost-owner libvirt-qemu:kvm --vhost-perm 0666'

然后重启 openvswitch-switch 服务,发现 ovs-switchd 进程没有过启动:

$ ps aux | grep ovs-vswitchd

root     16887  0.0  0.0  12948  1004 pts/0    S+   02:16   0:00 grep --color=auto ovs-vswitchd

但是注释掉 /etc/default/openvswitch-switch 文件内的 DPDK_OPTS,openvswitch 服务就能正常启动,怀疑是 DPDK_OPTS 配置问题。谷歌后找到这个 launchpad,提到了 DPDK_OPTS 参数无法被 ovs-vswitchd 识别,是 OVS 的一个 bug,但是应该已经被修复。尝试注释掉 DPDK_OPTS,重启 openvswitch 服务,然后 kill 掉所有 ovs-vswitchd 进程,再配合 DPDK 配置项手动启动 ovs-vswitchd 进程。

$ ps aux | grep ovs-vswitchd

root     17766  0.0  0.0  36812  2680 ?        S<s  02:22   0:00 ovs-vswitchd: monitoring pid 17767 (healthy)
root     17767  0.5  0.3 406652 54744 ?        S<Ll 02:22   0:00 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
root     18078  0.0  0.0  12948  1016 pts/0    S+   02:22   0:00 grep --color=auto ovs-vswitchd

$ kill -9 17766
$ kill -9 17767
$ ovs-vswitchd --dpdk -c 0x1 -n 2 -- unix:/var/run/openvswitch/db.sock --pidfile --detach

2017-05-31T09:25:14Z|00001|dpdk|INFO|No -vhost_sock_dir provided - defaulting to /var/run/openvswitch
EAL: Detected lcore 0 as core 0 on socket 0
EAL: Detected lcore 1 as core 0 on socket 0
EAL: Detected lcore 2 as core 0 on socket 0
EAL: Detected lcore 3 as core 0 on socket 0
EAL: Support maximum 128 logical core(s) by configuration.
EAL: Detected 4 lcore(s)
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Module /sys/module/vfio_iommu_type1 not found! error 2 (No such file or directory)
EAL: VFIO modules not all loaded, skip VFIO support...
EAL: Setting up physically contiguous memory...
EAL: Ask a virtual area of 0x26600000 bytes
EAL: Virtual area found at 0x7f0cab600000 (size = 0x26600000)
EAL: Ask a virtual area of 0x84200000 bytes
EAL: Virtual area found at 0x7f0c27200000 (size = 0x84200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f0c26e00000 (size = 0x200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f0c26a00000 (size = 0x200000)
EAL: Ask a virtual area of 0x155000000 bytes
EAL: Virtual area found at 0x7f0ad1800000 (size = 0x155000000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f0ad1400000 (size = 0x200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7f0ad1000000 (size = 0x200000)
EAL: Requesting 4096 pages of size 2MB from socket 0
EAL: TSC frequency is ~2494222 KHz
EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles !
EAL: Master lcore 0 is ready (tid=d5cb2b00;cpuset=[0])
EAL: PCI device 0000:00:04.0 on NUMA socket -1
EAL:   probe driver: 1af4:1000 rte_virtio_pmd
PMD: device not available for DPDK (in use by kernel)
EAL: Error - exiting with code: 1
  Cause: Requested device 0000:00:04.0 cannot be used

ovs-vswitchd 进程启动失败。0000:00:04.0 是 eth0 的 pci 号,猜测 ovs-vswitchd 启动时,检索了所有的网卡。尝试将 eth0 也改成 DPDK 驱动。由于 ovs-vswitch 进程不启动,无法通过 external 登录节点,因此只能通过 vnc 进入。

1.png
2.png

更加证实了我的猜想,再将 eth1 也改成 DPDK 驱动,尝试启动 ovs-vswitchd。

3.png
4.png

重新在 /etc/default/openvswitch-switch 文件内打开 DPDK_OPTS 配置,openvswtich 服务能够正常重启。

5.png

至此,可以推断出 ovs-vswitchd 进程无法启动与 DPDK_OPTS 无关,而是检索了其他非 DPDK 网卡。因此,需要将非 DPDK 网卡加入一个黑名单中,防止 ovs-vswitchd 检索。谷歌后找到了官方文档中关于白名单的相关说明:

-b, --pci-blacklist domain:bus:devid.func
Blacklist a PCI devise to prevent EAL from using it. Multiple -b options are allowed.

-w, --pci-whitelist domain:bus:devid:func
Add a PCI device in white list.

重新配置了一个计算节点,在 DPDK_OPTS 中加入 -w 0000:00:06.0,openvswitch 成功启动,此问题解决。

2. 两台计算节点上的实例无法 ping 通

在控制节点上,给 flavor 加上大页配置,然后利用此 flavor 在两个计算节点上各起一个实例。实例无法连接 metadata,ip 无法分配,只能通过 vnc 进入后手动分配 ip,但是配上 ip 之后两个实例无法 ping 通。起实例前期准备如下:

# Source RC 文件
$ source /opt/admin-openrc.sh
# 上传 image
$ wget 10.1.0.12/image/cirros-0.3.3-x86_64-disk.img
$ glance image-create --name "cirros" --file cirros-0.3.3-x86_64-disk.img --disk-format qcow2 --container-format bare
# 配置安全组
$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
# 创建 demo-net
$ neutron net-create demo-net
$ neutron subnet-create \
    --name demo-subnet \
    --gateway 10.10.10.1 \
    --dns-nameserver 8.8.8.8 \
    demo-net 10.10.10.0/24
$ neutron router-create demo-router
$ neutron router-interface-add demo-router demo-subnet
$ neutron router-gateway-set demo-router ext-net
# 在 br-physnet2 上创建 provider 网络
$ neutron net-create dpdk-net \
    --provider:network_type flat \
    --provider:physical_network physnet2 \
    --router:external "False"
$ neutron subnet-create \
    --name dpdk-subnet \
    --disable-dhcp \
    --gateway 11.11.11.1 \
    --allocation-pool \
    start=11.11.11.10,end=11.11.11.100 \
    dpdk-net 11.11.11.0/24

在这里描述一下网络环境。OpenStack 网络如下:

$ neutron net-list
+--------------------------------------+----------+-------------------------------------------------------+
| id                                   | name     | subnets                                               |
+--------------------------------------+----------+-------------------------------------------------------+
| 3a51f801-9095-43f7-b8f9-29f9fa9bf4cf | ext-net  | 5bc900d3-6896-4765-98d1-5b8b3126100b 192.168.116.0/24 |
| 5d20fee2-fbaf-46cb-bd43-43869861fa30 | dpdk-net | 98a672f8-fd7f-4c6b-bdff-68898c953ef4 11.11.11.0/24    |
| b2ab0001-3877-4cb1-919f-c167c5389c03 | demo-net | 37491d05-041f-4a62-b1c3-2a3f23d383ba 10.10.10.0/24    |
+--------------------------------------+----------+-------------------------------------------------------+

虚拟部署组网图如下所示:

虚拟部署组网图.jpg

ext-net 建在 br-prv 上,br-prv 是 eth1 上的 ovs 网桥,为正常网络。dpdk-net 建在 br-physnet2 上,br-physnet2 是 eth2 上的 ovs 网桥,进行了 DPDK 配置,上图中没有画出。由于此前一些 DPDK 专家告诉我,起 DPDK 虚拟机需要两个网络,一个作为管理网络,另外一个作为 DPDK 网络。因此我在 br-prv 和 br-physnet2 上各建了一个网络,这里存在问题,将在下一个问题中详细展开。

$ openstack server create \
    --flavor m1.tiny \
    --image cirros \
    --security-group default \
    --nic net-id=$(neutron net-list | grep demo-net | awk '{print $2}') \
    --nic net-id=$(neutron net-list | grep dpdk-net | awk '{print $2}') \
    --availability-zone nova:host4 demo1
$ openstack server create \
    --flavor m1.tiny \
    --image cirros \
    --security-group default \
    --nic net-id=$(neutron net-list | grep demo-net | awk '{print $2}') \
    --nic net-id=$(neutron net-list | grep dpdk-net | awk '{print $2}') \
    --availability-zone nova:host5 demo2

通过 VNC 进入实例,配上 ip 发现两个网络都无法 ping 通。

6.png

为了验证是实例的问题还是 DPDK 网络的问题,分别在两个计算节点上用 libvirt 各起一台虚拟机。陈帅发给我一份 XMl 文件,该文件可以使用 DPDK 网络,如下所示:

<domain type='kvm'>
  <name>vhost1</name>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <hugepages>
      <page size='2048' unit='KiB' nodeset='0'/>
    </hugepages>
  </memoryBacking>
  <vcpu placement='static'>4</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0-3'/>
    <vcpupin vcpu='1' cpuset='0-3'/>
    <vcpupin vcpu='2' cpuset='0-3'/>
    <vcpupin vcpu='3' cpuset='0-3'/>
    <emulatorpin cpuset='0-3'/>
  </cputune>
  <cpu>
    <topology sockets='4' cores='1' threads='1'/>
    <numa>
      <cell id='0' cpus='0-3' memory='1048576' memAccess='shared'/>
    </numa>
  </cpu>
  <numatune>
    <memory mode='strict' nodeset='0'/>
    <memnode cellid='0' mode='strict' nodeset='0'/>
  </numatune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
    <boot dev='hd'/>
    <boot dev='network'/>
    <bios useserial='yes' rebootTimeout='0'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/cirros1.img'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='vhostuser'>
      <mac address='00:00:00:00:00:01'/>
      <source type='unix' path='/run/openvswitch/vhost-user1' mode='client'/>
      <model type='virtio'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>

利用此 XML 在两个计算节点上各起一台虚拟机(注意修改 mac 地址等信息),并且直接将 vhost-user 口建在 br-int 上。

$ ovs-vsctl add-port br-int vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser
$ ovs-vsctl list-ports br-int

int-br-physnet2
int-br-prv
patch-tun
vhost-user1
vhud51eb3cf-3f
vhueb25bb23-6d

其中 vhu*** 为 nova 起虚拟机时所建立的端口。

$ virsh define vhost1.xml 
$ virsh start vhost1

在另一台计算节点上也起一台虚拟机,然后通过 vnc 登录后,给两台虚拟机配上 ip,发现能够互相 ping 通。

7.png

由此可见,br-int 以及 DPDK 网络并没有问题。通过 Beyond Compare 对比陈帅给我的 XML 文件和 nova 起实例的 XML,大致猜测实例没有配置 Hugepage 和 NUMA。

8.png

配置 flavor 后重新起实例,DPDK 网络成功 ping 通。

$ openstack flavor create  m1.tiny_huge --ram 512 --disk 1 --vcpus 1
$ openstack flavor set \
    --property hw:mem_page_size=large \
    --property hw:cpu_policy=dedicated \
    --property hw:cpu_thread_policy=require \
    --property hw:numa_mempolicy=preferred \
    --property hw:numa_nodes=1 \
    --property hw:numa_cpus.0=0 \
    --property hw:numa_mem.0=512 \
    m1.tiny_huge

3. 实例无法连接 metadate

DPDK 网络能够 ping 通,但是普通网络仍旧无法 ping 通,也无法通过 br-tun 连接到 metadata。仔细检查发现,计算节点的 br-int 网桥上只有 DPDK 类型的端口,没有 qvo 口。

9.png

原本期望实例链接 br-int 网桥的两个口,portA 作为 qvo 口,流量通过 br-tun 前往控制节点,portB 作为 DPDK 口,流量通过 br-physnet2 前往外部网络。然而事与愿违,在 br-int 上的两个口均为 DPDK 口,并且在计算节点上抓流表,发现所有流量都前往 br-physnet2。

...
    <interface type='vhostuser'>
      <mac address='fa:16:3e:b2:e5:a0'/>
      <source type='unix' path='/var/run/openvswitch/vhua47ab91a-0c' mode='client'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='vhostuser'>
      <mac address='fa:16:3e:34:19:fe'/>
      <source type='unix' path='/var/run/openvswitch/vhucd29dabe-61' mode='client'/>
      <model type='virtio'/>
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
...

通过查看实例的 XML 文件得知:port vhua47ab91a-0c 为 demo-net 创建,port vhucd29dabe-61 为 dpdk-net 创建。查看 br-int 信息可知:port vhua47ab91a-0c 编号为 16,port vhucd29dabe-61 编号为 17。

$ ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:00005e308d6dad4f
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(int-br-physnet2): addr:be:27:6b:88:f0:af
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 2(int-br-prv): addr:9e:1c:f7:a5:4f:6a
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 3(patch-tun): addr:3e:2d:ee:8a:b9:f9
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 16(vhua47ab91a-0c): addr:00:00:00:00:00:00
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 17(vhucd29dabe-61): addr:00:00:00:00:00:00
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-int): addr:5e:30:8d:6d:ad:4f
     config:     PORT_DOWN
     state:      LINK_DOWN
     current:    10MB-FD COPPER
     speed: 10 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

通过 vnc 进入实例,配上 ip 之后 ping 另一台实例,在 br-int 和 br-physnet2 上连续抓流表,发现 port16 出来的包在 br-physnet2 上被 drop。以下只记入了 port16 相关信息,port17 流量正常。

$ ovs-ofctl dump-flows br-int
...
 cookie=0xb181a97b01fa1a9f, duration=378.439s, table=0, n_packets=0, n_bytes=0, idle_age=378, priority=10,arp,in_port=16 actions=resubmit(,24)

 cookie=0xb181a97b01fa1a9f, duration=378.551s, table=24, n_packets=0, n_bytes=0, idle_age=378, priority=2,arp,in_port=16,arp_spa=10.10.10.3 actions=resubmit(,25)

 cookie=0xb181a97b01fa1a9f, duration=379.109s, table=25, n_packets=9, n_bytes=1464, idle_age=235, priority=2,in_port=16,dl_src=fa:16:3e:b2:e5:a0 actions=NORMAL
...

$ ovs-ofctl dump-flows br-int
...
 cookie=0xb181a97b01fa1a9f, duration=395.872s, table=0, n_packets=6, n_bytes=252, idle_age=0, priority=10,arp,in_port=16 actions=resubmit(,24)

 cookie=0xb181a97b01fa1a9f, duration=395.984s, table=24, n_packets=6, n_bytes=252, idle_age=0, priority=2,arp,in_port=16,arp_spa=10.10.10.3 actions=resubmit(,25)

 cookie=0xb181a97b01fa1a9f, duration=396.542s, table=25, n_packets=15, n_bytes=1716, idle_age=0, priority=2,in_port=16,dl_src=fa:16:3e:b2:e5:a0 actions=NORMAL
...

从以上信息中可以看出,port16 的包在 br-int 上正常,同时在 br-physnet2 上抓流表,得到了相同数量的变化。因此,port16 的包进入了 br-physnet2,并且在 br-physnet2 上被 drop。

$ ovs-ofctl dump-flows br-physnet2
...
 cookie=0xac17fb961e721d6e, duration=32311.941s, table=0, n_packets=188, n_bytes=14448, idle_age=16, priority=2,in_port=2 actions=drop
...

$ ovs-ofctl dump-flows br-physnet2
...
 cookie=0xac17fb961e721d6e, duration=32324.557s, table=0, n_packets=194, n_bytes=14738, idle_age=1, priority=2,in_port=2 actions=drop
...

$ ovs-ofctl show br-physnet2
OFPT_FEATURES_REPLY (xid=0x2): dpid:00001683ed7b0446
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(dpdk0): addr:52:54:00:27:96:c7
     config:     0
     state:      0
     current:    10GB-FD
     supported:  10MB-HD 100MB-HD 1GB-HD 10GB-FD COPPER FIBER AUTO_PAUSE_ASYM
     speed: 10000 Mbps now, 10000 Mbps max
 2(phy-br-physnet2): addr:02:1d:5b:ba:3e:2e
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-physnet2): addr:16:83:ed:7b:04:46
     config:     PORT_DOWN
     state:      LINK_DOWN
     current:    10MB-FD COPPER
     speed: 10 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

br-physnet2 上 port2 的包是从 br-int 上过来的,直接被 drop。这也是应为上图中 portA 口的类型也为 DPDK,当 portA 出来的包进入 br-physnet2 时,br-physnet2 并不认识它,因此直接 drop。另外,如果需要 portA 建为 qvo 类型,需要修改 nova 和 neutron 的代码,显然不切实际。

因此,期望实例能够连接 metadata,只能直接通过外部网络。

10.png

由于此前建立 dpdk-net 并没有开启 dhcp,删除网络后重新建立,并且在 /etc/neutron/dhcp_agent.in 配置文件中配置 metadata 相关配置项为 True,重启 neutron 服务并重建 dpdk-net,拉起实例之后可以连接上 metadata。

$ crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True
$ crudini --set /etc/neutron/dhcp_agent.ini DEFAULT force_metadata True
$ crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_metadata_network True
$ for i in $(cat /opt/service | grep neutron); do service $i restart; done

$ neutron net-create dpdk-net \
    --provider:network_type flat \
    --provider:physical_network physnet2 \
    --router:external "False"

$ neutron subnet-create \
    --name dpdk-subnet \
    --gateway 22.22.22.1 \
    dpdk-net 22.22.22.0/24
    
$ openstack server create \
    --flavor m1.tiny_huge \
    --image cirros \
    --nic net-id=$(neutron net-list | grep dpdk-net | awk '{print $2}') \
    --availability-zone nova:host4 demo1

查看实例的 console log,发现实例已经连上 metadata 并且配上了 ip,可以直接通过名字空间登录。

总结

调试 DPDK 前前后后花了大半个月,中间也碰到了不少问题,这里只记录了比较有价值的三个。在调试完后为了写这篇总结,复现问题也花了不少精力。但整个过程调试下来,对大页、DPDK 有了较为系统的了解,收获颇多。

参考网页

https://docs.openstack.org/admin-guide/compute-flavors.html
https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1546565
http://blog.csdn.net/quqi99/article/details/51087955
https://bugs.launchpad.net/ubuntu/+source/openvswitch-dpdk/+bug/1547463
https://github.com/openvswitch/ovs/blob/master/Documentation/intro/install/dpdk.rst
http://feisky.xyz/sdn/dpdk/index.html
https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html-single/network_functions_virtualization_planning_guide/#ch-managing-deployments
https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html/network_functions_virtualization_configuration_guide/part-dpdk-configure
http://dpdk.org/doc/guides-16.11/testpmd_app_ug/run_app.html
http://sysight.com/index.php?qa=17&qa_1=hugepage的优势与使用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • OpenStackOVSGRE/VXLAN网络 学习或者使用OpenStack普遍有这样的现象:50%的时间花费在...
    石头和齐齐阅读 2,427评论 0 12
  • 装载自http://sdnhub.cn/index.php/openv-switch-full-guide/ 1 ...
    ximitc阅读 5,873评论 0 11
  • neutron网络目的是为OpenStack云更灵活的划分网络,在多租户的环境下提供给每个租户独立的网络环境。 n...
    石头和齐齐阅读 880评论 0 0
  • /***OpenStack***/ https://docs.openstack.org/install-guid...
    拖鞋花短裤阅读 1,260评论 0 1
  • 喜爱的季节终于来临 拂面的风微微暖 流水映着梨花 鸟的翅膀不再凝滞 破土的草芽儿没有丝毫犹豫 我也掀开了 那借以自...
    读云轩札记阅读 265评论 0 0