Bir Intel x86-64
ana kartına takılı 2 DIMM'in olduğunu varsayalım. Tüm bellek araları (banka ve kanal) devre dışıdır.DIMM'e Doğrudan Bellek Eşleme
Yapmaya çalıştığım şey, bu DIMM'lerden birinin fiziksel bellek alanını Linux kernel
(sürüm 4.11.11
) için ayırmak ve bir uygulama için bu fiziksel (ayrılmış) bellek alanını açığa çıkarmaktır. DIMM'ler, numaralı telefonun bellek kanallarına taşınmaması için olacaktır. Bunu yapmayı nasıl başarabilirim? Süreç ne olurdu? Çekirdek geliştirme konusunda yeniyim ve rehberlik yapabilirim.
Ben şimdiye kadar bulduk Ne:
Eğer
memmap=nn[KMG]$ss[KMG]
önyükleme parametresini belirtebilirsiniz Linux çekirdeğinden bellek rezerve etmek. Bu parametre, belirli hafızayı ss'den ss + nn'ye ayrılmış bir bellek bölgesi olarak işaretler.mmap dosya tanımlayıcı tarafından temsil bellek nesnesine len bayt için bir adres pa de Fildes bir sürecin adres alanı arasında bir eşleme kurmak için kullanılabilir de kapalı ofset len için bayt.
Bellek ayrıldıktan sonra, ayrılmış bellekleri kullanıcı alanı uygulamasına göstermek için bazı karakter aygıt sürücüsünün gerekli olduğunu mu varsayıyorum? Düşünceler?
Güncelleme
Ayrıca ayrılmış olması gerekir DIMM o kendi özel bellek kanalı ve hiçbir banka ya da kanal binişimi etkinleştirilecek olacağını belirtmek gerekir. Eşleştirme
DIMM parçasının resmin tamamına nasıl uyduğunu anlamıyorum. Neyse,/dev/mem' gibi bir şey yapmaz mı? Ayrılmış hafızanın böyle bir cihaz tarafından mı eşleştirileceğini bilmiyorum. –
@MargaretBloom DIMM hakkında net olmayan nedir? Çekirdek tarafından kullanılan DIMM'lerden birindeki tüm belleği ayırmaya çalışıyorum. Anlaşıldı mı? '/ dev/mem', çekirdeğin kullanabileceği tüm belleği temsil eder ve bu nedenle ihtiyaç duyduğum şeylerin mutlaka temsilcisi değildir. – Jonathan
Bayrak argümanında kullanılmayan bitler varsa, 'mmap' için yeni bir bayrakla, yani bir 'MAP_RESERVED_DIMM' tanımlayın. HugeTLBFS başka bir modeldir: yedekleme belleği hakkında özel bir şeyle eşleşmeleri almak için dosyaları eşleştirebileceğiniz özel bir dosya sistemi. Linux internals konusunda uzman değilim (sadece ilgilenen bir amatör), ama bir char veya blok cihaz fikriniz de işe yarayabilir. Özellikle, sadece bir kullanıcı-alanı sürecini tek seferde kullanmayı planlıyorsanız, aksi halde hangi bölümlerin zaten haritalandığını öğrenmelerine nasıl izin veriyorsunuz? –