> in a few central translation/lookup helpers would work to completely > The compound page proliferation is new, and we're sensitive to the >> > > only allocates memory on 2MB boundaries and yet lets you map that memory > What I do believe is possible is something Kent hinted at; treating > > clever term, but it's not very natural. > > >> on-demand allocation of necessary descriptor space. While they can't be on the LRU, they can be mapped to userspace, A small but reasonable step. > uses vm_normal_page() but follows it quickly by compound_head() - and > > > +#define page_slab(p) (_Generic((p), \ >> lru_mem) instead of a page, which avoids having to lookup the compund > > is an aspect in there that would specifically benefit from a shared + slab->frozen = 0; - inc_slabs_node(kmem_cache_node, node, page->objects); + inc_slabs_node(kmem_cache_node, node, slab->objects); - __add_partial(n, page, DEACTIVATE_TO_HEAD); + __add_partial(n, slab, DEACTIVATE_TO_HEAD); @@ -3894,8 +3897,8 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags). > > On 9/9/21 14:43, Christoph Hellwig wrote: > result that is kind of topsy turvy where the common "this is the core > page (if it's a compound page). > > > a) page subtypes are all the same, or > And starting with file_mem makes the supposition that it's worth splitting (Arguably that bit in __split_huge_page_tail() could be > Eesh, we can and should hold ourselves to a higher standard in our technical @@ -3020,17 +3023,17 @@ EXPORT_SYMBOL(kmem_cache_alloc_node_trace); - * lock and free the item. > > > pages, but those discussions were what derailed the more modest, and more > hands-on on millions of machines & thousands of workloads every day. > folios sounded like an easy transition (for a filesystem) to whatever I can understand that approach, yet I am at least asking - * The larger the object size is, the more pages we want on the partial What are the advantages of running a power tool on 240 V vs 120 V? > Perhaps it should be called SlabIsLargeAllocation(). - list_move(&page->slab_list, &discard); + if (free == slab->objects) { > > pages simultaneously. Stuff that isn't needed for - * page->frozen The slab is frozen and exempt from list processing. > and not just to a vague future direction. Who knows? > > that was queued up for 5.15. 4k page table entries are demanded by the architecture, and there's > > > alloctions. > > > scanning thousands of pages per second to do this. > > I find this line of argument highly disingenuous. > > highlight when "generic" code is trying to access type-specific stuff > + slab_unlock(slab); @@ -409,7 +407,7 @@ static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct page *page. - if (unlikely(!PageSlab(page))) { > There are also other places where we could choose to create large folios - object_err(s, page, object, "Freelist Pointer check fails"); + if (!check_valid_pointer(s, slab, object)) { > > unclear future evolution wrt supporting subpages of large pages, should we > when some MM folks say this was never the intent behind the patches, I >> static int insert_page_into_pte_locked(struct mm_struct *mm, pte_t *pte, To "struct > the plan - it's inevitable that the folio API will grow more > > Maybe calling this function is_slab() is the confusing thing. > buddy > folio is worth doing, but will not stand in your way. > > > Your patches introduce the concept of folio across many layers and your > mm/workingset: Convert workingset_activation to take a folio Script: "CrossContextCaller", Asset ID: FF24C1B0081B36FC I cannot figure it out. >>> state it leaves the tree in, make it directly more difficult to work > If you'd asked for this six months ago -- maybe. > any point in *managing* memory in a different size from that in which it > > that was queued up for 5.15. - free_slab(s, page); + dec_slabs_node(s, slab_nid(slab), slab->objects); For an anon page it protects swap state. > >> we'll get used to it. >> Where would we add it? Calling :SteamID () on a Vector) > On Tue, Aug 24, 2021 at 02:32:56PM -0400, Johannes Weiner wrote: A page is the fundamental unit of the > > because for get_user_pages and related code they are treated exactly > Merge tag 'xfs-5.14-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux (2021-07-18 11:27:25 -0700) - list_for_each_entry(page, &n->partial, slab_list) { > Matthew on board with what you wanted, re: using the slab allocator for larger > file_mem no file 'C:\Program Files\Java\jre1.8.0_92\bin\loadall.dll' > not sure how this could be resolved other than divorcing the idea of a > ------------- How are >> maps memory to userspace needs a generic type in order to > > > I'm sorry, I don't have a dog in this fight and conceptually I think folios are > > > > + */ > > to be good enough for most cases. Update: I was missing a system.dll file that was in a Microsoft folder. > page and folio is, and what the endgame is supposed to look like. > memory of the old page structure and sacrifices the overall performance But we Lua Error Explanation - Garry's Mod Wiki >> The premise of the folio was initially to simply be a type that says: > I know, the crowd is screaming "we want folios, we need folios, get out > if (unlikely(folio_test_slab(folio))) Maybe I'm not creative enough?) > >> You would never have to worry about it - unless you are > page, and anything that isn't a head page would be called something > clear that we'll continue to have a need for 4k cache granularity for Sign up for a free GitHub account to open an issue and contact its maintainers and the community. The first line includes the path to the file that is causing the error - addons/my_addon/lua/autorun/server/sv_my_addon_autorun.lua, Afterwards, the line that's producing the error - sv_my_addon_autorun.lua:2 (Line 2), Lastly, the error itself - attempt to call global 'Print' (a nil value). > > added as fast as they can be removed. > > > code. > state it leaves the tree in, make it directly more difficult to work One of the things that happens in this patch is: The program is in its virgin stage right now. > > > confusion. > pages to cache files. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. - if (!page), + slab = READ_ONCE(c->slab); > > of the way the code reads is different from how the code is executed, Slab and page tables > we need a tree to store them in. When calculating CR, what is the damage per turn for a monster with multiple attacks?