For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Blog
DocsAPI Reference
DocsAPI Reference
    • AIStore
    • Documentation
  • Core Documentation
    • In-depth Overview
    • Terminology and core abstractions
    • Getting Started
    • Networking model
    • Buckets: design, operations, namespaces, and system buckets
    • Observability overview
    • CLI overview
    • Production deployment
    • Technical Blog
  • APIs, SDKs, and Compatibility
    • Go API
    • Python SDK
    • PyPI package
    • Python SDK reference guide
    • PyTorch integration
    • TensorFlow integration
    • HTTP API reference
    • curl examples
    • Easy URL
    • S3 compatibility
    • s3cmd quick start
    • Presigned S3 requests
    • Boto3 support
  • Command-Line Interface
    • CLI overview
    • ais help
    • CLI reference guide
    • Bucket operations
    • Cluster and remote-cluster management
    • Storage and mountpath management
    • Monitoring and ais show
    • Downloads
    • Jobs
    • Authentication and access control
    • Configuration via CLI
    • ETL CLI
    • Distributed shuffle CLI
    • ML / get-batch CLI
    • GCP credentials
    • TLS certificate management
  • Storage and Data Management
    • Storage services
    • Buckets: design, operations, namespaces, and system buckets
    • Native Bucket Inventory (NBI)
    • Backend providers
    • On-disk layout
    • Virtual directories
    • System files
    • Evicting remote buckets and cached data
  • Cluster Operations
    • Node lifecycle: maintenance, shutdown, decommission
    • Global rebalance
    • Resilver
    • AIS in Containerized Environments
    • Highly available control plane
    • Information Center (IC)
    • Out-of-band updates
    • Troubleshooting
  • Configuration and Security
    • Configuration
    • Environment variables
    • Feature flags
    • AuthN and access control
    • Authentication validation
    • HTTPS and certificates
    • Switching a cluster to HTTPS
  • ETL and Advanced Workflows
    • ETL overview
    • ETL CLI docs
    • ETL Python SDK examples
    • Custom transformers
    • ETL Python webserver SDK
    • ETL Go webserver package
    • Archives: read, write, and list
    • Distributed shuffle (dsort)
    • Initial sharding utility (ishard)
    • Downloader
    • Blob Downloader
    • Batch object retrieval (get-batch)
    • Batch operations
    • Tools and utilities
    • Extended actions (xactions)
  • Observability, Monitoring, and Performance
    • Observability overview
    • Monitoring with CLI
    • Logs
    • Prometheus integration
    • Metrics reference
    • Grafana dashboards
    • Kubernetes monitoring
    • Distributed tracing
    • Monitoring get-batch
    • AIS load generator (aisloader)
    • Benchmarking AIStore
    • Performance tuning and testing
    • Performance monitoring via CLI
    • Rate limiting
    • Checksumming
    • Filesystem Health Checker (FSHC)
    • Traffic patterns
  • Networking
    • Networking: multi-homing, network separation, IPv6
    • HTTPS configuration
    • Switching to HTTPS
    • Idle connections
    • MessagePack protocol
  • Deployment
    • AIStore on Kubernetes
    • Kubernetes Operator
    • Ansible playbooks
    • Helm charts
    • Deployment monitoring
    • Docker
  • Developer Resources
    • Development guide
    • aisnode command line
    • Build tags
  • Object and Bucket Naming
    • Unicode and special symbols in object and bucket names
    • Extremely long object names
  • Blog Posts
    • Arrival of native backed OCI Object Storage support
Blog
NVIDIANVIDIA
Developer-friendly docs for your API
Privacy Policy | Your Privacy Choices | Terms of Service | Accessibility | Corporate Policies | Product Security | Contact

Copyright © 2026, NVIDIA Corporation.

LogoLogoAIStore
On this page
  • Deploying OCI Backend Support
  • Sample Local Deployment
  • Accessing OCI Object Storage
  • Additional Settings Available
  • Multi-Part Performance Tuning Examples
  • Conclusion
  • References
Blog Posts

Arrival of native backed OCI Object Storage support

||View as Markdown|
Previous

Extremely long object names

Feb 06, 2025·Ed McClanahan
aistoreoci

Oracle Cloud Infrastructure (“OCI”) has been supported via OCI’s Amazon S3 Compatibility API for quite some time. As such, AIStore’s support for the S3 protocol has enabled OCI’s Object Storage to be utilized as a backend. But OCI also provides a more optimized API. AIStore has now added support for using OCI Object Storage as a backend via this OCI-native protocol.

Deploying OCI Backend Support

As with other backends, OCI Object Storage utilizing their OCI-native protocol is enabled by including oci in the AIS_BACKEND_PROVIDERS environment variable. Doing so will trigger the OCI Object Storage being linked and configured utilizing the OCI config file found at ~/.oci/config. See AIS Getting Started for a helpful guide on deployment steps.

You can override the location of this config file by setting the OCI_CLI_CONFIG_FILE environment variable. Several of the values searched for in this configuration file may also be overridden by setting various other environment variables:

Config File Key NameENV variable to override
tenancyOCI_TENANCY_OCID
userOCI_USER_OCID
regionOCI_REGION
fingerprintOCI_FINGERPRINT
key_fileOCI_PRIVATE_KEY (PEM-formatted contents)

Note that the OCI_PRIVATE_KEY environment variable should actually contain the (unencrypted) contents of the key_file. For an (unencrypted) private key file located at ~/.oci/prikey.pem, the OCI_PRIVATE_KEY environment variable may be set simply by:

1$ export OCI_PRIVATE_KEY=$(cat ~/.oci/prikey.pem)

While all existing buckets implicitly belong to specific OCI Compartments, in order to perform operations like listing all buckets, AIStore must also be provided the OCID for a particular Compartment by setting the OCI_COMPARTMENT_OCID environment variable to it’s OCID.

Sample Local Deployment

Here we will deploy a single storage target single proxy (gateway) AIStore instance with our desired OCI backend. First things first, ensure you have a properly formatted OCI CLI Config File (as described in OCI Config File Setup):

1$ ls ~/.oci
2config
3prikey.pem
4pubkey.pem
5...
6$ cat ~/.oci/config
7[DEFAULT]
8user=ocid1.user.oc1..aaaa...
9fingerprint=01:23:...
10tenancy=ocid1.tenancy.oc1..aaaa...
11region=us-ashburn-1
12key_file=~/.oci/prikey.pem

Be sure to set the CompartmentID’s OCID environment variable:

1$ export OCI_COMPARTMENT_OCID="ocid1.compartment.oc1..aaaa..."

Now launch a simple AIStore instance:

1$ AIS_BACKEND_PROVIDERS="oci" make kill clean cli deploy <<< $'1\n1'

Accessing OCI Object Storage

As with other supported backends, the OCI Object Storage buckets are referenced with either the oc: or oci: prefix. For a comparison between OCI CLI commands and their equivalent using the AIStore CLI, see the following:

OCI CLIAIS CLI equivalent
oci os bucket listais ls oc: —all
oci os bucket get —bucket-name bnameais bucket show oc://bname
oci os object list -bn bnameais ls oc://bname
oci os object put -bn bname —file fname —name onameais put fname oc://dir/oname
oci os object head -bn bname —name onameais object show oc://bname/oname
oci os object get -bn bname —name oname —file fnameais get oc://bname/oname fname
oci os object delete -bn bname —force —name onameais rmo oc://bname/oname

Note the addition of the --all on the ais ls command. This may be required if AIStore has yet to cache anything from any bucket from the configured OCI Object Storage. Similarly, the ais object show command may need to be adorned with --not-cached if that particular object has yet to be accessed via AIStore.

Additional Settings Available

Several behaviors of access to OCI Object Storage may be tuned via environment variables:

ENV variableDefaultTuning Effect
OCI_MAX_PAGE_SIZE1000Max objects per page in bucket listing
OCI_MAX_DOWNLOAD_SEGMENT_SIZE256MiB[“MPD”] Multi-threaded Object Download segment size
OCI_MULTI_PART_DOWNLOAD_THRESHOLD512MiBObject size trigger to use MPD
OCI_MULTI_PART_DOWNLOAD_MAX_THREADS16Max concurrent segment downloads per MPD of an object
OCI_MAX_UPLOAD_SEGMENT_SIZE256MiB[“MPU”] Multi-threaded Object Upload segment size
OCI_MULTI_PART_UPLOAD_THRESHOLD512MiBObject size trigger to use MPU
OCI_MULTI_PART_UPLOAD_MAX_THREADS16Max concurrent segment uploads per MPU of an object
OCI_MULTI_PART_THREAD_POOL_SIZE1024Max concurrent threads for all concurrent MPDs & MPUs

Multi-Part Performance Tuning Examples

To demonstrate the advantage of “multi part upload/download” tuning, let’s start with a simple test file that is practical for accessing OCI Object Storage remotely:

1$ dd if=/dev/zero of=z bs=100000 count=100
2100+0 records in
3100+0 records out
410000000 bytes (10 MB, 9.5 MiB) copied, 0.00584804 s, 1.7 GB/s

Next, let’s shrink some of those “MULTI_PART” environment variables considerably:

1$ export OCI_MAX_DOWNLOAD_SEGMENT_SIZE="100000"
2$ export OCI_MULTI_PART_DOWNLOAD_THRESHOLD="200000"
3$ export OCI_MULTI_PART_DOWNLOAD_MAX_THREADS="64"
4
5$ export OCI_MAX_UPLOAD_SEGMENT_SIZE="100000"
6$ export OCI_MULTI_PART_UPLOAD_THRESHOLD="200000"
7$ export OCI_MULTI_PART_UPLOAD_MAX_THREADS="64"

Restart your local AIStore instance and perform a PUT operation on that test file. Note that the test file z is much larger than the value of OCI_MAX_UPLOAD_SEGMENT_SIZE, thus a Multi-Part Upload will be used.

1$ time ais put z oc://edmc/z
2PUT "z" => oc://edmc/z
3
4real 0m2.879s
5user 0m0.018s
6syd 0m0.023s

Next, let’s up those thresholds to well exceed the size of the test file z:

1$ export OCI_MULTI_PART_DOWNLOAD_THRESHOLD="200000000"
2$ export OCI_MULTI_PART_UPLOAD_THRESHOLD="200000000"

Restart your local AIStore instance and repeat the PUT operation. Here, the Multi-Part Upload functionality will be bypassed.

1$ time ais put z oc://edmc/z
2PUT "z" => oc://edmc/z
3
4rea; 0m15.428s
5user 0m0.019s
6sys 0m0.026s

With the Multi-Part Download threshold also forcing single-threaded downloading for now, we will see something like:

1$ ais object evict oc://edmc/z
2evicted "z" from oc://edmc
3
4$ time ais get --yes oc://edmc/z z
5GET z from oc://edmc as z (9.54MiB)
6
7real 0m10.880s
8user 0m0.018s
9syd 0m0.033s

Finally, let’s return those threshold values to the original values:

1$ export OCI_MULTI_PART_DOWNLOAD_THRESHOLD="200000"
2$ export OCI_MULTI_PART_UPLOAD_THRESHOLD="200000"

Restart your local AIStore instance one last time and repeat the GET operation. Here, the Multi-Part Download functionality will be enabled.

1$ ais object evict oc://edmc/z
2evicted "z" from oc://edmc
3
4$ time ais get --yes oc://edmc/z z
5GET z from oc://edmc as z (9.54MiB)
6
7real 0m3.761s
8user 0m0.025s
9syd 0m0.029s

To summarize, we crafted a modest test file comparing upload (PUT) and download (GET) performance both single-threaded and multi-threaded techniques by adjusting the thresholds at which the “Multi-Part” functionality was triggered. These results are summarized here:

OperationSingle-threadedMulti-threaded
[PUT] Upload0m15.428s0m2.879s
[GET] Download0m10.880s0m3.761s

Conclusion

Native support for OCI Object Storage is now available as an AIStore backend. This support includes tunable optimizations for uploading and downloading of large objects between an AIStore (it’s client and it’s local cache) and the OCI Object Storage infrastructure.

Looking ahead, we will be focusing on leveraging the native OCI Object Storage support to produce more optimal performance relative to what is possible when utilizing the S3 protocol translation/proxy capability,

References

  • AIStore
  • AIS Getting Started
  • AIS as a Fast-Tier
  • AIS Command Line Interface
  • OCI Object Storage
  • OCI Command Line Interface
  • OCI Config File Setup