單機搭建Android開發環境(三)

来源:http://www.cnblogs.com/we-hjb/archive/2016/03/14/5277176.html
-Advertisement-
Play Games

單機搭建Android開發環境三,優化VMWare配置及Ubuntu系統,縮短Ubuntu開機時間,並提高其運行性能。


單機搭建Android開發環境,第一篇重點介紹瞭如何優化Windows 7系統,以提高開發主機的性能並延長SSD的使用壽命。第二篇重點介紹了基於VMWare安裝64位版的Ubuntu 12.04,並安裝sshd、vim和samba。本篇將重點介紹VMWare配置的優化以及Ubuntu 12.04系統的優化,進一步減少對SSD無謂的寫操作並提高Ubuntu的開機啟動速度和運行性能。最終優化的結果,在SSD上啟動Ubuntu 12.04,大概不到9秒。

首先通過修改*.vmx配置文件,取消生成日誌,減少對SSD的寫操作,

  logging = "FALSE"

修改*.vmx配置文件,禁用硬碟記憶體文件(*.vmem),減少對SSD的寫操作,同時提高虛擬機的性能,

  mainMem.useNamedFile = "FALSE"

其他有關提高VMWare性能的配置如下:

  snapshot.disabled = "TRUE"

  MemTrimRate=0

  sched.mem.pshare.enable = "FALSE"

  sched.mem.maxmemctl=0

  MemAllowAutoScaleDown = "FALSE"

  mem.ShareScanTotal=0

  mem.ShareScanVM=0

  mem.ShareScanThreshold=4096

  prefvmx.minVmMemPct = "100"

  prefvmx.useRecommendedLockedMemSize = "TRUE"

  mainMem.partialLazySave = "FALSE"

  mainMem.partialLazyRestore = "FALSE"

  priority.grabbed = "high"

  priority.ungrabbed = "normal"

以上優化選項僅供參考,效果如何,以實測為準。

通過dmesg命令查看系統啟動信息,可以發現幾處有明顯的停頓,其中第一處如下,

  [ 3.572126] ACPI: Interpreter enabled

  [ 3.572260] ACPI: (supports S0 S1 S4 S5)

  [ 3.572530] ACPI: Using IOAPIC for interrupt routing

  [ 14.383799] ACPI: No dock devices found.

此處停頓了大概10秒,可通過修改*.vmx文件如下屬性做優化,

  mem.hotadd = "FALSE"

第二處如下,

  [ 5.760334] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)

  [ 5.998530] usb 2-2.1: new full-speed USB device number 4 using uhci_hcd

  [ 11.410208] ADDRCONF(NETDEV_UP): eth0: link is not ready

  [ 11.447128] udevd[470]: starting version 175

  [ 11.651791] Adding 3905532k swap on /dev/sda1. Priority:-1 extents:1 across:3905532k

此處停頓了大概5秒,跟eth0有關,可以通過如下步驟進行優化,

a)查找網卡對應的模塊名稱,執行命令,

  lspci -v

可以看到模塊名稱為e1000,Ethernet controller詳細信息如下,

  02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

  Subsystem: VMware PRO/1000 MT Single Port Adapter

  Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 19

  Memory at fd5c0000 (64-bit, non-prefetchable) [size=128K]

  Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]

  I/O ports at 2000 [size=64]

  [virtual] Expansion ROM at e7b00000 [disabled] [size=64K]

  Capabilities: <access denied>

  Kernel driver in use: e1000

  Kernel modules: e1000

b)增加blacklist,執行如下命令,

  echo "blacklist e1000" | sudo tee /etc/modprobe.d/blacklist-ethernet.conf

c)修改文件/etc/rc.local

  sudo vim /etc/rc.local

在exit 0前一行增加

  modprobe e1000

  exit 0

d)修改超時時間

  sudo vim /etc/init/failsafe.conf

# The point here is to wait for 2 minutes before forcibly booting

# the system. Anything that is in an "or" condition with 'started

# failsafe' in rc-sysinit deserves consideration for mentioning in

# these messages. currently only static-network-up counts for that.

 

# sleep 20

 

# Plymouth errors should not stop the script because we *must* reach

# the end of this script to avoid letting the system spin forever

# waiting on it to start.

$PLYMOUTH message --text="Waiting for network configuration..." || :

# sleep 40

 

$PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :

# sleep 59

$PLYMOUTH message --text="Booting system without full network configuration..." || :

註釋掉所有的sleep,並保存。

e)重新創建initrd

  sudo dpkg-reconfigure linux-image-$(uname -r)

 執行命令

  sudo reboot

重啟Ubuntu,如下所示處仍有停頓,因IPv6而起,

  [ 22.993369] eth0: no IPv6 routers present

修改配置文件/etc/sysctl.conf

  sudo vim /etc/sysctl.conf

增加如下設置禁用ipv6

  net.ipv6.conf.all.disable_ipv6 = 1

  net.ipv6.conf.default.disable_ipv6 = 1

  net.ipv6.conf.lo.disable_ipv6 = 1

經過以上修改,重新啟動Ubuntu,dmesg信息如下,系統在8S內啟動完成。

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.2.0-23-generic (buildd@crested) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu4) ) #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 (Ubuntu 3.2.0-23.36-generic 3.2.14)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.2.0-23-generic root=UUID=265046be-0609-4ca9-ac6f-ea5bba7ed74e ro
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] Disabled fast string operations
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009e800 (usable)
[    0.000000]  BIOS-e820: 000000000009e800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000bfee0000 (usable)
[    0.000000]  BIOS-e820: 00000000bfee0000 - 00000000bfeff000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000bfeff000 - 00000000bff00000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bff00000 - 00000000c0000000 (usable)
[    0.000000]  BIOS-e820: 00000000f0000000 - 00000000f8000000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
[    0.000000]  BIOS-e820: 0000000100000000 - 0000000440000000 (usable)
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] DMI present.
[    0.000000] DMI: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/02/2015
[    0.000000] Hypervisor detected: VMware
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[    0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
[    0.000000] No AGP bridge found
[    0.000000] last_pfn = 0x440000 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-C7FFF write-protect
[    0.000000]   C8000-CBFFF write-back
[    0.000000]   CC000-EFFFF uncachable
[    0.000000]   F0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000C0000000 mask 3FFC0000000 uncachable
[    0.000000]   1 base 00000000000 mask 3F800000000 write-back
[    0.000000]   2 disabled
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] original variable MTRRs
[    0.000000] reg 0, base: 3GB, range: 1GB, type UC
[    0.000000] reg 1, base: 0GB, range: 32GB, type WB
[    0.000000] total RAM covered: 31744M
[    0.000000] Found optimal setting for mtrr clean up
[    0.000000]  gran_size: 64K     chunk_size: 64K     num_reg: 5      lose cover RAM: 0G
[    0.000000] New variable MTRRs
[    0.000000] reg 0, base: 0GB, range: 2GB, type WB
[    0.000000] reg 1, base: 2GB, range: 1GB, type WB
[    0.000000] reg 2, base: 4GB, range: 4GB, type WB
[    0.000000] reg 3, base: 8GB, range: 8GB, type WB
[    0.000000] reg 4, base: 16GB, range: 16GB, type WB
[    0.000000] e820 update range: 00000000c0000000 - 0000000100000000 (usable) ==> (reserved)
[    0.000000] last_pfn = 0xc0000 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [ffff8800000f6a80] f6a80
[    0.000000] initial memory mapped : 0 - 20000000
[    0.000000] Base memory trampoline at [ffff880000099000] 99000 size 20480
[    0.000000] Using GB pages for direct mapping
[    0.000000] init_memory_mapping: 0000000000000000-00000000c0000000
[    0.000000]  0000000000 - 00c0000000 page 1G
[    0.000000] kernel direct mapping tables up to c0000000 @ 1ffff000-20000000
[    0.000000] init_memory_mapping: 0000000100000000-0000000440000000
[    0.000000]  0100000000 - 0440000000 page 1G
[    0.000000] kernel direct mapping tables up to 440000000 @ bffff000-c0000000
[    0.000000] RAMDISK: 364e4000 - 3726a000
[    0.000000] ACPI: RSDP 00000000000f6a10 00024 (v02 PTLTD )
[    0.000000] ACPI: XSDT 00000000bfeeb633 0005C (v01 INTEL  440BX    06040000 VMW  01324272)
[    0.000000] ACPI: FACP 00000000bfefee73 000F4 (v04 INTEL  440BX    06040000 PTL  000F4240)
[    0.000000] ACPI: DSDT 00000000bfeed1dd 11C96 (v01 PTLTD  Custom   06040000 MSFT 03000001)
[    0.000000] ACPI: FACS 00000000bfefffc0 00040
[    0.000000] ACPI: BOOT 00000000bfeed1b5 00028 (v01 PTLTD  $SBFTBL$ 06040000  LTP 00000001)
[    0.000000] ACPI: APIC 00000000bfeec8bd 00742 (v01 PTLTD  ? APIC   06040000  LTP 00000000)
[    0.000000] ACPI: MCFG 00000000bfeec881 0003C (v01 PTLTD  $PCITBL$ 06040000  LTP 00000001)
[    0.000000] ACPI: SRAT 00000000bfeeb72f 008D0 (v02 VMWARE MEMPLUG  06040000 VMW  00000001)
[    0.000000] ACPI: HPET 00000000bfeeb6f7 00038 (v01 VMWARE VMW HPET 06040000 VMW  00000001)
[    0.000000] ACPI: WAET 00000000bfeeb6cf 00028 (v01 VMWARE VMW WAET 06040000 VMW  00000001)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] system APIC only can use physical flat
[    0.000000] Setting APIC routing to physical flat.
[    0.000000] SRAT: PXM 0 -> APIC 0x00 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x02 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x04 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x06 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x08 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x0a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x0c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x0e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x10 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x12 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x14 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x16 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x18 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x1a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x1c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x1e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x20 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x22 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x24 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x26 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x28 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x2a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x2c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x2e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x30 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x32 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x34 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x36 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x38 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x3a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x3c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x3e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x40 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x42 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x44 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x46 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x48 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x4a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x4c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x4e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x50 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x52 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x54 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x56 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x58 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x5a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x5c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x5e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x60 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x62 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x64 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x66 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x68 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x6a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x6c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x6e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x70 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x72 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x74 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x76 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x78 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x7a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x7c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x7e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x80 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x82 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x84 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x86 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x88 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x8a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x8c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x8e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x90 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x92 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x94 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x96 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x98 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x9a -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x9c -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0x9e -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xa0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xa2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xa4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xa6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xa8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xaa -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xac -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xae -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xb0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xb2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xb4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xb6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xb8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xba -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xbc -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xbe -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xc0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xc2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xc4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xc6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xc8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xca -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xcc -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xce -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xd0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xd2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xd4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xd6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xd8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xda -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xdc -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xde -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xe0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xe2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xe4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xe6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xe8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xea -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xec -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xee -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xf0 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xf2 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xf4 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xf6 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xf8 -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xfa -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xfc -> Node 0
[    0.000000] SRAT: PXM 0 -> APIC 0xfe -> Node 0
[    0.000000] SRAT: Node 0 PXM 0 0-a0000
[    0.000000] SRAT: Node 0 PXM 0 100000-10000000
[    0.000000] SRAT: Node 0 PXM 0 10000000-c0000000
[    0.000000] SRAT: Node 0 PXM 0 100000000-440000000
[    0.000000] NUMA: Node 0 [0,a0000) + [100000,10000000) -> [0,10000000)
[    0.000000] NUMA: Node 0 [0,10000000) + [10000000,c0000000) -> [0,c0000000)
[    0.000000] NUMA: Node 0 [0,c0000000) + [100000000,440000000) -> [0,440000000)
[    0.000000] Initmem setup node 0 0000000000000000-0000000440000000
[    0.000000]   NODE_DATA [000000043fffb000 - 000000043fffffff]
[    0.000000]  [ffffea0000000000-ffffea0010ffffff] PMD -> [ffff88042f600000-ffff88043f5fffff] on node 0
[    0.000000] Zone PFN ranges:
[    0.000000]   DMA      0x00000010 -> 0x00001000
[    0.000000]   DMA32    0x00001000 -> 0x00100000
[    0.000000]   Normal   0x00100000 -> 0x00440000
[    0.000000] Movable zone start PFN for each node
[    0.000000] early_node_map[4] active PFN ranges
[    0.000000]     0: 0x00000010 -> 0x0000009e
[    0.000000]     0: 0x00000100 -> 0x000bfee0
[    0.000000]     0: 0x000bff00 -> 0x000c0000
[    0.000000]     0: 0x00100000 -> 0x00440000
[    0.000000] On node 0 totalpages: 4194158
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 5 pages reserved
[    0.000000]   DMA zone: 3913 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 16320 pages used for memmap
[    0.000000]   DMA32 zone: 765984 pages, LIFO

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決方法: 添加資源庫,針對上面的例子,AppCompat這個是v7里的,所以缺少的是v7的資源。從sdk去獲取,路徑是sdk\extras\android\support\v7\appcompat,把這個library通過eclipse導入(import)。然後之前的項目添加該lib,再clean
  • 初學swift,寫來練手的,游戲很簡單 ,顧名思義就是接水果 ,菠蘿不能接,接到一個水果得一分,接到菠蘿扣五分,漏一個水果扣一分,初始分0分,當分數低於0分 就Game Over了,暫時適用5s的模擬器,因為初學,有問題歡迎大家指出 ^。^   源碼下載:http://code.662p.com/l
  • 作者xcc3641,源碼SeeWeather,就看天氣——是一款遵循Material Design風格的只看天氣的APP。無流氓許可權,無自啟,xxx,用最少的許可權做最優的體驗。卡片展現(當前天氣情況,未來幾小時天氣情況,生活建議,一周七天概況)補全城市(第一版本因為自己偷懶所以城市有缺陷對不起各位)
  • 春秋旅行安卓客戶端源碼,這是一款高度模仿春秋旅行app開發的一款應用,通過抓包工具獲取到的介面,希望大家能夠喜歡,並且對大家的學習能夠有所幫助。 源碼下載:http://code.662p.com/view/12837.html <ignore_js_op> <ignore_js_op>  詳細說明
  • 本文轉自:http://www.linuxidc.com/Linux/2015-08/121270.htm 6.橙2都滿足最上面兩個條件,遍歷子控制項,先取出紅3 7.紅3不滿足條件2,取出藍3 8.藍3也不滿足條件2,最後最合適的控制項是橙2 找到合適的控制項之後就要進行響應了,這裡先介紹一下響應者鏈條
  • Android開發遇到的錯誤及解決方法1. Unable to resolve target 'android-7' 解決方案:修改工程目錄下的default.properties文件里的內容target=android-7改成target=android-12(或者其他版本)就可以了,最好用txt
  • 有時候我們會碰到這樣子的一種情形: 同時獲取兩個網路請求的數據,但是網路請求是非同步的,我們需要獲取到兩個網路請求的數據之後才能夠進行下一步的操作,這個時候,就是線程組與信號量的用武之地了. 列印結果: 2016-03-15 04:01:53.279 NetWorking[83611:1508240]
  • 由於安卓應用很廣泛,在工業中也常有一些應用,比如可以用安卓來去工業中的一些數據進行實現的監測,顯示,同時可以做一些自動化控制,當然在這裡,我不是做這些自動化控制方面的研究,只是做一個控制項,液位指示,其實就是繼承自progressbar,然後重新寫一測量與繪製,算是對自定義控制項進行一下複習。 我們要做
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...