我正在使用一個機器人平台(用於 RoboCup 競賽),我們運行 Ubuntu Server 13.10。在比賽期間,我們的機器人能夠盡快啟動至關重要。更重要的是,如果機器人在跌倒時重新啟動,那麼機器人在被帶離場地之前有 10 秒的時間恢復活力。
目前啟動時間約為 15 秒,我想知道如何縮短該時間。希望我也能學到一些東西。
這是完整的輸出dmesg
我認為這有助於分解每個時間步驟中發生的情況。輸出中存在一些差距:
- 0.41 時約有 0.8 秒的間隙
- 3.64 時有大約 2.8 秒的差距
- 9.67 時有大約 0.8 秒的差距
- 12.9 時有大約 1.4 秒的差距
eth
雖然不是必需的wlan
。
任何人都可以將其解碼為可操作的建議,以了解如何更快地啟動該機器人嗎?如果這些訊息中沒有足夠的信息,我還可以嘗試進一步調查什麼?
編輯我修改了我的二進位(它作為新貴作業自動啟動)以寫入系統日誌。它顯示,從通電後第一筆記錄的訊息開始:
Oct 30 12:51:52 darwin6 kernel: imklog 5.8.11, log source = /proc/kmsg started.
....
Oct 30 12:52:12 darwin6 kernel: [ 34.276716] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Oct 30 12:52:13 darwin6 dhclient: Internet Systems Consortium DHCP Client 4.2.4
Oct 30 12:52:13 darwin6 dhclient: Copyright 2004-2012 Internet Systems Consortium.
Oct 30 12:52:13 darwin6 dhclient: All rights reserved.
Oct 30 12:52:13 darwin6 dhclient: For info, please visit https://www.isc.org/software/dhcp/
Oct 30 12:52:13 darwin6 dhclient:
Oct 30 12:52:13 darwin6 dhclient: Listening on LPF/wlan0/00:0d:f0:95:0d:4d
Oct 30 12:52:13 darwin6 dhclient: Sending on LPF/wlan0/00:0d:f0:95:0d:4d
Oct 30 12:52:13 darwin6 dhclient: Sending on Socket/fallback
Oct 30 12:52:13 darwin6 dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 3 (xid=0x3cd422f3)
Oct 30 12:52:13 darwin6 dhclient: DHCPREQUEST of 192.168.0.3 on wlan0 to 255.255.255.255 port 67 (xid=0x3cd422f3)
Oct 30 12:52:13 darwin6 dhclient: DHCPOFFER of 192.168.0.3 from 192.168.0.1
Oct 30 12:52:13 darwin6 avahi-daemon[833]: Joining mDNS multicast group on interface wlan0.IPv6 with address fe80::20d:f0ff:fe95:d4d.
Oct 30 12:52:13 darwin6 avahi-daemon[833]: New relevant interface wlan0.IPv6 for mDNS.
Oct 30 12:52:13 darwin6 avahi-daemon[833]: Registering new address record for fe80::20d:f0ff:fe95:d4d on wlan0.*.
Oct 30 12:52:14 darwin6 dhclient: DHCPACK of 192.168.0.3 from 192.168.0.1
Oct 30 12:52:14 darwin6 avahi-daemon[833]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.168.0.3.
Oct 30 12:52:14 darwin6 avahi-daemon[833]: New relevant interface wlan0.IPv4 for mDNS.
Oct 30 12:52:14 darwin6 avahi-daemon[833]: Registering new address record for 192.168.0.3 on wlan0.IPv4.
Oct 30 12:52:14 darwin6 dhclient: bound to 192.168.0.3 -- renewal in 41314 seconds.
Oct 30 12:52:21 darwin6 ntpdate[1294]: adjust time server 91.189.94.4 offset -0.243167 sec
Oct 30 12:52:46 darwin6 kernel: [ 68.451644] perf samples too long (2504 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
Oct 30 12:53:49 darwin6 boldhumanoid[1455]: Starting boldhumanoid process
奇怪的是我還用秒錶計時。從開啟電源到我的進程啟動(機器人啟動)只花了 35 秒。根據時間戳,似乎有什麼原因導致系統日誌寫入進一步延遲 100 秒。
答案1
我不確定 Ubuntu 的伺服器安裝是否真的是正確的方法,因為你所描述的聽起來像是 archlinux 的工作或與我類似。
您將需要對系統進行大量自定義,此時「採用基本系統並添加所需的任何內容」方法比「使用成熟的安裝並刪除任何不必要的內容(例如 apport、apparmor、dhcp)更容易.. .)“ 一。
但無論如何,實際上有一個 wiki 條目是關於減少啟動時間的。這些命令可能無法為您的 Ubuntu 系統進行 1to1 轉換,但此條目可能會為您指明正確的方向:
https://wiki.archlinux.org/index.php/Improve_boot_performance
抱歉,但是減少特定於設備的啟動時間並不是 askubuntu 上一個簡單的答案所能解決的,您必須查看啟動例程中的每個項目,並決定是否有必要,並相應地禁用系統組件。
答案2
這是您基本上開始減法的應用程式之一,直到破壞某些東西然後退出。例如,我認為您的機器人可能不會使用 Zeroconf(即 avahi 守護程式),因此請將其卸載。你真的需要網路嗎?或者更好的是,啟動到單一使用者模式(將 1 附加到核心命令列),然後查看在應用程式開始工作之前必須打開多少服務。
答案3
您屬於哪個尺寸組?我意識到這可能不是您在這裡尋找的答案,但對於時間關鍵的事情,例如在 10 秒內站起來,我會選擇嵌入式平台。
如果您有空間/功率預算,您應該考慮在機器人上安裝諸如 arduino 之類的東西,並編寫一些開環站立行為。主機板上還是可以用ubuntu的。我建議這樣的事情:
- 有一個 arduino(或類似的)從 ubuntu 伺服器接收定期心跳訊號
- 如果超過 X 個心跳間隔,arduiono 就會接手控制權,並重新啟動伺服器
- arduino 可以直接驅動馬達(或透過您正在使用的任何馬達控制器)並發出站立命令,這允許機器人在主系統啟動時「恢復」並且不會被取消資格
- 預先編程一些站立行為,可能基於機器人面向的方向,然後根據加速度計選擇其中之一
- 如果你不屬於有腿的部門之一,那麼只需在 ardiuno 上編寫一些俗氣的程式碼,使其看起來像是機器人在伺服器啟動時正在做某事
- 一旦系統啟動,它會發送另一個心跳,arduino可以釋放控制權
這裡有一些答案可以幫助您縮短啟動時間(基本上將其關閉,直到損壞為止),但即使如此,如果斷電是一個足夠常見的問題,那麼類似的事情可能會非常有幫助。
答案4
嘗試將儲存緩衝區減少到 4 MB。在/etc/sysctl.conf中寫入:
vm.dirty_bytes = 4194304 vm.dirty_background_bytes = 1048576
也可能將寫入時間減少到 3 秒
vm.dirty_expire 厘秒 = 300 vm.dirty_writeback_centisecs = 300
如果這有幫助或沒有幫助,請發表評論。謝謝。