概 述
Memcached是一個開源的內存鍵值數據存儲系統,通常用于緩存任意類型的小塊數據,如字符串,或數據庫和 API 調用結果中的對象。由于其基于內存的特性,Memcached 旨在通過在 RAM 中緩存數據和對象來加速動態 web 應用程序,并減少數據庫查找。它是云計算中最具開創性的緩存存儲之一,至今仍很受歡迎。
本指南的目的是描述在 AmpereAltra處理器上以最佳方式運行 memcached 的相關技巧。
構建先決條件
實現應用程序的高性能運行,首先要正確構建應用程序并使用適當的編譯器標志(flag)。在我們的例子中,當在 Ampere Altra 處理器上構建 memcached 時,我們建議使用 GCC 編譯器版本 10 或更新的版本從源代碼進行構建。較新的編譯器往往對新的處理器特性有更好的支持,并結合了更高級的代碼生成技術。
我們使用 CentOS8 作為我們本次優化測試的操作系統。
從 SCL 存儲庫下載并安裝 GCC 10:
sudo yum -y install yum install scl-utils scl-utils-build sudo yum -y install gcc-toolset-10-gcc scl enable gcc-toolset-10 bash
對于其他操作系統,如 Ubuntu 20.04 LTS 和 Debian, GCC 10.2.1 也是可用的,可直接從相應的存儲庫安裝。
Libevent 是構建 memcached 所必需的,可以如下方式下載:
sudo yum install libevent-devel
構建和安裝
Memcached wiki 上的安裝指南(https://github.com/memcached/memcached/wiki/Install)有關于在 Debian/Ubuntu 和 Redhat/Fedora 上安裝 Memcached 的說明。源代碼可在 memcached 項目頁面上獲得。我們建議使用最新的穩定版本。
memcached 項目頁面
可以使用以下命令下載 Memcached。
wget https://memcached.org/latest #you might need to rename the file tar -zxf memcached-1.x.x.tar.gz cd memcached-1.x.x
在繼續為 Memcached 配置構建選項之前,讓我們添加一些特定于 Ampere Altra 處理器的編譯器標志:
./configure CFLAGS="-O3 -march=native -mcpu=neoverse-n1" --prefix=/usr/local/memcached make && make test && sudo make install
KERNEL 優化
眾所周知,Memcached 占用大量網絡資源,為了獲得良好的性能,內核和網卡(NIC)的調優是必要的。
大多數內核調優配置可以通過 sysfs 文件系統修改數據結構來設置。但是,有些調整可能需要重新編譯內核。一般的內核優化措施是設置操作系統使用 64 KB 的頁面大小。這將提高 Ampere Altra 處理器上的翻譯暫置緩沖區(TLB)的效率。
查看系統上正在使用的頁面大小:
getconf PAGESIZE
對于 64 KB 的頁面大小,預期返回值 65536。如果不是這樣,請檢查 CONFIG_ARM64_64K_PAGES 是否已應用于內核配置文件,重新編譯并安裝內核,然后重新啟動。
CONFIG_ARM64_64K_PAGES=y
TUNED PROFILES
考慮到大量的內核配置選項,有時使用預定義的優化配置文件來匹配您的使用場景會更容易。Tuned 就是這樣一種調優服務,它可以通過設置調優配置文件來配置操作系統來提高性能。
以 CentOS 8 為例,如果 Memcached 的吞吐量是所關注的主要指標,我們建議使用吞吐量-性能(throughput-performance)的 Tuned Profile。該配置文件將 CPU 調控器(governors)設置為性能模式,這樣可以減少調度延遲,最大化 I/O 吞吐量,并減少交換度值(swappiness),所有這些都可以顯著提高性能。
對于 Ubuntu,如果它不是操作系統安裝的一部分,則可能需要單獨安裝 tuned profile。
sudo apt-get update -y sudo apt-get install -y tuned
為了改進 Ampere Altra 處理器上的內核調度延遲,我們建議通過更新 Tuned Profile 文件中的相應設置,將 sched_wakeup_granularity_ns 更改為 5000。
PROFILE_FILE=/usr/lib/tuned/throughput-performance/tuned.conf sed -i 's/sched_wakeup_granularity_ns = 15000000/sched_wakeup_granularity_ns = 5000/g' $PROFILE_FILE
然后使用以下命令啟用吞吐量-性能(throughput-performance)的 Tuned Profile:
tuned-adm profile throughput-performance
網絡設置
像 Memcached 這樣的應用程序通常被調優為在高吞吐量下運行,同時保持嚴格的服務水平協議(SLA)。p.99 延遲通常是一個常見的標準。為了考慮此類 SLA 的要求,我們建議調優內核 TCP/IP 設置,因為傳入的請求是通過 TCP 連接建立的。
我們在 Memcached 測試中使用的 TCP/IP 調優設置列表如下:
echo 9999999 > /proc/sys/net/core/somaxconn echo 4194304 > /proc/sys/net/core/rmem_max echo 4194304 > /proc/sys/net/core/wmem_max echo 4194304 > /proc/sys/net/core/rmem_default echo 4194304 > /proc/sys/net/core/wmem_default echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_wmem echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_mem echo 250000 > /proc/sys/net/core/netdev_max_backlog echo 50 > /proc/sys/net/core/busy_read echo 50 > /proc/sys/net/core/busy_poll echo 3 > /proc/sys/net/ipv4/tcp_fastopen echo 0 > /proc/sys/kernel/numa_balancing echo 0 > /proc/sys/net/ipv4/tcp_timestamps echo 1 > /proc/sys/net/ipv4/tcp_low_latency echo 0 > /proc/sys/net/ipv4/tcp_sack echo 1 > /proc/sys/net/ipv4/tcp_syncookie
除了內核 TCP/IP 設置之外,我們還需要確保應用程序能夠利用大多數網卡(NIC)內置的硬件卸載功能,例如 Generic-Receive-Offload,它可以聚合屬于同一流的多個傳入數據包,以及 large - receive - offload,它可以將屬于同一連接的傳入 TCP/IP 數據包合并到一個大的接收段中,然后將其傳遞給內核。
具體操作如下:
ethtool -Kgro on ethtool -K lro on
對于像 Memcached 這樣的網絡綁定(network-bound)工作負載,強烈建議將網卡中斷(irq)分布在多個核心上,以避免出現瓶頸。參考文檔 2 是關于 SMP IRQ 關聯的一個非常好的參考。
建議使用以下命令檢查網卡支持的硬件通道數量,以確保通道數量與網卡的通道容量匹配:
ethtool -lsudo ethtool -L combined
MEMCACHED 配置
Memcached 本身是可以做些調優來更好地匹配實際應用環境。調優它的一個很好的起點是 Memcached 內置的統計功能。可以通過使用 telnet 連接到 memcached 并運行它來研究統計數據:
telnet localhost 11211 Connected to localhost. Escape character is '^]'. telnet> stats STAT pid 23599 STAT uptime 675 STAT time 1211439587 STAT version 1.2.5 STAT pointer_size 32 STAT rusage_user 1.404992 STAT rusage_system 4.694685 STAT curr_items 32 STAT total_items 56361 STAT bytes 2642 STAT curr_connections 53 STAT total_connections 438 STAT connection_structures 55 STAT cmd_get 113482 STAT cmd_set 80519 STAT get_hits 78926 STAT get_misses 34556 STAT evictions 0 STAT bytes_read 6379783 STAT bytes_written 4860179 STAT limit_maxbytes 67108864 STAT threads 1 END
get_hits 和 get_misses 值特別重要,它們可用于計算 Memcached 的緩存命中/未命中比率。像 Memcached 這樣的內存緩存的經驗法則是將緩存命中率保持在 90% 以上。
清除值(evictions value)計算從緩存中清除的未過期項的數量,以便為新項騰出空間。清除次數過多可能表明緩存過度使用或分配的內存量不足。
最后,Memcached 線程的數量可能是影響 Memcached 總體性能的一個設置。對于像 Ampere Altra 系列處理器這樣的高核數處理器,我們建議在研究性能擴展時增加線程數量以使用盡可能多的核。極高的線程數可能導致鎖爭用,從而降低性能。在啟動 Memcached 時,可以通過使用 -t 選項來更改線程數。
在生產環境中對 Memcached 這樣的應用程序進行微調需要對其用法和端到端軟件堆棧有深入的了解。我們希望本指南中討論的設置可以幫助提高 Memcached 的性能,并建議參考這里提供的所有配置選項,以更好地匹配您的使用。
-
處理器
+關注
關注
68文章
19409瀏覽量
231207 -
操作系統
+關注
關注
37文章
6896瀏覽量
123758 -
編譯器
+關注
關注
1文章
1642瀏覽量
49291 -
Memcached
+關注
關注
0文章
13瀏覽量
7040 -
Ampere
+關注
關注
1文章
70瀏覽量
4566
原文標題:安博士講堂|針對 Ampere??Altra? 系列處理器的 Memcached 優化指南
文章出處:【微信號:AmpereComputing,微信公眾號:安晟培半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Ampere推出業內首款擁有最多內核數量的云原生處理器系列
業界首款!Ampere發布有80個核心的ARM處理器
Ampere發布業內首款80核ARM架構64位處理器Altra 并已開始向云服務和邊緣計算客戶出樣
Ampere全新推出業界首款80核服務器處理器Ampere Altra?處理器
安晟培半導體Ampere Altra處理器推出,應用于云和邊緣計算數據中心中
詳細解說Ampere Altra性能測試與結果對比
![詳細解說<b class='flag-5'>Ampere</b> <b class='flag-5'>Altra</b>性能測試與結果對比](https://file.elecfans.com/web1/M00/E6/8C/o4YBAGBa6LCAWhAJAAAhjF9d7Fk895.png)
HPE正式發布搭載Ampere云原生處理器的HPE ProLiant RL300 Gen11平臺
Ampere Computing發布全新AmpereOne系列處理器,192個自研核
Ampere全新AmpereOne系列處理器,多達192個單線程Ampere核
Ampere發布AmpereOne系列處理器,單顆處理器支持最高192個物理核心
![<b class='flag-5'>Ampere</b>發布AmpereOne<b class='flag-5'>系列</b><b class='flag-5'>處理器</b>,單顆<b class='flag-5'>處理器</b>支持最高192個物理核心](https://file1.elecfans.com/web2/M00/89/1C/wKgaomR5V7GAS-HyAAAznVHqZqw359.png)
Ampere Altra系列處理器的鎖和內存序
![<b class='flag-5'>Ampere</b> <b class='flag-5'>Altra</b><b class='flag-5'>系列</b><b class='flag-5'>處理器</b>的鎖和內存序](https://file1.elecfans.com/web2/M00/89/51/wKgZomSAT9uADoEfAAAVN4ilJ5M046.png)
全新AmpereOne系列處理器,一款192核的云原生CPU
![全新AmpereOne<b class='flag-5'>系列</b><b class='flag-5'>處理器</b>,一款192核的云原生CPU](https://file1.elecfans.com/web2/M00/89/58/wKgZomSBUGqAKGVvAAANMEngafc039.jpg)
評論