mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
Linux kernel source tree
We currently have several holes in the structure:
struct btrfs_block_group {
struct btrfs_fs_info * fs_info; /* 0 8 */
struct btrfs_inode * inode; /* 8 8 */
spinlock_t lock __attribute__((__aligned__(4))); /* 16 4 */
/* XXX 4 bytes hole, try to pack */
u64 start; /* 24 8 */
u64 length; /* 32 8 */
u64 pinned; /* 40 8 */
u64 reserved; /* 48 8 */
u64 used; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
u64 delalloc_bytes; /* 64 8 */
u64 bytes_super; /* 72 8 */
u64 flags; /* 80 8 */
u64 cache_generation; /* 88 8 */
u64 global_root_id; /* 96 8 */
u64 remap_bytes; /* 104 8 */
u32 identity_remap_count; /* 112 4 */
/* XXX 4 bytes hole, try to pack */
u64 last_used; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
u64 last_remap_bytes; /* 128 8 */
u32 last_identity_remap_count; /* 136 4 */
/* XXX 4 bytes hole, try to pack */
u64 last_flags; /* 144 8 */
u32 bitmap_high_thresh; /* 152 4 */
u32 bitmap_low_thresh; /* 156 4 */
struct rw_semaphore data_rwsem __attribute__((__aligned__(8))); /* 160 40 */
/* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */
long unsigned int full_stripe_len; /* 200 8 */
long unsigned int runtime_flags; /* 208 8 */
unsigned int ro; /* 216 4 */
int disk_cache_state; /* 220 4 */
int cached; /* 224 4 */
/* XXX 4 bytes hole, try to pack */
struct btrfs_caching_control * caching_ctl; /* 232 8 */
struct btrfs_space_info * space_info; /* 240 8 */
struct btrfs_free_space_ctl * free_space_ctl; /* 248 8 */
/* --- cacheline 4 boundary (256 bytes) --- */
struct rb_node cache_node __attribute__((__aligned__(8))); /* 256 24 */
struct list_head list; /* 280 16 */
refcount_t refs __attribute__((__aligned__(4))); /* 296 4 */
/* XXX 4 bytes hole, try to pack */
struct list_head cluster_list; /* 304 16 */
/* --- cacheline 5 boundary (320 bytes) --- */
struct list_head bg_list; /* 320 16 */
struct list_head ro_list; /* 336 16 */
atomic_t frozen __attribute__((__aligned__(4))); /* 352 4 */
/* XXX 4 bytes hole, try to pack */
struct list_head discard_list; /* 360 16 */
int discard_index; /* 376 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 6 boundary (384 bytes) --- */
u64 discard_eligible_time; /* 384 8 */
u64 discard_cursor; /* 392 8 */
enum btrfs_discard_state discard_state; /* 400 4 */
/* XXX 4 bytes hole, try to pack */
struct list_head dirty_list; /* 408 16 */
struct list_head io_list; /* 424 16 */
struct btrfs_io_ctl io_ctl; /* 440 72 */
/* --- cacheline 8 boundary (512 bytes) --- */
atomic_t reservations __attribute__((__aligned__(4))); /* 512 4 */
atomic_t nocow_writers __attribute__((__aligned__(4))); /* 516 4 */
struct mutex free_space_lock __attribute__((__aligned__(8))); /* 520 32 */
bool using_free_space_bitmaps; /* 552 1 */
bool using_free_space_bitmaps_cached; /* 553 1 */
/* XXX 2 bytes hole, try to pack */
int swap_extents; /* 556 4 */
u64 alloc_offset; /* 560 8 */
u64 zone_unusable; /* 568 8 */
/* --- cacheline 9 boundary (576 bytes) --- */
u64 zone_capacity; /* 576 8 */
u64 meta_write_pointer; /* 584 8 */
struct btrfs_chunk_map * physical_map; /* 592 8 */
struct list_head active_bg_list; /* 600 16 */
struct work_struct zone_finish_work; /* 616 32 */
/* --- cacheline 10 boundary (640 bytes) was 8 bytes ago --- */
struct extent_buffer * last_eb; /* 648 8 */
enum btrfs_block_group_size_class size_class; /* 656 4 */
/* XXX 4 bytes hole, try to pack */
u64 reclaim_mark; /* 664 8 */
/* size: 672, cachelines: 11, members: 61 */
/* sum members: 634, holes: 10, sum holes: 38 */
/* forced alignments: 8 */
/* last cacheline: 32 bytes */
} __attribute__((__aligned__(8)));
Reorder some fields to eliminate the holes while keeping closely related
or frequently accessed fields together. After the reordering the size of
the structure is reduced down to 632 bytes and the number of cache lines
decreases from 11 to 10. We can still only pack 6 block groups per 4K page
but on a 64K page system we will now be able to pack 103 block groups
instead of 97. The new structure layout, on a release kernel, is the
following:
struct btrfs_block_group {
struct btrfs_fs_info * fs_info; /* 0 8 */
struct btrfs_inode * inode; /* 8 8 */
spinlock_t lock __attribute__((__aligned__(4))); /* 16 4 */
unsigned int ro; /* 20 4 */
u64 start; /* 24 8 */
u64 length; /* 32 8 */
u64 pinned; /* 40 8 */
u64 reserved; /* 48 8 */
u64 used; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
u64 delalloc_bytes; /* 64 8 */
u64 bytes_super; /* 72 8 */
u64 flags; /* 80 8 */
u64 cache_generation; /* 88 8 */
u64 global_root_id; /* 96 8 */
u64 remap_bytes; /* 104 8 */
u32 identity_remap_count; /* 112 4 */
u32 last_identity_remap_count; /* 116 4 */
u64 last_used; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
u64 last_remap_bytes; /* 128 8 */
u64 last_flags; /* 136 8 */
u32 bitmap_high_thresh; /* 144 4 */
u32 bitmap_low_thresh; /* 148 4 */
struct rw_semaphore data_rwsem __attribute__((__aligned__(8))); /* 152 40 */
/* --- cacheline 3 boundary (192 bytes) --- */
long unsigned int full_stripe_len; /* 192 8 */
long unsigned int runtime_flags; /* 200 8 */
int disk_cache_state; /* 208 4 */
int cached; /* 212 4 */
struct btrfs_caching_control * caching_ctl; /* 216 8 */
struct btrfs_space_info * space_info; /* 224 8 */
struct btrfs_free_space_ctl * free_space_ctl; /* 232 8 */
struct rb_node cache_node __attribute__((__aligned__(8))); /* 240 24 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
struct list_head list; /* 264 16 */
refcount_t refs __attribute__((__aligned__(4))); /* 280 4 */
atomic_t frozen __attribute__((__aligned__(4))); /* 284 4 */
struct list_head cluster_list; /* 288 16 */
struct list_head bg_list; /* 304 16 */
/* --- cacheline 5 boundary (320 bytes) --- */
struct list_head ro_list; /* 320 16 */
struct list_head discard_list; /* 336 16 */
int discard_index; /* 352 4 */
enum btrfs_discard_state discard_state; /* 356 4 */
u64 discard_eligible_time; /* 360 8 */
u64 discard_cursor; /* 368 8 */
struct list_head dirty_list; /* 376 16 */
/* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
struct list_head io_list; /* 392 16 */
struct btrfs_io_ctl io_ctl; /* 408 72 */
/* --- cacheline 7 boundary (448 bytes) was 32 bytes ago --- */
atomic_t reservations __attribute__((__aligned__(4))); /* 480 4 */
atomic_t nocow_writers __attribute__((__aligned__(4))); /* 484 4 */
struct mutex free_space_lock __attribute__((__aligned__(8))); /* 488 32 */
/* --- cacheline 8 boundary (512 bytes) was 8 bytes ago --- */
bool using_free_space_bitmaps; /* 520 1 */
bool using_free_space_bitmaps_cached; /* 521 1 */
/* XXX 2 bytes hole, try to pack */
/* Bitfield combined with previous fields */
static enum btrfs_block_group_size_class size_class; /* 0: 0 0 */
int swap_extents; /* 524 4 */
u64 alloc_offset; /* 528 8 */
u64 zone_unusable; /* 536 8 */
u64 zone_capacity; /* 544 8 */
u64 meta_write_pointer; /* 552 8 */
struct btrfs_chunk_map * physical_map; /* 560 8 */
struct list_head active_bg_list; /* 568 16 */
/* --- cacheline 9 boundary (576 bytes) was 8 bytes ago --- */
struct work_struct zone_finish_work; /* 584 32 */
struct extent_buffer * last_eb; /* 616 8 */
u64 reclaim_mark; /* 624 8 */
/* size: 632, cachelines: 10, members: 60, static members: 1 */
/* sum members: 630, holes: 1, sum holes: 2 */
/* sum bitfield members: 8 bits (1 bytes) */
/* forced alignments: 8 */
/* last cacheline: 56 bytes */
} __attribute__((__aligned__(8)));
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
|
||
|---|---|---|
| arch | ||
| block | ||
| certs | ||
| crypto | ||
| Documentation | ||
| drivers | ||
| fs | ||
| include | ||
| init | ||
| io_uring | ||
| ipc | ||
| kernel | ||
| lib | ||
| LICENSES | ||
| mm | ||
| net | ||
| rust | ||
| samples | ||
| scripts | ||
| security | ||
| sound | ||
| tools | ||
| usr | ||
| virt | ||
| .clang-format | ||
| .clippy.toml | ||
| .cocciconfig | ||
| .editorconfig | ||
| .get_maintainer.ignore | ||
| .gitattributes | ||
| .gitignore | ||
| .mailmap | ||
| .pylintrc | ||
| .rustfmt.toml | ||
| COPYING | ||
| CREDITS | ||
| Kbuild | ||
| Kconfig | ||
| MAINTAINERS | ||
| Makefile | ||
| README | ||
Linux kernel ============ The Linux kernel is the core of any Linux operating system. It manages hardware, system resources, and provides the fundamental services for all other software. Quick Start ----------- * Report a bug: See Documentation/admin-guide/reporting-issues.rst * Get the latest kernel: https://kernel.org * Build the kernel: See Documentation/admin-guide/quickly-build-trimmed-linux.rst * Join the community: https://lore.kernel.org/ Essential Documentation ----------------------- All users should be familiar with: * Building requirements: Documentation/process/changes.rst * Code of Conduct: Documentation/process/code-of-conduct.rst * License: See COPYING Documentation can be built with make htmldocs or viewed online at: https://www.kernel.org/doc/html/latest/ Who Are You? ============ Find your role below: * New Kernel Developer - Getting started with kernel development * Academic Researcher - Studying kernel internals and architecture * Security Expert - Hardening and vulnerability analysis * Backport/Maintenance Engineer - Maintaining stable kernels * System Administrator - Configuring and troubleshooting * Maintainer - Leading subsystems and reviewing patches * Hardware Vendor - Writing drivers for new hardware * Distribution Maintainer - Packaging kernels for distros * AI Coding Assistant - LLMs and AI-powered development tools For Specific Users ================== New Kernel Developer -------------------- Welcome! Start your kernel development journey here: * Getting Started: Documentation/process/development-process.rst * Your First Patch: Documentation/process/submitting-patches.rst * Coding Style: Documentation/process/coding-style.rst * Build System: Documentation/kbuild/index.rst * Development Tools: Documentation/dev-tools/index.rst * Kernel Hacking Guide: Documentation/kernel-hacking/hacking.rst * Core APIs: Documentation/core-api/index.rst Academic Researcher ------------------- Explore the kernel's architecture and internals: * Researcher Guidelines: Documentation/process/researcher-guidelines.rst * Memory Management: Documentation/mm/index.rst * Scheduler: Documentation/scheduler/index.rst * Networking Stack: Documentation/networking/index.rst * Filesystems: Documentation/filesystems/index.rst * RCU (Read-Copy Update): Documentation/RCU/index.rst * Locking Primitives: Documentation/locking/index.rst * Power Management: Documentation/power/index.rst Security Expert --------------- Security documentation and hardening guides: * Security Documentation: Documentation/security/index.rst * LSM Development: Documentation/security/lsm-development.rst * Self Protection: Documentation/security/self-protection.rst * Reporting Vulnerabilities: Documentation/process/security-bugs.rst * CVE Procedures: Documentation/process/cve.rst * Embargoed Hardware Issues: Documentation/process/embargoed-hardware-issues.rst * Security Features: Documentation/userspace-api/seccomp_filter.rst Backport/Maintenance Engineer ----------------------------- Maintain and stabilize kernel versions: * Stable Kernel Rules: Documentation/process/stable-kernel-rules.rst * Backporting Guide: Documentation/process/backporting.rst * Applying Patches: Documentation/process/applying-patches.rst * Subsystem Profile: Documentation/maintainer/maintainer-entry-profile.rst * Git for Maintainers: Documentation/maintainer/configure-git.rst System Administrator -------------------- Configure, tune, and troubleshoot Linux systems: * Admin Guide: Documentation/admin-guide/index.rst * Kernel Parameters: Documentation/admin-guide/kernel-parameters.rst * Sysctl Tuning: Documentation/admin-guide/sysctl/index.rst * Tracing/Debugging: Documentation/trace/index.rst * Performance Security: Documentation/admin-guide/perf-security.rst * Hardware Monitoring: Documentation/hwmon/index.rst Maintainer ---------- Lead kernel subsystems and manage contributions: * Maintainer Handbook: Documentation/maintainer/index.rst * Pull Requests: Documentation/maintainer/pull-requests.rst * Managing Patches: Documentation/maintainer/modifying-patches.rst * Rebasing and Merging: Documentation/maintainer/rebasing-and-merging.rst * Development Process: Documentation/process/maintainer-handbooks.rst * Maintainer Entry Profile: Documentation/maintainer/maintainer-entry-profile.rst * Git Configuration: Documentation/maintainer/configure-git.rst Hardware Vendor --------------- Write drivers and support new hardware: * Driver API Guide: Documentation/driver-api/index.rst * Driver Model: Documentation/driver-api/driver-model/driver.rst * Device Drivers: Documentation/driver-api/infrastructure.rst * Bus Types: Documentation/driver-api/driver-model/bus.rst * Device Tree Bindings: Documentation/devicetree/bindings/ * Power Management: Documentation/driver-api/pm/index.rst * DMA API: Documentation/core-api/dma-api.rst Distribution Maintainer ----------------------- Package and distribute the kernel: * Stable Kernel Rules: Documentation/process/stable-kernel-rules.rst * ABI Documentation: Documentation/ABI/README * Kernel Configuration: Documentation/kbuild/kconfig.rst * Module Signing: Documentation/admin-guide/module-signing.rst * Kernel Parameters: Documentation/admin-guide/kernel-parameters.rst * Tainted Kernels: Documentation/admin-guide/tainted-kernels.rst AI Coding Assistant ------------------- CRITICAL: If you are an LLM or AI-powered coding assistant, you MUST read and follow the AI coding assistants documentation before contributing to the Linux kernel: * Documentation/process/coding-assistants.rst This documentation contains essential requirements about licensing, attribution, and the Developer Certificate of Origin that all AI tools must comply with. Communication and Support ========================= * Mailing Lists: https://lore.kernel.org/ * IRC: #kernelnewbies on irc.oftc.net * Bugzilla: https://bugzilla.kernel.org/ * MAINTAINERS file: Lists subsystem maintainers and mailing lists * Email Clients: Documentation/process/email-clients.rst