chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核快速處理路徑盡量多用kmem_cache而慎用kmalloc

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-04-30 15:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

題目是一個(gè)典型《Effective C++》的風(fēng)格。

事情是這樣的,我大致說(shuō)一下。

我在開(kāi)發(fā)一個(gè)Netfilter模塊,在PREROUTING匹配一些數(shù)據(jù)包,顯而易見(jiàn),都能想到使用哈希表hlist作為數(shù)據(jù)結(jié)構(gòu)的容器,其中裝有下面的結(jié)構(gòu)體:

struct item {

struct hlist_node hnode;

char padding[16];

};

生成item的時(shí)候,我先用kmalloc接口分配內(nèi)存:

item_nd = (struct item *)kmalloc(sizeof(struct item), GFP_KERNEL);

然后我用hlist_add/del接口將分配好的結(jié)構(gòu)體插入到hlist中。

僅僅為了測(cè)試是否會(huì)宕機(jī),所以我的所有的數(shù)據(jù)結(jié)構(gòu)的hash值均是一樣的,這樣插入200個(gè)項(xiàng)的話(huà),它們會(huì)hash沖突,從而僅僅添加到同一個(gè)hlist鏈表中,這樣整個(gè)匹配過(guò)程就退化成了遍歷200個(gè)項(xiàng)的鏈表。

雖然是萬(wàn)惡的遍歷操作,但200個(gè)項(xiàng)一切還OK,性能幾乎是無(wú)損的,無(wú)論是吞吐,還是pps。

這個(gè)時(shí)候,我想擴(kuò)充一些功能,于是乎為item結(jié)構(gòu)體增加了一個(gè)字段:

struct item {

struct hlist_node hnode;

char padding[16];

void *private;

};

僅僅增加了一個(gè)private,其它均和之前完全一致,同樣的200個(gè)項(xiàng)插入同一條hlist,同樣遍歷,吞吐和pps下降達(dá)到15%~20%!

為什么增加了一個(gè)指針變量,就出現(xiàn)了如此巨大的性能差異?!

事情的端倪就隱藏在kmalloc接口中!

事情的真相是,在不添加private指針時(shí),item結(jié)構(gòu)的大小是32,添加一個(gè)指針,其大小變成了40,別小看這8個(gè)字節(jié):

32字節(jié)大小的所有200個(gè)item在內(nèi)存中幾乎都是連續(xù)的。

40字節(jié)大小的所有200個(gè)item在內(nèi)存中幾乎都是不連續(xù)的。

為什么會(huì)造成這個(gè)結(jié)果?32和40有什么特殊性嗎?

我們還要繼續(xù)向下看。

kmalloc的背后其實(shí)是一系列的kmem_cache:

8字節(jié)的kmem_cache

16字節(jié)的kmem_cache

32字節(jié)的kmem_cache

64字節(jié)的kmem_cache

92字節(jié)的kmem_cache

128字節(jié)的kmem_cache

...

我們從/proc/slabinfo里可以一窺究竟:

[root@localhost test]# cat /proc/slabinfo |grep ^kmalloc

kmalloc-8192 52 52 8192 4 8 : tunables 0 0 0 : slabdata 13 13 0

kmalloc-4096 274 288 4096 8 8 : tunables 0 0 0 : slabdata 36 36 0

kmalloc-2048 578 608 2048 16 8 : tunables 0 0 0 : slabdata 38 38 0

kmalloc-1024 1105 1120 1024 16 4 : tunables 0 0 0 : slabdata 70 70 0

kmalloc-512 1466 1584 512 16 2 : tunables 0 0 0 : slabdata 99 99 0

kmalloc-256 2289 2560 256 16 1 : tunables 0 0 0 : slabdata 160 160 0

kmalloc-192 1630 1785 192 21 1 : tunables 0 0 0 : slabdata 85 85 0

kmalloc-128 1632 1632 128 32 1 : tunables 0 0 0 : slabdata 51 51 0

kmalloc-96 1344 1344 96 42 1 : tunables 0 0 0 : slabdata 32 32 0

kmalloc-64 25408 25408 64 64 1 : tunables 0 0 0 : slabdata 397 397 0

kmalloc-32 3072 3072 32 128 1 : tunables 0 0 0 : slabdata 24 24 0

kmalloc-16 3072 3072 16 256 1 : tunables 0 0 0 : slabdata 12 12 0

kmalloc-8 5120 5120 8 512 1 : tunables 0 0 0 : slabdata 10 10 0

當(dāng)你調(diào)用kmalloc(size, flags)申請(qǐng)內(nèi)存時(shí),系統(tǒng)會(huì)根據(jù)你的size向上尋找一個(gè)最接近的kmem_cache,然后在其中為你分配所需的內(nèi)存。

我們知道kmemcache是針對(duì)特定數(shù)據(jù)結(jié)構(gòu)的獨(dú)享內(nèi)存池子,它以*最小化碎片*的原則為特定的場(chǎng)合提供*可高效訪(fǎng)問(wèn)*的內(nèi)存,比如sock,skbuff這些。

然而kmalloc接口所依托的kmem_cache則是全局(同一個(gè)NUMA node)共享的內(nèi)存池子,它并不針對(duì)特定場(chǎng)合,僅僅針對(duì)特定大??!也即是說(shuō),最小化碎片是針對(duì)所有調(diào)用kmalloc接口的線(xiàn)程的。

我們回頭看上面的slabinfo,可以注意到,64字節(jié)大小的kmem_cache,即kmalloc-64已經(jīng)包含了非常多的object,因此如果你調(diào)用kmalloc申請(qǐng)40字節(jié)的內(nèi)存,其實(shí)你是在kmalloc-64里分配。

其實(shí)32和40沒(méi)有什么特殊性,32字節(jié)大小的item之所以還可以保持連續(xù),那是因?yàn)閗malloc-32幾乎沒(méi)有被重度使用,而kmalloc-64則已經(jīng)被其它使用者打散。

我們可以試一下,看看分別申請(qǐng)32字節(jié)和40字節(jié)的效果:

#include

struct stub32 {

unsigned char m[32];

};

struct stub40 {

unsigned char m[40];

};

#define SIZE 20

struct stub32 *array32[SIZE] = {NULL};

struct stub40 *array40[SIZE] = {NULL};

%}

function alloc_test()

%{

int i;

for (i = 0; i < SIZE; i ++) {

array32[i] = kmalloc(sizeof(struct stub32), GFP_KERNEL);

printk("32bytes [%d]:%p ", i, array32[i]);

if (i > 0) {

unsigned long hi = (unsigned long)array32[i];

unsigned long lo = (unsigned long)array32[i - 1];

signed long delta = hi - lo;

if (delta < 0)

delta = lo - hi;

printk("delta [%lx] ", delta);

} else

printk("delta [0] ");

}

printk("------------------ ");

for (i = 0; i < SIZE; i ++) {

array40[i] = kmalloc(sizeof(struct stub40), GFP_KERNEL);

printk("40bytes [%d]:%p ", i, array40[i]);

if (i > 0) {

unsigned long hi = (unsigned long)array40[i];

unsigned long lo = (unsigned long)array40[i - 1];

signed long delta = hi - lo;

if (delta < 0)

delta = lo - hi;

printk("delta [%lx] ", delta);

} else

printk("delta [0] ");

}

for (i = 0; i < SIZE; i ++) {

kfree(array32[i]);

kfree(array40[i]);

}

%}

probe begin

{

alloc_test();

exit(); // oneshot模式

}

以下是結(jié)果:

[ 466.933100] 32bytes [1]:ffff881f9649caa0 delta [20]

[ 466.938206] 32bytes [2]:ffff881f9649cac0 delta [20]

[ 466.943314] 32bytes [3]:ffff881f9649cae0 delta [20]

[ 466.948586] 32bytes [4]:ffff881f9649cb00 delta [20]

[ 466.953732] 32bytes [5]:ffff881f9649cb20 delta [20]

[ 466.958863] 32bytes [6]:ffff881f9649cb40 delta [20]

[ 466.963977] 32bytes [7]:ffff881f9649cb60 delta [20]

[ 466.969095] 32bytes [8]:ffff881f9649cb80 delta [20]

[ 466.974222] 32bytes [9]:ffff881f9649cba0 delta [20]

[ 466.979329] 32bytes [10]:ffff881f9649cbc0 delta [20]

[ 466.984731] 32bytes [11]:ffff881f9649cbe0 delta [20]

[ 466.990124] 32bytes [12]:ffff881f9649cc00 delta [20]

[ 466.995510] 32bytes [13]:ffff881f9649cc20 delta [20]

[ 467.000907] 32bytes [14]:ffff881f9649cc40 delta [20]

[ 467.006294] 32bytes [15]:ffff881f9649cc60 delta [20]

[ 467.011685] 32bytes [16]:ffff881f9649cc80 delta [20]

[ 467.017086] 32bytes [17]:ffff881f9649cca0 delta [20]

[ 467.022483] 32bytes [18]:ffff881f9649ccc0 delta [20]

[ 467.027881] 32bytes [19]:ffff881f9649cce0 delta [20]

[ 467.033286] ------------------

[ 467.036610] 40bytes [0]:ffff881d0c904d40 delta [0]

[ 467.041828] 40bytes [1]:ffff881d0c904680 delta [6c0]

[ 467.047216] 40bytes [2]:ffff881d0c904140 delta [540]

[ 467.052607] 40bytes [3]:ffff881d0c904d00 delta [bc0]

[ 467.058001] 40bytes [4]:ffff881d0c9043c0 delta [940]

[ 467.063399] 40bytes [5]:ffff881d0c904940 delta [580]

[ 467.068801] 40bytes [6]:ffff881d0c9048c0 delta [80]

[ 467.074107] 40bytes [7]:ffff881d0c904e80 delta [5c0]

[ 467.079496] 40bytes [8]:ffff881d0c904200 delta [c80]

[ 467.084888] 40bytes [9]:ffff881d0c904980 delta [780]

[ 467.090282] 40bytes [10]:ffff881fcd725dc0 delta [2c0e21440]

[ 467.096280] 40bytes [11]:ffff881fcd7250c0 delta [d00]

[ 467.101763] 40bytes [12]:ffff881fcd725440 delta [380]

[ 467.107235] 40bytes [13]:ffff881fcd725340 delta [100]

[ 467.112722] 40bytes [14]:ffff881f8398ee80 delta [49d964c0]

[ 467.118633] 40bytes [15]:ffff881f8398ecc0 delta [1c0]

[ 467.124110] 40bytes [16]:ffff881f8398e100 delta [bc0]

[ 467.129589] 40bytes [17]:ffff881f8398ed40 delta [c40]

[ 467.135062] 40bytes [18]:ffff881f8398efc0 delta [280]

[ 467.140542] 40bytes [19]:ffff881f8398e700 delta [8c0]

我們可以看到,32字節(jié)的結(jié)構(gòu)體,kmalloc分配的完全都是連續(xù)的,而40字節(jié)的結(jié)構(gòu)體,完全就散亂碎片化了。

如果以上的這些地址是需要在網(wǎng)絡(luò)協(xié)議棧的Netfilter hook中被遍歷的,可想而知,如果地址非連續(xù)且布局無(wú)跡可尋,cache miss將會(huì)非常高。

值得一提的是,并不是說(shuō)32字節(jié)的結(jié)構(gòu)體分配就一定會(huì)獲得連續(xù)的內(nèi)存,而64字節(jié)的就不會(huì),這完全取決于你的系統(tǒng)當(dāng)前的整體kmalloc使用情況。

kmalloc并不適合快速路徑的內(nèi)存分配,它只適合穩(wěn)定的,離散的管理結(jié)構(gòu)體的內(nèi)存分配。

大家之所以普遍喜歡用kmalloc,因?yàn)樗?jiǎn)單,快捷,少了kmem_cache的create和destroy的維護(hù)操作。

kmalloc有個(gè)副作用,就是它只有固定的大小,比如你分配一個(gè)24字節(jié)大小的結(jié)構(gòu)體,事實(shí)上系統(tǒng)會(huì)給你32字節(jié)。具體的細(xì)節(jié)就參考kmalloc的kmem_cache數(shù)組吧。

在諸如網(wǎng)絡(luò)協(xié)議棧處理這種相對(duì)快速的路徑中,比如skbuff,sock,nfconntrack等結(jié)構(gòu)體均是在自行維護(hù)的獨(dú)享kmem_cache中被管理的,這保證了內(nèi)存分配的盡可能的連續(xù)性,盡可能的最少碎片。

這是通過(guò)kmem_cache的棧式管理實(shí)現(xiàn)的:

kmem_cache的obj可以隨意釋放。

kmem_cache的obj按照釋放的逆序進(jìn)行分配。

kmem_cache的free相當(dāng)于push操作,而alloc相當(dāng)于pop操作。

我再用例子給出直觀(guān)的效果,依然采用專(zhuān)家模式的stap:

// alloc_free.stp

%{

#include

struct stub {

unsigned char m[40];

};

%}

function kmemcache_stack_test()

%{

int i;

struct kmem_cache *memcache;

struct stub *array[10];

struct stub *new[10] = {NULL};

memcache = kmem_cache_create("test_", sizeof(struct stub), 0, 0, NULL);

if (!memcache)

return;

for (i = 0; i < 10; i ++) {

array[i] = kmem_cache_alloc(memcache, GFP_KERNEL);

STAP_PRINTF("[%d]:%llx ", i, array[i]);

}

STAP_PRINTF("Let's play ");

kmem_cache_free(memcache, array[4]);

STAP_PRINTF("free [4]:%llx ", array[4]);

array[4] = NULL;

new[0] = kmem_cache_alloc(memcache, GFP_KERNEL);

STAP_PRINTF("new [x]:%llx ", new[0]);

kmem_cache_free(memcache, array[1]);

STAP_PRINTF("free [1]:%llx ", array[1]);

array[1] = NULL;

kmem_cache_free(memcache, array[8]);

STAP_PRINTF("free [8]:%llx ", array[8]);

array[8] = NULL;

new[1] = kmem_cache_alloc(memcache, GFP_KERNEL);

STAP_PRINTF("new [x]:%llx ", new[1]);

new[2] = kmem_cache_alloc(memcache, GFP_KERNEL);

STAP_PRINTF("new [x]:%llx ", new[2]);

for (i = 0; i < 10; i++) {

if (new[i]) {

kmem_cache_free(memcache, new[i]);

new[i] = NULL;

}

}

STAP_PRINTF("Batch free ");

for (i = 0; i < 10; i++) {

if (array[i]) {

kmem_cache_free(memcache, array[i]);

STAP_PRINTF("free [i]:%llx ", array[i]);

array[i] = NULL;

}

}

STAP_PRINTF("Batch alloc ");

for (i = 0; i < 10; i++) {

new[i] = kmem_cache_alloc(memcache, GFP_KERNEL);

STAP_PRINTF("new [%d]:%llx ", i, new[i]);

}

for (i = 0; i < 10; i++) {

if (new[i]) {

kmem_cache_free(memcache, new[i]);

new[i] = NULL;

}

}

kmem_cache_destroy(memcache);

%}

probe begin

{

kmemcache_stack_test();

exit(); // oneshot模式

}

很簡(jiǎn)單的實(shí)驗(yàn),就是分配,釋放的操作,我們運(yùn)行一下:

[root@localhost test]# stap -g ./alloc_free.stp

[0]:ffff88003bc4bf28

[1]:ffff88003bc4bf00

[2]:ffff88003bc4beb0

[3]:ffff88003bc4be38

[4]:ffff88003bc4be88

[5]:ffff88003bc4be60

[6]:ffff88003bc4bdc0

[7]:ffff88003bc4be10

[8]:ffff88003bc4bde8

[9]:ffff88003bc4bd48

Let's play

free [4]:ffff88003bc4be88

new [x]:ffff88003bc4be88

free [1]:ffff88003bc4bf00

free [8]:ffff88003bc4bde8

new [x]:ffff88003bc4bde8

new [x]:ffff88003bc4bf00

Batch free

free [i]:ffff88003bc4bf28

free [i]:ffff88003bc4beb0

free [i]:ffff88003bc4be38

free [i]:ffff88003bc4be60

free [i]:ffff88003bc4bdc0

free [i]:ffff88003bc4be10

free [i]:ffff88003bc4bd48

Batch alloc

new [0]:ffff88003bc4bd48

new [1]:ffff88003bc4be10

new [2]:ffff88003bc4bdc0

new [3]:ffff88003bc4be60

new [4]:ffff88003bc4be38

new [5]:ffff88003bc4beb0

new [6]:ffff88003bc4bf28

new [7]:ffff88003bc4bf00

new [8]:ffff88003bc4bde8

new [9]:ffff88003bc4be88

[root@localhost test]#

從地址上可以看出,kmem_cache就是按照一個(gè)棧的形式進(jìn)行管理的,即便由于隨機(jī)的free操作造成了空洞,后續(xù)的alloc會(huì)盡快將其填充。這樣的結(jié)果如下:

盡可能節(jié)省內(nèi)存,保持內(nèi)存的緊湊。

提高CPU dcache的命中率,最大化preload效果。

即便我們使用自行維護(hù)的kmem_cache slab,當(dāng)從中分配的對(duì)象插入鏈表時(shí),也要盡量按照其內(nèi)存地址的升序插入鏈表確定的位置,這樣在遍歷鏈表時(shí)可以達(dá)到最大化預(yù)取的效果。實(shí)測(cè)過(guò)程這里從略。

一個(gè)事實(shí)是:

在連續(xù)的內(nèi)存上進(jìn)行遍歷,其性能遠(yuǎn)超在離散的內(nèi)存上進(jìn)行遍歷!

這是因?yàn)镃PU在訪(fǎng)問(wèn)內(nèi)存地址P時(shí),會(huì)把一個(gè)cacheline的數(shù)據(jù)預(yù)取到cache,在連續(xù)的內(nèi)存上,隨著遍歷的進(jìn)行,鏈表項(xiàng)的訪(fǎng)問(wèn)和預(yù)取將形成一個(gè)流水化作業(yè),這個(gè)流水線(xiàn)只要不被打斷,遍歷就好像在cache中進(jìn)行一樣。

我建議,根據(jù)slab對(duì)象的內(nèi)存使用hlistaddbefore[rcu],hlistaddbebind[rcu]將對(duì)象插入hlist的特定位置,而不是簡(jiǎn)單使用hlistaddhead。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11641

    瀏覽量

    218197
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    41421
  • malloc
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    348

原文標(biāo)題:Linux內(nèi)核快速處理路徑盡量多用kmem_cache而慎用kmalloc

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于 DR1M90 的 Linux-RT 內(nèi)核開(kāi)發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì) DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開(kāi)發(fā):含實(shí)時(shí)性測(cè)試(LinuxLinux-RT 對(duì)比、CPU 空載 / 滿(mǎn)負(fù)荷 / 隔離狀態(tài)測(cè)試)、
    的頭像 發(fā)表于 12-02 10:38 ?691次閱讀
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>內(nèi)核</b>開(kāi)發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    Linux內(nèi)核模塊的加載機(jī)制

    使用insmod或modprobe命令來(lái)加載模塊。insmod是直接加載,modprobe會(huì)處理依賴(lài)關(guān)系。 2、如何工作 那內(nèi)核模塊具體是怎么工作的呢?當(dāng)執(zhí)行insmod時(shí),會(huì)調(diào)用系統(tǒng)調(diào)用
    發(fā)表于 11-25 06:59

    Linux內(nèi)核printk日志級(jí)別全解析:從參數(shù)解讀到實(shí)操配置

    一、開(kāi)篇:一個(gè)命令引出的核心問(wèn)題 在?Linux?終端執(zhí)行?cat /proc/sys/kernel/printk,你可能會(huì)看到這樣的輸出: 這串?dāng)?shù)字不是隨機(jī)的,而是內(nèi)核日志系統(tǒng)的“核心配置開(kāi)關(guān)
    的頭像 發(fā)表于 11-20 15:54 ?1332次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>printk日志級(jí)別全解析:從參數(shù)解讀到實(shí)操配置

    重磅升級(jí)!迅為iTOP-Hi3403開(kāi)發(fā)板SDK全面升級(jí)至Linux?6.6內(nèi)核

    【重磅升級(jí)!迅為iTOP-Hi3403開(kāi)發(fā)板SDK全面升級(jí)至Linux?6.6內(nèi)核
    的頭像 發(fā)表于 11-18 13:34 ?794次閱讀
    重磅升級(jí)!迅為iTOP-Hi3403開(kāi)發(fā)板SDK全面升級(jí)至<b class='flag-5'>Linux</b>?6.6<b class='flag-5'>內(nèi)核</b>

    【書(shū)籍評(píng)測(cè)活動(dòng)NO.67】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》

    ,解析模塊的構(gòu)建邏輯,重點(diǎn)介紹樹(shù)外構(gòu)建與樹(shù)內(nèi)構(gòu)建,講解Linux內(nèi)核編程技巧。系統(tǒng)講解并發(fā)與同步、延遲與中斷處理等核心輔助函數(shù),包括自旋鎖與互斥鎖的區(qū)別及適用場(chǎng)景、等待隊(duì)列實(shí)現(xiàn)進(jìn)程休眠等待的機(jī)制。以字符
    發(fā)表于 11-17 17:52

    deepin亮相2025中國(guó)Linux內(nèi)核開(kāi)發(fā)者大會(huì)

    11 月 1 日,第二十屆中國(guó) Linux 內(nèi)核開(kāi)發(fā)者大會(huì)(CLK)在深圳舉辦。CLK 作為國(guó)內(nèi) Linux 內(nèi)核領(lǐng)域極具影響力的峰會(huì),由清華大學(xué)、Intel、華為、阿里云、富士通南大
    的頭像 發(fā)表于 11-05 17:59 ?655次閱讀

    Linux內(nèi)核參數(shù)調(diào)優(yōu)方案

    在高并發(fā)微服務(wù)環(huán)境中,網(wǎng)絡(luò)性能往往成為K8s集群的瓶頸。本文將深入探討如何通過(guò)精細(xì)化的Linux內(nèi)核參數(shù)調(diào)優(yōu),讓你的K8s節(jié)點(diǎn)網(wǎng)絡(luò)性能提升30%以上。
    的頭像 發(fā)表于 08-06 17:50 ?750次閱讀

    華為工程師總結(jié)Linux筆記

    Linux基礎(chǔ)知識(shí),非常全面 第 1 章 Linux 快速入門(mén) Linux 是一套免費(fèi)使用和自由傳播的類(lèi) UNIX 操作系統(tǒng),是一個(gè)基于 POSIX 移植操作系統(tǒng)接口(Porta
    發(fā)表于 07-14 15:28

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗(yàn)證這些參數(shù)是否生效同樣關(guān)鍵。
    的頭像 發(fā)表于 05-29 17:40 ?838次閱讀

    Linux內(nèi)核編譯失?。恳苿?dòng)硬盤(pán)和虛擬機(jī)的那些事兒

    Linux開(kāi)發(fā)中,編譯內(nèi)核是一項(xiàng)常見(jiàn)任務(wù),但不少開(kāi)發(fā)者在移動(dòng)硬盤(pán)或虛擬機(jī)環(huán)境下嘗試時(shí)會(huì)遭遇失敗。本文將簡(jiǎn)要探討這些問(wèn)題的成因,并介紹一些虛擬機(jī)使用技巧,幫助大家更好地應(yīng)對(duì)相關(guān)問(wèn)題。在移動(dòng)硬盤(pán)里編譯
    的頭像 發(fā)表于 04-11 11:36 ?773次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>編譯失敗?移動(dòng)硬盤(pán)和虛擬機(jī)的那些事兒

    樹(shù)莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測(cè)試

    引言本文是對(duì)我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對(duì)于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?678次閱讀
    樹(shù)莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測(cè)試

    集成多種Arm內(nèi)核的超高性能微處理器RZ/G2M數(shù)據(jù)手冊(cè)

    以及 4K 視頻編碼 /解碼功能。作為該產(chǎn)品的軟件平臺(tái),瑞薩電子提供了經(jīng)過(guò)驗(yàn)證的 Linux 軟件包,其中包含適用于該產(chǎn)品的 Linux 內(nèi)核、中間件驅(qū)動(dòng)程序以及基礎(chǔ)軟件。該經(jīng)過(guò)驗(yàn)證的 Lin
    的頭像 發(fā)表于 03-10 16:37 ?953次閱讀
    集成多種Arm<b class='flag-5'>內(nèi)核</b>的超高性能微<b class='flag-5'>處理</b>器RZ/G2M數(shù)據(jù)手冊(cè)

    基于OpenSBI的linux nommu實(shí)現(xiàn)

    Linux內(nèi)核6.10提供了對(duì)沒(méi)有mmu的riscv處理器工作在S模式下的內(nèi)核的支持,本文介紹基于OpenSBI的linuxnommu的實(shí)現(xiàn),供大家參考。1、OpenSBI介紹SBI
    的頭像 發(fā)表于 02-08 13:43 ?1099次閱讀
    基于OpenSBI的<b class='flag-5'>linux</b> nommu實(shí)現(xiàn)

    Linux服務(wù)器卡頓救星之一招釋放Cache內(nèi)存

    為了加速操作和減少磁盤(pán)I/O,內(nèi)核通常會(huì)盡可能多地緩存內(nèi)存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。根據(jù)設(shè)計(jì),包含緩存數(shù)據(jù)的頁(yè)面可以按需重新用于其他用途(例如,應(yīng)用程序)。 緩存內(nèi)存
    的頭像 發(fā)表于 01-16 10:04 ?2202次閱讀

    騰訊云內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug

    騰訊云操作系統(tǒng)(Tencent OS)內(nèi)核團(tuán)隊(duì)近日在Linux社區(qū)取得了顯著成果。他們提交的兩項(xiàng)改進(jìn)方案,成功解決了自2021年以來(lái)一直困擾眾多一線(xiàn)廠(chǎng)商,并在近期讓多個(gè)Linux頂級(jí)
    的頭像 發(fā)表于 12-31 10:58 ?941次閱讀